@budiauktioner/buildi-primitives 0.1.0 → 0.2.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 (1082) hide show
  1. package/BREAKING_CHANGES.md +81 -0
  2. package/CHANGELOG.md +72 -1
  3. package/PARITY.md +202 -0
  4. package/README.md +58 -9
  5. package/dist/cjs/banking/bank-resolver.js +378 -0
  6. package/dist/cjs/banking/bank-resolver.js.map +7 -0
  7. package/dist/cjs/banking/bic.js +189 -0
  8. package/dist/cjs/banking/bic.js.map +7 -0
  9. package/dist/cjs/banking/iban.js +314 -0
  10. package/dist/cjs/banking/iban.js.map +7 -0
  11. package/dist/cjs/banking/index.js +60 -0
  12. package/dist/cjs/banking/index.js.map +7 -0
  13. package/dist/cjs/banking/swedish-bank-account-holder-name.js +124 -0
  14. package/dist/cjs/banking/swedish-bank-account-holder-name.js.map +7 -0
  15. package/dist/cjs/banking/swedish-bank-account.js +211 -0
  16. package/dist/cjs/banking/swedish-bank-account.js.map +7 -0
  17. package/dist/cjs/banking/swedish-bank-clearing-number.js +156 -0
  18. package/dist/cjs/banking/swedish-bank-clearing-number.js.map +7 -0
  19. package/dist/cjs/banking/swedish-bank.js +89 -0
  20. package/dist/cjs/banking/swedish-bank.js.map +7 -0
  21. package/dist/cjs/banking/swedish-bankgiro-number.js +176 -0
  22. package/dist/cjs/banking/swedish-bankgiro-number.js.map +7 -0
  23. package/dist/cjs/banking/swedish-banking-number.js +201 -0
  24. package/dist/cjs/banking/swedish-banking-number.js.map +7 -0
  25. package/dist/cjs/banking/swedish-ocr-reference-number.js +215 -0
  26. package/dist/cjs/banking/swedish-ocr-reference-number.js.map +7 -0
  27. package/dist/cjs/banking/swedish-postgiro-number.js +173 -0
  28. package/dist/cjs/banking/swedish-postgiro-number.js.map +7 -0
  29. package/dist/cjs/banking/swedish-swish-number.js +165 -0
  30. package/dist/cjs/banking/swedish-swish-number.js.map +7 -0
  31. package/dist/cjs/contact/address-city.js +104 -0
  32. package/dist/cjs/contact/address-city.js.map +7 -0
  33. package/dist/cjs/contact/address-street.js +220 -0
  34. package/dist/cjs/contact/address-street.js.map +7 -0
  35. package/dist/cjs/contact/address-zip-code.js +195 -0
  36. package/dist/cjs/contact/address-zip-code.js.map +7 -0
  37. package/dist/cjs/contact/address.js +405 -0
  38. package/dist/cjs/contact/address.js.map +7 -0
  39. package/dist/cjs/contact/contact-address.js +142 -0
  40. package/dist/cjs/contact/contact-address.js.map +7 -0
  41. package/dist/cjs/contact/contact-external-links.js +39 -0
  42. package/dist/cjs/contact/contact-external-links.js.map +7 -0
  43. package/dist/cjs/contact/contact-lookup.js +31 -0
  44. package/dist/cjs/contact/contact-lookup.js.map +7 -0
  45. package/dist/cjs/contact/contact-masking.js +117 -0
  46. package/dist/cjs/contact/contact-masking.js.map +7 -0
  47. package/dist/cjs/contact/country-address-factory.js +97 -0
  48. package/dist/cjs/contact/country-address-factory.js.map +7 -0
  49. package/dist/cjs/contact/country-address-registry.js +36 -0
  50. package/dist/cjs/contact/country-address-registry.js.map +7 -0
  51. package/dist/cjs/contact/country-address.js +98 -0
  52. package/dist/cjs/contact/country-address.js.map +7 -0
  53. package/dist/cjs/contact/country-addresses.js +346 -0
  54. package/dist/cjs/contact/country-addresses.js.map +7 -0
  55. package/dist/cjs/contact/country-zip-code-factory.js +117 -0
  56. package/dist/cjs/contact/country-zip-code-factory.js.map +7 -0
  57. package/dist/cjs/contact/country-zip-codes.js +376 -0
  58. package/dist/cjs/contact/country-zip-codes.js.map +7 -0
  59. package/dist/cjs/contact/index.js +72 -0
  60. package/dist/cjs/contact/index.js.map +7 -0
  61. package/dist/cjs/contact/phone-calling-code.js +439 -0
  62. package/dist/cjs/contact/phone-calling-code.js.map +7 -0
  63. package/dist/cjs/contact/phone-number-test-data.js +63 -0
  64. package/dist/cjs/contact/phone-number-test-data.js.map +7 -0
  65. package/dist/cjs/contact/phone-number.js +325 -0
  66. package/dist/cjs/contact/phone-number.js.map +7 -0
  67. package/dist/cjs/contact/register-default-country-addresses.js +88 -0
  68. package/dist/cjs/contact/register-default-country-addresses.js.map +7 -0
  69. package/dist/cjs/contact/swedish-address-zip-code.js +92 -0
  70. package/dist/cjs/contact/swedish-address-zip-code.js.map +7 -0
  71. package/dist/cjs/contact/swedish-address.js +169 -0
  72. package/dist/cjs/contact/swedish-address.js.map +7 -0
  73. package/dist/cjs/finance/currency.js +251 -0
  74. package/dist/cjs/finance/currency.js.map +7 -0
  75. package/dist/cjs/finance/exchange-rates.js +51 -0
  76. package/dist/cjs/finance/exchange-rates.js.map +7 -0
  77. package/dist/cjs/finance/index.js +34 -0
  78. package/dist/cjs/finance/index.js.map +7 -0
  79. package/dist/cjs/finance/isin.js +161 -0
  80. package/dist/cjs/finance/isin.js.map +7 -0
  81. package/dist/cjs/finance/money-amount.js +307 -0
  82. package/dist/cjs/finance/money-amount.js.map +7 -0
  83. package/dist/cjs/geography/adjacency-data.js +335 -0
  84. package/dist/cjs/geography/adjacency-data.js.map +7 -0
  85. package/dist/cjs/geography/continent.js +125 -0
  86. package/dist/cjs/geography/continent.js.map +7 -0
  87. package/dist/cjs/geography/country-capital.js +45 -0
  88. package/dist/cjs/geography/country-capital.js.map +7 -0
  89. package/dist/cjs/geography/country-capitals.js +288 -0
  90. package/dist/cjs/geography/country-capitals.js.map +7 -0
  91. package/dist/cjs/geography/country-coordinates.js +238 -0
  92. package/dist/cjs/geography/country-coordinates.js.map +7 -0
  93. package/dist/cjs/geography/country-data.js +530 -0
  94. package/dist/cjs/geography/country-data.js.map +7 -0
  95. package/dist/cjs/geography/country-metadata.js +627 -0
  96. package/dist/cjs/geography/country-metadata.js.map +7 -0
  97. package/dist/cjs/geography/country.js +427 -0
  98. package/dist/cjs/geography/country.js.map +7 -0
  99. package/dist/cjs/geography/geo-coordinate.js +244 -0
  100. package/dist/cjs/geography/geo-coordinate.js.map +7 -0
  101. package/dist/cjs/geography/geography-extensions.js +82 -0
  102. package/dist/cjs/geography/geography-extensions.js.map +7 -0
  103. package/dist/cjs/geography/geography-external-links.js +52 -0
  104. package/dist/cjs/geography/geography-external-links.js.map +7 -0
  105. package/dist/cjs/geography/geography-lookup.js +31 -0
  106. package/dist/cjs/geography/geography-lookup.js.map +7 -0
  107. package/dist/cjs/geography/geography-masking.js +54 -0
  108. package/dist/cjs/geography/geography-masking.js.map +7 -0
  109. package/dist/cjs/geography/index.js +57 -0
  110. package/dist/cjs/geography/index.js.map +7 -0
  111. package/dist/cjs/geography/language.js +462 -0
  112. package/dist/cjs/geography/language.js.map +7 -0
  113. package/dist/cjs/geography/swedish-county.js +232 -0
  114. package/dist/cjs/geography/swedish-county.js.map +7 -0
  115. package/dist/cjs/geography/swedish-municipality-data.js +316 -0
  116. package/dist/cjs/geography/swedish-municipality-data.js.map +7 -0
  117. package/dist/cjs/geography/swedish-municipality.js +218 -0
  118. package/dist/cjs/geography/swedish-municipality.js.map +7 -0
  119. package/dist/cjs/index.js +33 -0
  120. package/dist/cjs/index.js.map +7 -0
  121. package/dist/cjs/internal/case-folding.js +32 -0
  122. package/dist/cjs/internal/case-folding.js.map +7 -0
  123. package/dist/cjs/internal/clock.js +32 -0
  124. package/dist/cjs/internal/clock.js.map +7 -0
  125. package/dist/cjs/internal/decimal.js +262 -0
  126. package/dist/cjs/internal/decimal.js.map +7 -0
  127. package/dist/cjs/internal/gs1-prefix.js +164 -0
  128. package/dist/cjs/internal/gs1-prefix.js.map +7 -0
  129. package/dist/cjs/internal/gtin-check-digit.js +46 -0
  130. package/dist/cjs/internal/gtin-check-digit.js.map +7 -0
  131. package/dist/cjs/internal/input-sanitization.js +79 -0
  132. package/dist/cjs/internal/input-sanitization.js.map +7 -0
  133. package/dist/cjs/internal/luhn.js +40 -0
  134. package/dist/cjs/internal/luhn.js.map +7 -0
  135. package/dist/cjs/internal/measurement-unit-parser.js +86 -0
  136. package/dist/cjs/internal/measurement-unit-parser.js.map +7 -0
  137. package/dist/cjs/internal/measurement-unit.js +130 -0
  138. package/dist/cjs/internal/measurement-unit.js.map +7 -0
  139. package/dist/cjs/internal/quantity.js +122 -0
  140. package/dist/cjs/internal/quantity.js.map +7 -0
  141. package/dist/cjs/internal/shoe-size-format.js +31 -0
  142. package/dist/cjs/internal/shoe-size-format.js.map +7 -0
  143. package/dist/cjs/measurement/area-unit.js +158 -0
  144. package/dist/cjs/measurement/area-unit.js.map +7 -0
  145. package/dist/cjs/measurement/area.js +183 -0
  146. package/dist/cjs/measurement/area.js.map +7 -0
  147. package/dist/cjs/measurement/count.js +132 -0
  148. package/dist/cjs/measurement/count.js.map +7 -0
  149. package/dist/cjs/measurement/data-size-unit.js +208 -0
  150. package/dist/cjs/measurement/data-size-unit.js.map +7 -0
  151. package/dist/cjs/measurement/data-size.js +207 -0
  152. package/dist/cjs/measurement/data-size.js.map +7 -0
  153. package/dist/cjs/measurement/electric-charge-unit.js +109 -0
  154. package/dist/cjs/measurement/electric-charge-unit.js.map +7 -0
  155. package/dist/cjs/measurement/electric-charge.js +148 -0
  156. package/dist/cjs/measurement/electric-charge.js.map +7 -0
  157. package/dist/cjs/measurement/electric-current-unit.js +108 -0
  158. package/dist/cjs/measurement/electric-current-unit.js.map +7 -0
  159. package/dist/cjs/measurement/electric-current.js +154 -0
  160. package/dist/cjs/measurement/electric-current.js.map +7 -0
  161. package/dist/cjs/measurement/energy-unit.js +201 -0
  162. package/dist/cjs/measurement/energy-unit.js.map +7 -0
  163. package/dist/cjs/measurement/energy.js +207 -0
  164. package/dist/cjs/measurement/energy.js.map +7 -0
  165. package/dist/cjs/measurement/flow-rate-unit.js +132 -0
  166. package/dist/cjs/measurement/flow-rate-unit.js.map +7 -0
  167. package/dist/cjs/measurement/flow-rate.js +162 -0
  168. package/dist/cjs/measurement/flow-rate.js.map +7 -0
  169. package/dist/cjs/measurement/frequency-unit.js +132 -0
  170. package/dist/cjs/measurement/frequency-unit.js.map +7 -0
  171. package/dist/cjs/measurement/frequency.js +165 -0
  172. package/dist/cjs/measurement/frequency.js.map +7 -0
  173. package/dist/cjs/measurement/index.js +136 -0
  174. package/dist/cjs/measurement/index.js.map +7 -0
  175. package/dist/cjs/measurement/length-unit.js +210 -0
  176. package/dist/cjs/measurement/length-unit.js.map +7 -0
  177. package/dist/cjs/measurement/length.js +208 -0
  178. package/dist/cjs/measurement/length.js.map +7 -0
  179. package/dist/cjs/measurement/luminance-unit.js +110 -0
  180. package/dist/cjs/measurement/luminance-unit.js.map +7 -0
  181. package/dist/cjs/measurement/luminance.js +158 -0
  182. package/dist/cjs/measurement/luminance.js.map +7 -0
  183. package/dist/cjs/measurement/luminous-flux-unit.js +86 -0
  184. package/dist/cjs/measurement/luminous-flux-unit.js.map +7 -0
  185. package/dist/cjs/measurement/luminous-flux.js +139 -0
  186. package/dist/cjs/measurement/luminous-flux.js.map +7 -0
  187. package/dist/cjs/measurement/percentage.js +212 -0
  188. package/dist/cjs/measurement/percentage.js.map +7 -0
  189. package/dist/cjs/measurement/power-unit.js +155 -0
  190. package/dist/cjs/measurement/power-unit.js.map +7 -0
  191. package/dist/cjs/measurement/power.js +184 -0
  192. package/dist/cjs/measurement/power.js.map +7 -0
  193. package/dist/cjs/measurement/pressure-unit.js +168 -0
  194. package/dist/cjs/measurement/pressure-unit.js.map +7 -0
  195. package/dist/cjs/measurement/pressure.js +189 -0
  196. package/dist/cjs/measurement/pressure.js.map +7 -0
  197. package/dist/cjs/measurement/rotational-speed-unit.js +96 -0
  198. package/dist/cjs/measurement/rotational-speed-unit.js.map +7 -0
  199. package/dist/cjs/measurement/rotational-speed.js +152 -0
  200. package/dist/cjs/measurement/rotational-speed.js.map +7 -0
  201. package/dist/cjs/measurement/sound-level.js +185 -0
  202. package/dist/cjs/measurement/sound-level.js.map +7 -0
  203. package/dist/cjs/measurement/speed-unit.js +119 -0
  204. package/dist/cjs/measurement/speed-unit.js.map +7 -0
  205. package/dist/cjs/measurement/speed.js +159 -0
  206. package/dist/cjs/measurement/speed.js.map +7 -0
  207. package/dist/cjs/measurement/temperature-delta.js +101 -0
  208. package/dist/cjs/measurement/temperature-delta.js.map +7 -0
  209. package/dist/cjs/measurement/temperature-unit.js +130 -0
  210. package/dist/cjs/measurement/temperature-unit.js.map +7 -0
  211. package/dist/cjs/measurement/temperature.js +216 -0
  212. package/dist/cjs/measurement/temperature.js.map +7 -0
  213. package/dist/cjs/measurement/torque-unit.js +138 -0
  214. package/dist/cjs/measurement/torque-unit.js.map +7 -0
  215. package/dist/cjs/measurement/torque.js +165 -0
  216. package/dist/cjs/measurement/torque.js.map +7 -0
  217. package/dist/cjs/measurement/voltage-unit.js +127 -0
  218. package/dist/cjs/measurement/voltage-unit.js.map +7 -0
  219. package/dist/cjs/measurement/voltage.js +159 -0
  220. package/dist/cjs/measurement/voltage.js.map +7 -0
  221. package/dist/cjs/measurement/volume-unit.js +178 -0
  222. package/dist/cjs/measurement/volume-unit.js.map +7 -0
  223. package/dist/cjs/measurement/volume.js +195 -0
  224. package/dist/cjs/measurement/volume.js.map +7 -0
  225. package/dist/cjs/measurement/weight-unit.js +158 -0
  226. package/dist/cjs/measurement/weight-unit.js.map +7 -0
  227. package/dist/cjs/measurement/weight.js +183 -0
  228. package/dist/cjs/measurement/weight.js.map +7 -0
  229. package/dist/cjs/measurement/year-month.js +204 -0
  230. package/dist/cjs/measurement/year-month.js.map +7 -0
  231. package/dist/cjs/measurement/year.js +109 -0
  232. package/dist/cjs/measurement/year.js.map +7 -0
  233. package/dist/cjs/organization/duns-number.js +114 -0
  234. package/dist/cjs/organization/duns-number.js.map +7 -0
  235. package/dist/cjs/organization/elf-code.js +132 -0
  236. package/dist/cjs/organization/elf-code.js.map +7 -0
  237. package/dist/cjs/organization/eu-organization-name.js +119 -0
  238. package/dist/cjs/organization/eu-organization-name.js.map +7 -0
  239. package/dist/cjs/organization/eu-vat-number.js +444 -0
  240. package/dist/cjs/organization/eu-vat-number.js.map +7 -0
  241. package/dist/cjs/organization/index.js +65 -0
  242. package/dist/cjs/organization/index.js.map +7 -0
  243. package/dist/cjs/organization/lei-code.js +133 -0
  244. package/dist/cjs/organization/lei-code.js.map +7 -0
  245. package/dist/cjs/organization/organization-extensions.js +80 -0
  246. package/dist/cjs/organization/organization-extensions.js.map +7 -0
  247. package/dist/cjs/organization/organization-validation-utils.js +78 -0
  248. package/dist/cjs/organization/organization-validation-utils.js.map +7 -0
  249. package/dist/cjs/organization/swedish-cfar-number.js +88 -0
  250. package/dist/cjs/organization/swedish-cfar-number.js.map +7 -0
  251. package/dist/cjs/organization/swedish-organization-identifier-type.js +34 -0
  252. package/dist/cjs/organization/swedish-organization-identifier-type.js.map +7 -0
  253. package/dist/cjs/organization/swedish-organization-identifier.js +166 -0
  254. package/dist/cjs/organization/swedish-organization-identifier.js.map +7 -0
  255. package/dist/cjs/organization/swedish-organization-name.js +255 -0
  256. package/dist/cjs/organization/swedish-organization-name.js.map +7 -0
  257. package/dist/cjs/organization/swedish-organization-number.js +289 -0
  258. package/dist/cjs/organization/swedish-organization-number.js.map +7 -0
  259. package/dist/cjs/organization/swedish-organization-type.js +51 -0
  260. package/dist/cjs/organization/swedish-organization-type.js.map +7 -0
  261. package/dist/cjs/organization/swedish-sni-code.js +96 -0
  262. package/dist/cjs/organization/swedish-sni-code.js.map +7 -0
  263. package/dist/cjs/package.json +3 -0
  264. package/dist/cjs/person/index.js +49 -0
  265. package/dist/cjs/person/index.js.map +7 -0
  266. package/dist/cjs/person/person-age.js +187 -0
  267. package/dist/cjs/person/person-age.js.map +7 -0
  268. package/dist/cjs/person/person-family-name.js +83 -0
  269. package/dist/cjs/person/person-family-name.js.map +7 -0
  270. package/dist/cjs/person/person-full-name.js +106 -0
  271. package/dist/cjs/person/person-full-name.js.map +7 -0
  272. package/dist/cjs/person/person-given-name.js +103 -0
  273. package/dist/cjs/person/person-given-name.js.map +7 -0
  274. package/dist/cjs/person/person-masking.js +48 -0
  275. package/dist/cjs/person/person-masking.js.map +7 -0
  276. package/dist/cjs/person/person-name-normalization.js +99 -0
  277. package/dist/cjs/person/person-name-normalization.js.map +7 -0
  278. package/dist/cjs/person/personnummer-parser.js +156 -0
  279. package/dist/cjs/person/personnummer-parser.js.map +7 -0
  280. package/dist/cjs/person/swedish-coordination-number.js +186 -0
  281. package/dist/cjs/person/swedish-coordination-number.js.map +7 -0
  282. package/dist/cjs/person/swedish-personal-identity-number.js +188 -0
  283. package/dist/cjs/person/swedish-personal-identity-number.js.map +7 -0
  284. package/dist/cjs/primitive-type-info.js +17 -0
  285. package/dist/cjs/primitive-type-info.js.map +7 -0
  286. package/dist/cjs/primitives-defaults.js +92 -0
  287. package/dist/cjs/primitives-defaults.js.map +7 -0
  288. package/dist/cjs/product/adult-clothing-size.js +148 -0
  289. package/dist/cjs/product/adult-clothing-size.js.map +7 -0
  290. package/dist/cjs/product/adult-shoe-size.js +139 -0
  291. package/dist/cjs/product/adult-shoe-size.js.map +7 -0
  292. package/dist/cjs/product/aspect-ratio.js +188 -0
  293. package/dist/cjs/product/aspect-ratio.js.map +7 -0
  294. package/dist/cjs/product/battery-capacity.js +184 -0
  295. package/dist/cjs/product/battery-capacity.js.map +7 -0
  296. package/dist/cjs/product/battery-chemistry.js +259 -0
  297. package/dist/cjs/product/battery-chemistry.js.map +7 -0
  298. package/dist/cjs/product/camera-resolution.js +161 -0
  299. package/dist/cjs/product/camera-resolution.js.map +7 -0
  300. package/dist/cjs/product/child-clothing-size.js +254 -0
  301. package/dist/cjs/product/child-clothing-size.js.map +7 -0
  302. package/dist/cjs/product/child-shoe-size.js +200 -0
  303. package/dist/cjs/product/child-shoe-size.js.map +7 -0
  304. package/dist/cjs/product/clothing-fit.js +223 -0
  305. package/dist/cjs/product/clothing-fit.js.map +7 -0
  306. package/dist/cjs/product/clothing-gender.js +198 -0
  307. package/dist/cjs/product/clothing-gender.js.map +7 -0
  308. package/dist/cjs/product/clothing-season.js +202 -0
  309. package/dist/cjs/product/clothing-season.js.map +7 -0
  310. package/dist/cjs/product/clothing-size-system.js +31 -0
  311. package/dist/cjs/product/clothing-size-system.js.map +7 -0
  312. package/dist/cjs/product/clothing-size.js +146 -0
  313. package/dist/cjs/product/clothing-size.js.map +7 -0
  314. package/dist/cjs/product/color.js +334 -0
  315. package/dist/cjs/product/color.js.map +7 -0
  316. package/dist/cjs/product/display-panel-type.js +287 -0
  317. package/dist/cjs/product/display-panel-type.js.map +7 -0
  318. package/dist/cjs/product/electrical-phase.js +194 -0
  319. package/dist/cjs/product/electrical-phase.js.map +7 -0
  320. package/dist/cjs/product/energy-scale.js +31 -0
  321. package/dist/cjs/product/energy-scale.js.map +7 -0
  322. package/dist/cjs/product/eu-energy-efficiency-class.js +135 -0
  323. package/dist/cjs/product/eu-energy-efficiency-class.js.map +7 -0
  324. package/dist/cjs/product/google-product-category.js +114 -0
  325. package/dist/cjs/product/google-product-category.js.map +7 -0
  326. package/dist/cjs/product/gtin.js +99 -0
  327. package/dist/cjs/product/gtin.js.map +7 -0
  328. package/dist/cjs/product/gtin12.js +130 -0
  329. package/dist/cjs/product/gtin12.js.map +7 -0
  330. package/dist/cjs/product/gtin13.js +147 -0
  331. package/dist/cjs/product/gtin13.js.map +7 -0
  332. package/dist/cjs/product/gtin14.js +135 -0
  333. package/dist/cjs/product/gtin14.js.map +7 -0
  334. package/dist/cjs/product/gtin8.js +130 -0
  335. package/dist/cjs/product/gtin8.js.map +7 -0
  336. package/dist/cjs/product/hs-code-level.js +32 -0
  337. package/dist/cjs/product/hs-code-level.js.map +7 -0
  338. package/dist/cjs/product/hs-code.js +126 -0
  339. package/dist/cjs/product/hs-code.js.map +7 -0
  340. package/dist/cjs/product/index.js +128 -0
  341. package/dist/cjs/product/index.js.map +7 -0
  342. package/dist/cjs/product/ip-rating.js +166 -0
  343. package/dist/cjs/product/ip-rating.js.map +7 -0
  344. package/dist/cjs/product/operating-system-family.js +37 -0
  345. package/dist/cjs/product/operating-system-family.js.map +7 -0
  346. package/dist/cjs/product/operating-system-info.js +100 -0
  347. package/dist/cjs/product/operating-system-info.js.map +7 -0
  348. package/dist/cjs/product/operating-system-name.js +127 -0
  349. package/dist/cjs/product/operating-system-name.js.map +7 -0
  350. package/dist/cjs/product/operating-system-version.js +110 -0
  351. package/dist/cjs/product/operating-system-version.js.map +7 -0
  352. package/dist/cjs/product/power-source.js +318 -0
  353. package/dist/cjs/product/power-source.js.map +7 -0
  354. package/dist/cjs/product/processor-speed.js +159 -0
  355. package/dist/cjs/product/processor-speed.js.map +7 -0
  356. package/dist/cjs/product/product-extensions.js +27 -0
  357. package/dist/cjs/product/product-extensions.js.map +7 -0
  358. package/dist/cjs/product/product-masking.js +102 -0
  359. package/dist/cjs/product/product-masking.js.map +7 -0
  360. package/dist/cjs/product/ram-capacity.js +154 -0
  361. package/dist/cjs/product/ram-capacity.js.map +7 -0
  362. package/dist/cjs/product/refrigerant-family.js +40 -0
  363. package/dist/cjs/product/refrigerant-family.js.map +7 -0
  364. package/dist/cjs/product/refrigerant.js +419 -0
  365. package/dist/cjs/product/refrigerant.js.map +7 -0
  366. package/dist/cjs/product/screen-resolution.js +197 -0
  367. package/dist/cjs/product/screen-resolution.js.map +7 -0
  368. package/dist/cjs/product/screen-size.js +184 -0
  369. package/dist/cjs/product/screen-size.js.map +7 -0
  370. package/dist/cjs/product/shoe-size-system.js +31 -0
  371. package/dist/cjs/product/shoe-size-system.js.map +7 -0
  372. package/dist/cjs/product/shoe-size.js +138 -0
  373. package/dist/cjs/product/shoe-size.js.map +7 -0
  374. package/dist/cjs/product/storage-capacity.js +159 -0
  375. package/dist/cjs/product/storage-capacity.js.map +7 -0
  376. package/dist/cjs/product/storage-media-type.js +271 -0
  377. package/dist/cjs/product/storage-media-type.js.map +7 -0
  378. package/dist/cjs/property/index.js +31 -0
  379. package/dist/cjs/property/index.js.map +7 -0
  380. package/dist/cjs/property/swedish-property-designation.js +179 -0
  381. package/dist/cjs/property/swedish-property-designation.js.map +7 -0
  382. package/dist/cjs/property/swedish-property-taxation-code.js +218 -0
  383. package/dist/cjs/property/swedish-property-taxation-code.js.map +7 -0
  384. package/dist/cjs/register-default-text-scanners.js +290 -0
  385. package/dist/cjs/register-default-text-scanners.js.map +7 -0
  386. package/dist/cjs/sample-data/index.js +358 -0
  387. package/dist/cjs/sample-data/index.js.map +7 -0
  388. package/dist/cjs/text-scanning/index.js +38 -0
  389. package/dist/cjs/text-scanning/index.js.map +7 -0
  390. package/dist/cjs/text-scanning/text-candidate-category.js +35 -0
  391. package/dist/cjs/text-scanning/text-candidate-category.js.map +7 -0
  392. package/dist/cjs/text-scanning/text-candidate.js +75 -0
  393. package/dist/cjs/text-scanning/text-candidate.js.map +7 -0
  394. package/dist/cjs/text-scanning/text-match-confidence.js +43 -0
  395. package/dist/cjs/text-scanning/text-match-confidence.js.map +7 -0
  396. package/dist/cjs/text-scanning/text-scan-helpers.js +98 -0
  397. package/dist/cjs/text-scanning/text-scan-helpers.js.map +7 -0
  398. package/dist/cjs/text-scanning/text-scan-result.js +333 -0
  399. package/dist/cjs/text-scanning/text-scan-result.js.map +7 -0
  400. package/dist/cjs/text-scanning/text-scanner-options.js +29 -0
  401. package/dist/cjs/text-scanning/text-scanner-options.js.map +7 -0
  402. package/dist/cjs/text-scanning/text-scanner.js +60 -0
  403. package/dist/cjs/text-scanning/text-scanner.js.map +7 -0
  404. package/dist/cjs/validation/index.js +29 -0
  405. package/dist/cjs/validation/index.js.map +7 -0
  406. package/dist/cjs/validation/validation-error-reason.js +53 -0
  407. package/dist/cjs/validation/validation-error-reason.js.map +7 -0
  408. package/dist/cjs/validation/validation-issue.js +43 -0
  409. package/dist/cjs/validation/validation-issue.js.map +7 -0
  410. package/dist/cjs/validation/validation-result.js +52 -0
  411. package/dist/cjs/validation/validation-result.js.map +7 -0
  412. package/dist/cjs/vehicle/boat-ce-design-category.js +200 -0
  413. package/dist/cjs/vehicle/boat-ce-design-category.js.map +7 -0
  414. package/dist/cjs/vehicle/boat-hull-material.js +222 -0
  415. package/dist/cjs/vehicle/boat-hull-material.js.map +7 -0
  416. package/dist/cjs/vehicle/body-type.js +325 -0
  417. package/dist/cjs/vehicle/body-type.js.map +7 -0
  418. package/dist/cjs/vehicle/bolt-pattern.js +150 -0
  419. package/dist/cjs/vehicle/bolt-pattern.js.map +7 -0
  420. package/dist/cjs/vehicle/drivetrain-type.js +200 -0
  421. package/dist/cjs/vehicle/drivetrain-type.js.map +7 -0
  422. package/dist/cjs/vehicle/emission-rate.js +194 -0
  423. package/dist/cjs/vehicle/emission-rate.js.map +7 -0
  424. package/dist/cjs/vehicle/energy-consumption.js +250 -0
  425. package/dist/cjs/vehicle/energy-consumption.js.map +7 -0
  426. package/dist/cjs/vehicle/engine-displacement.js +169 -0
  427. package/dist/cjs/vehicle/engine-displacement.js.map +7 -0
  428. package/dist/cjs/vehicle/engine-power.js +211 -0
  429. package/dist/cjs/vehicle/engine-power.js.map +7 -0
  430. package/dist/cjs/vehicle/eu-type-approval-number.js +196 -0
  431. package/dist/cjs/vehicle/eu-type-approval-number.js.map +7 -0
  432. package/dist/cjs/vehicle/eu-vehicle-category.js +167 -0
  433. package/dist/cjs/vehicle/eu-vehicle-category.js.map +7 -0
  434. package/dist/cjs/vehicle/euro-emission-class.js +313 -0
  435. package/dist/cjs/vehicle/euro-emission-class.js.map +7 -0
  436. package/dist/cjs/vehicle/fuel-consumption-norm.js +206 -0
  437. package/dist/cjs/vehicle/fuel-consumption-norm.js.map +7 -0
  438. package/dist/cjs/vehicle/fuel-consumption.js +281 -0
  439. package/dist/cjs/vehicle/fuel-consumption.js.map +7 -0
  440. package/dist/cjs/vehicle/fuel-type.js +288 -0
  441. package/dist/cjs/vehicle/fuel-type.js.map +7 -0
  442. package/dist/cjs/vehicle/index.js +108 -0
  443. package/dist/cjs/vehicle/index.js.map +7 -0
  444. package/dist/cjs/vehicle/odometer-reading.js +165 -0
  445. package/dist/cjs/vehicle/odometer-reading.js.map +7 -0
  446. package/dist/cjs/vehicle/operating-hours.js +174 -0
  447. package/dist/cjs/vehicle/operating-hours.js.map +7 -0
  448. package/dist/cjs/vehicle/suspension-type.js +312 -0
  449. package/dist/cjs/vehicle/suspension-type.js.map +7 -0
  450. package/dist/cjs/vehicle/swedish-driving-license-category.js +404 -0
  451. package/dist/cjs/vehicle/swedish-driving-license-category.js.map +7 -0
  452. package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js +32 -0
  453. package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
  454. package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js +232 -0
  455. package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
  456. package/dist/cjs/vehicle/swedish-vehicle-registration-number.js +193 -0
  457. package/dist/cjs/vehicle/swedish-vehicle-registration-number.js.map +7 -0
  458. package/dist/cjs/vehicle/swedish-vehicle-status.js +172 -0
  459. package/dist/cjs/vehicle/swedish-vehicle-status.js.map +7 -0
  460. package/dist/cjs/vehicle/swedish-vehicle-type.js +282 -0
  461. package/dist/cjs/vehicle/swedish-vehicle-type.js.map +7 -0
  462. package/dist/cjs/vehicle/tire-dimension.js +206 -0
  463. package/dist/cjs/vehicle/tire-dimension.js.map +7 -0
  464. package/dist/cjs/vehicle/tire-type.js +228 -0
  465. package/dist/cjs/vehicle/tire-type.js.map +7 -0
  466. package/dist/cjs/vehicle/track-type.js +188 -0
  467. package/dist/cjs/vehicle/track-type.js.map +7 -0
  468. package/dist/cjs/vehicle/transmission-type.js +258 -0
  469. package/dist/cjs/vehicle/transmission-type.js.map +7 -0
  470. package/dist/cjs/vehicle/vehicle-extensions.js +35 -0
  471. package/dist/cjs/vehicle/vehicle-extensions.js.map +7 -0
  472. package/dist/cjs/vehicle/vehicle-identification-number.js +265 -0
  473. package/dist/cjs/vehicle/vehicle-identification-number.js.map +7 -0
  474. package/dist/cjs/vehicle/vehicle-masking.js +68 -0
  475. package/dist/cjs/vehicle/vehicle-masking.js.map +7 -0
  476. package/dist/cjs/vehicle/wheel-rim-dimension.js +183 -0
  477. package/dist/cjs/vehicle/wheel-rim-dimension.js.map +7 -0
  478. package/dist/cjs/web/email-address.js +542 -0
  479. package/dist/cjs/web/email-address.js.map +7 -0
  480. package/dist/cjs/web/index.js +31 -0
  481. package/dist/cjs/web/index.js.map +7 -0
  482. package/dist/cjs/web/url.js +353 -0
  483. package/dist/cjs/web/url.js.map +7 -0
  484. package/dist/esm/banking/bank-resolver.js +358 -0
  485. package/dist/esm/banking/bank-resolver.js.map +7 -0
  486. package/dist/esm/banking/bic.js +169 -0
  487. package/dist/esm/banking/bic.js.map +7 -0
  488. package/dist/esm/banking/iban.js +294 -0
  489. package/dist/esm/banking/iban.js.map +7 -0
  490. package/dist/esm/banking/index.js +60 -0
  491. package/dist/esm/banking/index.js.map +7 -0
  492. package/dist/esm/banking/swedish-bank-account-holder-name.js +104 -0
  493. package/dist/esm/banking/swedish-bank-account-holder-name.js.map +7 -0
  494. package/dist/esm/banking/swedish-bank-account.js +199 -0
  495. package/dist/esm/banking/swedish-bank-account.js.map +7 -0
  496. package/dist/esm/banking/swedish-bank-clearing-number.js +136 -0
  497. package/dist/esm/banking/swedish-bank-clearing-number.js.map +7 -0
  498. package/dist/esm/banking/swedish-bank.js +69 -0
  499. package/dist/esm/banking/swedish-bank.js.map +7 -0
  500. package/dist/esm/banking/swedish-bankgiro-number.js +156 -0
  501. package/dist/esm/banking/swedish-bankgiro-number.js.map +7 -0
  502. package/dist/esm/banking/swedish-banking-number.js +181 -0
  503. package/dist/esm/banking/swedish-banking-number.js.map +7 -0
  504. package/dist/esm/banking/swedish-ocr-reference-number.js +195 -0
  505. package/dist/esm/banking/swedish-ocr-reference-number.js.map +7 -0
  506. package/dist/esm/banking/swedish-postgiro-number.js +153 -0
  507. package/dist/esm/banking/swedish-postgiro-number.js.map +7 -0
  508. package/dist/esm/banking/swedish-swish-number.js +145 -0
  509. package/dist/esm/banking/swedish-swish-number.js.map +7 -0
  510. package/dist/esm/contact/address-city.js +84 -0
  511. package/dist/esm/contact/address-city.js.map +7 -0
  512. package/dist/esm/contact/address-street.js +200 -0
  513. package/dist/esm/contact/address-street.js.map +7 -0
  514. package/dist/esm/contact/address-zip-code.js +175 -0
  515. package/dist/esm/contact/address-zip-code.js.map +7 -0
  516. package/dist/esm/contact/address.js +388 -0
  517. package/dist/esm/contact/address.js.map +7 -0
  518. package/dist/esm/contact/contact-address.js +122 -0
  519. package/dist/esm/contact/contact-address.js.map +7 -0
  520. package/dist/esm/contact/contact-external-links.js +19 -0
  521. package/dist/esm/contact/contact-external-links.js.map +7 -0
  522. package/dist/esm/contact/contact-lookup.js +11 -0
  523. package/dist/esm/contact/contact-lookup.js.map +7 -0
  524. package/dist/esm/contact/contact-masking.js +97 -0
  525. package/dist/esm/contact/contact-masking.js.map +7 -0
  526. package/dist/esm/contact/country-address-factory.js +80 -0
  527. package/dist/esm/contact/country-address-factory.js.map +7 -0
  528. package/dist/esm/contact/country-address-registry.js +16 -0
  529. package/dist/esm/contact/country-address-registry.js.map +7 -0
  530. package/dist/esm/contact/country-address.js +78 -0
  531. package/dist/esm/contact/country-address.js.map +7 -0
  532. package/dist/esm/contact/country-addresses.js +316 -0
  533. package/dist/esm/contact/country-addresses.js.map +7 -0
  534. package/dist/esm/contact/country-zip-code-factory.js +97 -0
  535. package/dist/esm/contact/country-zip-code-factory.js.map +7 -0
  536. package/dist/esm/contact/country-zip-codes.js +363 -0
  537. package/dist/esm/contact/country-zip-codes.js.map +7 -0
  538. package/dist/esm/contact/index.js +63 -0
  539. package/dist/esm/contact/index.js.map +7 -0
  540. package/dist/esm/contact/phone-calling-code.js +419 -0
  541. package/dist/esm/contact/phone-calling-code.js.map +7 -0
  542. package/dist/esm/contact/phone-number-test-data.js +43 -0
  543. package/dist/esm/contact/phone-number-test-data.js.map +7 -0
  544. package/dist/esm/contact/phone-number.js +305 -0
  545. package/dist/esm/contact/phone-number.js.map +7 -0
  546. package/dist/esm/contact/register-default-country-addresses.js +58 -0
  547. package/dist/esm/contact/register-default-country-addresses.js.map +7 -0
  548. package/dist/esm/contact/swedish-address-zip-code.js +72 -0
  549. package/dist/esm/contact/swedish-address-zip-code.js.map +7 -0
  550. package/dist/esm/contact/swedish-address.js +149 -0
  551. package/dist/esm/contact/swedish-address.js.map +7 -0
  552. package/dist/esm/finance/currency.js +231 -0
  553. package/dist/esm/finance/currency.js.map +7 -0
  554. package/dist/esm/finance/exchange-rates.js +31 -0
  555. package/dist/esm/finance/exchange-rates.js.map +7 -0
  556. package/dist/esm/finance/index.js +14 -0
  557. package/dist/esm/finance/index.js.map +7 -0
  558. package/dist/esm/finance/isin.js +141 -0
  559. package/dist/esm/finance/isin.js.map +7 -0
  560. package/dist/esm/finance/money-amount.js +287 -0
  561. package/dist/esm/finance/money-amount.js.map +7 -0
  562. package/dist/esm/geography/adjacency-data.js +315 -0
  563. package/dist/esm/geography/adjacency-data.js.map +7 -0
  564. package/dist/esm/geography/continent.js +105 -0
  565. package/dist/esm/geography/continent.js.map +7 -0
  566. package/dist/esm/geography/country-capital.js +25 -0
  567. package/dist/esm/geography/country-capital.js.map +7 -0
  568. package/dist/esm/geography/country-capitals.js +268 -0
  569. package/dist/esm/geography/country-capitals.js.map +7 -0
  570. package/dist/esm/geography/country-coordinates.js +218 -0
  571. package/dist/esm/geography/country-coordinates.js.map +7 -0
  572. package/dist/esm/geography/country-data.js +510 -0
  573. package/dist/esm/geography/country-data.js.map +7 -0
  574. package/dist/esm/geography/country-metadata.js +607 -0
  575. package/dist/esm/geography/country-metadata.js.map +7 -0
  576. package/dist/esm/geography/country.js +417 -0
  577. package/dist/esm/geography/country.js.map +7 -0
  578. package/dist/esm/geography/geo-coordinate.js +224 -0
  579. package/dist/esm/geography/geo-coordinate.js.map +7 -0
  580. package/dist/esm/geography/geography-extensions.js +62 -0
  581. package/dist/esm/geography/geography-extensions.js.map +7 -0
  582. package/dist/esm/geography/geography-external-links.js +32 -0
  583. package/dist/esm/geography/geography-external-links.js.map +7 -0
  584. package/dist/esm/geography/geography-lookup.js +11 -0
  585. package/dist/esm/geography/geography-lookup.js.map +7 -0
  586. package/dist/esm/geography/geography-masking.js +34 -0
  587. package/dist/esm/geography/geography-masking.js.map +7 -0
  588. package/dist/esm/geography/index.js +55 -0
  589. package/dist/esm/geography/index.js.map +7 -0
  590. package/dist/esm/geography/language.js +442 -0
  591. package/dist/esm/geography/language.js.map +7 -0
  592. package/dist/esm/geography/swedish-county.js +212 -0
  593. package/dist/esm/geography/swedish-county.js.map +7 -0
  594. package/dist/esm/geography/swedish-municipality-data.js +296 -0
  595. package/dist/esm/geography/swedish-municipality-data.js.map +7 -0
  596. package/dist/esm/geography/swedish-municipality.js +198 -0
  597. package/dist/esm/geography/swedish-municipality.js.map +7 -0
  598. package/dist/esm/index.js +16 -0
  599. package/dist/esm/index.js.map +7 -0
  600. package/dist/esm/internal/case-folding.js +12 -0
  601. package/dist/esm/internal/case-folding.js.map +7 -0
  602. package/dist/esm/internal/clock.js +12 -0
  603. package/dist/esm/internal/clock.js.map +7 -0
  604. package/dist/esm/internal/decimal.js +242 -0
  605. package/dist/esm/internal/decimal.js.map +7 -0
  606. package/dist/esm/internal/gs1-prefix.js +144 -0
  607. package/dist/esm/internal/gs1-prefix.js.map +7 -0
  608. package/dist/esm/internal/gtin-check-digit.js +26 -0
  609. package/dist/esm/internal/gtin-check-digit.js.map +7 -0
  610. package/dist/esm/internal/input-sanitization.js +59 -0
  611. package/dist/esm/internal/input-sanitization.js.map +7 -0
  612. package/dist/esm/internal/luhn.js +20 -0
  613. package/dist/esm/internal/luhn.js.map +7 -0
  614. package/dist/esm/internal/measurement-unit-parser.js +66 -0
  615. package/dist/esm/internal/measurement-unit-parser.js.map +7 -0
  616. package/dist/esm/internal/measurement-unit.js +110 -0
  617. package/dist/esm/internal/measurement-unit.js.map +7 -0
  618. package/dist/esm/internal/quantity.js +102 -0
  619. package/dist/esm/internal/quantity.js.map +7 -0
  620. package/dist/esm/internal/shoe-size-format.js +11 -0
  621. package/dist/esm/internal/shoe-size-format.js.map +7 -0
  622. package/dist/esm/measurement/area-unit.js +138 -0
  623. package/dist/esm/measurement/area-unit.js.map +7 -0
  624. package/dist/esm/measurement/area.js +163 -0
  625. package/dist/esm/measurement/area.js.map +7 -0
  626. package/dist/esm/measurement/count.js +112 -0
  627. package/dist/esm/measurement/count.js.map +7 -0
  628. package/dist/esm/measurement/data-size-unit.js +188 -0
  629. package/dist/esm/measurement/data-size-unit.js.map +7 -0
  630. package/dist/esm/measurement/data-size.js +187 -0
  631. package/dist/esm/measurement/data-size.js.map +7 -0
  632. package/dist/esm/measurement/electric-charge-unit.js +89 -0
  633. package/dist/esm/measurement/electric-charge-unit.js.map +7 -0
  634. package/dist/esm/measurement/electric-charge.js +128 -0
  635. package/dist/esm/measurement/electric-charge.js.map +7 -0
  636. package/dist/esm/measurement/electric-current-unit.js +88 -0
  637. package/dist/esm/measurement/electric-current-unit.js.map +7 -0
  638. package/dist/esm/measurement/electric-current.js +134 -0
  639. package/dist/esm/measurement/electric-current.js.map +7 -0
  640. package/dist/esm/measurement/energy-unit.js +181 -0
  641. package/dist/esm/measurement/energy-unit.js.map +7 -0
  642. package/dist/esm/measurement/energy.js +187 -0
  643. package/dist/esm/measurement/energy.js.map +7 -0
  644. package/dist/esm/measurement/flow-rate-unit.js +112 -0
  645. package/dist/esm/measurement/flow-rate-unit.js.map +7 -0
  646. package/dist/esm/measurement/flow-rate.js +142 -0
  647. package/dist/esm/measurement/flow-rate.js.map +7 -0
  648. package/dist/esm/measurement/frequency-unit.js +112 -0
  649. package/dist/esm/measurement/frequency-unit.js.map +7 -0
  650. package/dist/esm/measurement/frequency.js +145 -0
  651. package/dist/esm/measurement/frequency.js.map +7 -0
  652. package/dist/esm/measurement/index.js +129 -0
  653. package/dist/esm/measurement/index.js.map +7 -0
  654. package/dist/esm/measurement/length-unit.js +190 -0
  655. package/dist/esm/measurement/length-unit.js.map +7 -0
  656. package/dist/esm/measurement/length.js +188 -0
  657. package/dist/esm/measurement/length.js.map +7 -0
  658. package/dist/esm/measurement/luminance-unit.js +90 -0
  659. package/dist/esm/measurement/luminance-unit.js.map +7 -0
  660. package/dist/esm/measurement/luminance.js +138 -0
  661. package/dist/esm/measurement/luminance.js.map +7 -0
  662. package/dist/esm/measurement/luminous-flux-unit.js +66 -0
  663. package/dist/esm/measurement/luminous-flux-unit.js.map +7 -0
  664. package/dist/esm/measurement/luminous-flux.js +119 -0
  665. package/dist/esm/measurement/luminous-flux.js.map +7 -0
  666. package/dist/esm/measurement/percentage.js +192 -0
  667. package/dist/esm/measurement/percentage.js.map +7 -0
  668. package/dist/esm/measurement/power-unit.js +135 -0
  669. package/dist/esm/measurement/power-unit.js.map +7 -0
  670. package/dist/esm/measurement/power.js +164 -0
  671. package/dist/esm/measurement/power.js.map +7 -0
  672. package/dist/esm/measurement/pressure-unit.js +148 -0
  673. package/dist/esm/measurement/pressure-unit.js.map +7 -0
  674. package/dist/esm/measurement/pressure.js +169 -0
  675. package/dist/esm/measurement/pressure.js.map +7 -0
  676. package/dist/esm/measurement/rotational-speed-unit.js +76 -0
  677. package/dist/esm/measurement/rotational-speed-unit.js.map +7 -0
  678. package/dist/esm/measurement/rotational-speed.js +132 -0
  679. package/dist/esm/measurement/rotational-speed.js.map +7 -0
  680. package/dist/esm/measurement/sound-level.js +165 -0
  681. package/dist/esm/measurement/sound-level.js.map +7 -0
  682. package/dist/esm/measurement/speed-unit.js +99 -0
  683. package/dist/esm/measurement/speed-unit.js.map +7 -0
  684. package/dist/esm/measurement/speed.js +139 -0
  685. package/dist/esm/measurement/speed.js.map +7 -0
  686. package/dist/esm/measurement/temperature-delta.js +81 -0
  687. package/dist/esm/measurement/temperature-delta.js.map +7 -0
  688. package/dist/esm/measurement/temperature-unit.js +110 -0
  689. package/dist/esm/measurement/temperature-unit.js.map +7 -0
  690. package/dist/esm/measurement/temperature.js +196 -0
  691. package/dist/esm/measurement/temperature.js.map +7 -0
  692. package/dist/esm/measurement/torque-unit.js +118 -0
  693. package/dist/esm/measurement/torque-unit.js.map +7 -0
  694. package/dist/esm/measurement/torque.js +145 -0
  695. package/dist/esm/measurement/torque.js.map +7 -0
  696. package/dist/esm/measurement/voltage-unit.js +107 -0
  697. package/dist/esm/measurement/voltage-unit.js.map +7 -0
  698. package/dist/esm/measurement/voltage.js +139 -0
  699. package/dist/esm/measurement/voltage.js.map +7 -0
  700. package/dist/esm/measurement/volume-unit.js +158 -0
  701. package/dist/esm/measurement/volume-unit.js.map +7 -0
  702. package/dist/esm/measurement/volume.js +175 -0
  703. package/dist/esm/measurement/volume.js.map +7 -0
  704. package/dist/esm/measurement/weight-unit.js +138 -0
  705. package/dist/esm/measurement/weight-unit.js.map +7 -0
  706. package/dist/esm/measurement/weight.js +163 -0
  707. package/dist/esm/measurement/weight.js.map +7 -0
  708. package/dist/esm/measurement/year-month.js +184 -0
  709. package/dist/esm/measurement/year-month.js.map +7 -0
  710. package/dist/esm/measurement/year.js +89 -0
  711. package/dist/esm/measurement/year.js.map +7 -0
  712. package/dist/esm/organization/duns-number.js +94 -0
  713. package/dist/esm/organization/duns-number.js.map +7 -0
  714. package/dist/esm/organization/elf-code.js +112 -0
  715. package/dist/esm/organization/elf-code.js.map +7 -0
  716. package/dist/esm/organization/eu-organization-name.js +99 -0
  717. package/dist/esm/organization/eu-organization-name.js.map +7 -0
  718. package/dist/esm/organization/eu-vat-number.js +424 -0
  719. package/dist/esm/organization/eu-vat-number.js.map +7 -0
  720. package/dist/esm/organization/index.js +62 -0
  721. package/dist/esm/organization/index.js.map +7 -0
  722. package/dist/esm/organization/lei-code.js +113 -0
  723. package/dist/esm/organization/lei-code.js.map +7 -0
  724. package/dist/esm/organization/organization-extensions.js +60 -0
  725. package/dist/esm/organization/organization-extensions.js.map +7 -0
  726. package/dist/esm/organization/organization-validation-utils.js +58 -0
  727. package/dist/esm/organization/organization-validation-utils.js.map +7 -0
  728. package/dist/esm/organization/swedish-cfar-number.js +68 -0
  729. package/dist/esm/organization/swedish-cfar-number.js.map +7 -0
  730. package/dist/esm/organization/swedish-organization-identifier-type.js +14 -0
  731. package/dist/esm/organization/swedish-organization-identifier-type.js.map +7 -0
  732. package/dist/esm/organization/swedish-organization-identifier.js +146 -0
  733. package/dist/esm/organization/swedish-organization-identifier.js.map +7 -0
  734. package/dist/esm/organization/swedish-organization-name.js +235 -0
  735. package/dist/esm/organization/swedish-organization-name.js.map +7 -0
  736. package/dist/esm/organization/swedish-organization-number.js +269 -0
  737. package/dist/esm/organization/swedish-organization-number.js.map +7 -0
  738. package/dist/esm/organization/swedish-organization-type.js +31 -0
  739. package/dist/esm/organization/swedish-organization-type.js.map +7 -0
  740. package/dist/esm/organization/swedish-sni-code.js +76 -0
  741. package/dist/esm/organization/swedish-sni-code.js.map +7 -0
  742. package/dist/esm/person/index.js +42 -0
  743. package/dist/esm/person/index.js.map +7 -0
  744. package/dist/esm/person/person-age.js +167 -0
  745. package/dist/esm/person/person-age.js.map +7 -0
  746. package/dist/esm/person/person-family-name.js +67 -0
  747. package/dist/esm/person/person-family-name.js.map +7 -0
  748. package/dist/esm/person/person-full-name.js +86 -0
  749. package/dist/esm/person/person-full-name.js.map +7 -0
  750. package/dist/esm/person/person-given-name.js +87 -0
  751. package/dist/esm/person/person-given-name.js.map +7 -0
  752. package/dist/esm/person/person-masking.js +28 -0
  753. package/dist/esm/person/person-masking.js.map +7 -0
  754. package/dist/esm/person/person-name-normalization.js +79 -0
  755. package/dist/esm/person/person-name-normalization.js.map +7 -0
  756. package/dist/esm/person/personnummer-parser.js +136 -0
  757. package/dist/esm/person/personnummer-parser.js.map +7 -0
  758. package/dist/esm/person/swedish-coordination-number.js +173 -0
  759. package/dist/esm/person/swedish-coordination-number.js.map +7 -0
  760. package/dist/esm/person/swedish-personal-identity-number.js +175 -0
  761. package/dist/esm/person/swedish-personal-identity-number.js.map +7 -0
  762. package/dist/esm/primitive-type-info.js +1 -0
  763. package/dist/esm/primitive-type-info.js.map +7 -0
  764. package/dist/esm/primitives-defaults.js +72 -0
  765. package/dist/esm/primitives-defaults.js.map +7 -0
  766. package/dist/esm/product/adult-clothing-size.js +128 -0
  767. package/dist/esm/product/adult-clothing-size.js.map +7 -0
  768. package/dist/esm/product/adult-shoe-size.js +119 -0
  769. package/dist/esm/product/adult-shoe-size.js.map +7 -0
  770. package/dist/esm/product/aspect-ratio.js +168 -0
  771. package/dist/esm/product/aspect-ratio.js.map +7 -0
  772. package/dist/esm/product/battery-capacity.js +164 -0
  773. package/dist/esm/product/battery-capacity.js.map +7 -0
  774. package/dist/esm/product/battery-chemistry.js +239 -0
  775. package/dist/esm/product/battery-chemistry.js.map +7 -0
  776. package/dist/esm/product/camera-resolution.js +141 -0
  777. package/dist/esm/product/camera-resolution.js.map +7 -0
  778. package/dist/esm/product/child-clothing-size.js +234 -0
  779. package/dist/esm/product/child-clothing-size.js.map +7 -0
  780. package/dist/esm/product/child-shoe-size.js +180 -0
  781. package/dist/esm/product/child-shoe-size.js.map +7 -0
  782. package/dist/esm/product/clothing-fit.js +203 -0
  783. package/dist/esm/product/clothing-fit.js.map +7 -0
  784. package/dist/esm/product/clothing-gender.js +178 -0
  785. package/dist/esm/product/clothing-gender.js.map +7 -0
  786. package/dist/esm/product/clothing-season.js +182 -0
  787. package/dist/esm/product/clothing-season.js.map +7 -0
  788. package/dist/esm/product/clothing-size-system.js +11 -0
  789. package/dist/esm/product/clothing-size-system.js.map +7 -0
  790. package/dist/esm/product/clothing-size.js +126 -0
  791. package/dist/esm/product/clothing-size.js.map +7 -0
  792. package/dist/esm/product/color.js +314 -0
  793. package/dist/esm/product/color.js.map +7 -0
  794. package/dist/esm/product/display-panel-type.js +267 -0
  795. package/dist/esm/product/display-panel-type.js.map +7 -0
  796. package/dist/esm/product/electrical-phase.js +174 -0
  797. package/dist/esm/product/electrical-phase.js.map +7 -0
  798. package/dist/esm/product/energy-scale.js +11 -0
  799. package/dist/esm/product/energy-scale.js.map +7 -0
  800. package/dist/esm/product/eu-energy-efficiency-class.js +115 -0
  801. package/dist/esm/product/eu-energy-efficiency-class.js.map +7 -0
  802. package/dist/esm/product/google-product-category.js +94 -0
  803. package/dist/esm/product/google-product-category.js.map +7 -0
  804. package/dist/esm/product/gtin.js +83 -0
  805. package/dist/esm/product/gtin.js.map +7 -0
  806. package/dist/esm/product/gtin12.js +110 -0
  807. package/dist/esm/product/gtin12.js.map +7 -0
  808. package/dist/esm/product/gtin13.js +127 -0
  809. package/dist/esm/product/gtin13.js.map +7 -0
  810. package/dist/esm/product/gtin14.js +115 -0
  811. package/dist/esm/product/gtin14.js.map +7 -0
  812. package/dist/esm/product/gtin8.js +110 -0
  813. package/dist/esm/product/gtin8.js.map +7 -0
  814. package/dist/esm/product/hs-code-level.js +12 -0
  815. package/dist/esm/product/hs-code-level.js.map +7 -0
  816. package/dist/esm/product/hs-code.js +106 -0
  817. package/dist/esm/product/hs-code.js.map +7 -0
  818. package/dist/esm/product/index.js +137 -0
  819. package/dist/esm/product/index.js.map +7 -0
  820. package/dist/esm/product/ip-rating.js +146 -0
  821. package/dist/esm/product/ip-rating.js.map +7 -0
  822. package/dist/esm/product/operating-system-family.js +17 -0
  823. package/dist/esm/product/operating-system-family.js.map +7 -0
  824. package/dist/esm/product/operating-system-info.js +80 -0
  825. package/dist/esm/product/operating-system-info.js.map +7 -0
  826. package/dist/esm/product/operating-system-name.js +107 -0
  827. package/dist/esm/product/operating-system-name.js.map +7 -0
  828. package/dist/esm/product/operating-system-version.js +90 -0
  829. package/dist/esm/product/operating-system-version.js.map +7 -0
  830. package/dist/esm/product/power-source.js +298 -0
  831. package/dist/esm/product/power-source.js.map +7 -0
  832. package/dist/esm/product/processor-speed.js +139 -0
  833. package/dist/esm/product/processor-speed.js.map +7 -0
  834. package/dist/esm/product/product-extensions.js +7 -0
  835. package/dist/esm/product/product-extensions.js.map +7 -0
  836. package/dist/esm/product/product-masking.js +82 -0
  837. package/dist/esm/product/product-masking.js.map +7 -0
  838. package/dist/esm/product/ram-capacity.js +134 -0
  839. package/dist/esm/product/ram-capacity.js.map +7 -0
  840. package/dist/esm/product/refrigerant-family.js +20 -0
  841. package/dist/esm/product/refrigerant-family.js.map +7 -0
  842. package/dist/esm/product/refrigerant.js +399 -0
  843. package/dist/esm/product/refrigerant.js.map +7 -0
  844. package/dist/esm/product/screen-resolution.js +177 -0
  845. package/dist/esm/product/screen-resolution.js.map +7 -0
  846. package/dist/esm/product/screen-size.js +164 -0
  847. package/dist/esm/product/screen-size.js.map +7 -0
  848. package/dist/esm/product/shoe-size-system.js +11 -0
  849. package/dist/esm/product/shoe-size-system.js.map +7 -0
  850. package/dist/esm/product/shoe-size.js +118 -0
  851. package/dist/esm/product/shoe-size.js.map +7 -0
  852. package/dist/esm/product/storage-capacity.js +139 -0
  853. package/dist/esm/product/storage-capacity.js.map +7 -0
  854. package/dist/esm/product/storage-media-type.js +251 -0
  855. package/dist/esm/product/storage-media-type.js.map +7 -0
  856. package/dist/esm/property/index.js +19 -0
  857. package/dist/esm/property/index.js.map +7 -0
  858. package/dist/esm/property/swedish-property-designation.js +159 -0
  859. package/dist/esm/property/swedish-property-designation.js.map +7 -0
  860. package/dist/esm/property/swedish-property-taxation-code.js +198 -0
  861. package/dist/esm/property/swedish-property-taxation-code.js.map +7 -0
  862. package/dist/esm/register-default-text-scanners.js +270 -0
  863. package/dist/esm/register-default-text-scanners.js.map +7 -0
  864. package/dist/esm/sample-data/index.js +355 -0
  865. package/dist/esm/sample-data/index.js.map +7 -0
  866. package/dist/esm/text-scanning/index.js +21 -0
  867. package/dist/esm/text-scanning/index.js.map +7 -0
  868. package/dist/esm/text-scanning/text-candidate-category.js +15 -0
  869. package/dist/esm/text-scanning/text-candidate-category.js.map +7 -0
  870. package/dist/esm/text-scanning/text-candidate.js +55 -0
  871. package/dist/esm/text-scanning/text-candidate.js.map +7 -0
  872. package/dist/esm/text-scanning/text-match-confidence.js +23 -0
  873. package/dist/esm/text-scanning/text-match-confidence.js.map +7 -0
  874. package/dist/esm/text-scanning/text-scan-helpers.js +78 -0
  875. package/dist/esm/text-scanning/text-scan-helpers.js.map +7 -0
  876. package/dist/esm/text-scanning/text-scan-result.js +313 -0
  877. package/dist/esm/text-scanning/text-scan-result.js.map +7 -0
  878. package/dist/esm/text-scanning/text-scanner-options.js +9 -0
  879. package/dist/esm/text-scanning/text-scanner-options.js.map +7 -0
  880. package/dist/esm/text-scanning/text-scanner.js +40 -0
  881. package/dist/esm/text-scanning/text-scanner.js.map +7 -0
  882. package/dist/esm/validation/index.js +9 -0
  883. package/dist/esm/validation/index.js.map +7 -0
  884. package/dist/esm/validation/validation-error-reason.js +33 -0
  885. package/dist/esm/validation/validation-error-reason.js.map +7 -0
  886. package/dist/esm/validation/validation-issue.js +23 -0
  887. package/dist/esm/validation/validation-issue.js.map +7 -0
  888. package/dist/esm/validation/validation-result.js +32 -0
  889. package/dist/esm/validation/validation-result.js.map +7 -0
  890. package/dist/esm/vehicle/boat-ce-design-category.js +180 -0
  891. package/dist/esm/vehicle/boat-ce-design-category.js.map +7 -0
  892. package/dist/esm/vehicle/boat-hull-material.js +202 -0
  893. package/dist/esm/vehicle/boat-hull-material.js.map +7 -0
  894. package/dist/esm/vehicle/body-type.js +305 -0
  895. package/dist/esm/vehicle/body-type.js.map +7 -0
  896. package/dist/esm/vehicle/bolt-pattern.js +130 -0
  897. package/dist/esm/vehicle/bolt-pattern.js.map +7 -0
  898. package/dist/esm/vehicle/drivetrain-type.js +180 -0
  899. package/dist/esm/vehicle/drivetrain-type.js.map +7 -0
  900. package/dist/esm/vehicle/emission-rate.js +174 -0
  901. package/dist/esm/vehicle/emission-rate.js.map +7 -0
  902. package/dist/esm/vehicle/energy-consumption.js +230 -0
  903. package/dist/esm/vehicle/energy-consumption.js.map +7 -0
  904. package/dist/esm/vehicle/engine-displacement.js +149 -0
  905. package/dist/esm/vehicle/engine-displacement.js.map +7 -0
  906. package/dist/esm/vehicle/engine-power.js +191 -0
  907. package/dist/esm/vehicle/engine-power.js.map +7 -0
  908. package/dist/esm/vehicle/eu-type-approval-number.js +176 -0
  909. package/dist/esm/vehicle/eu-type-approval-number.js.map +7 -0
  910. package/dist/esm/vehicle/eu-vehicle-category.js +147 -0
  911. package/dist/esm/vehicle/eu-vehicle-category.js.map +7 -0
  912. package/dist/esm/vehicle/euro-emission-class.js +293 -0
  913. package/dist/esm/vehicle/euro-emission-class.js.map +7 -0
  914. package/dist/esm/vehicle/fuel-consumption-norm.js +186 -0
  915. package/dist/esm/vehicle/fuel-consumption-norm.js.map +7 -0
  916. package/dist/esm/vehicle/fuel-consumption.js +261 -0
  917. package/dist/esm/vehicle/fuel-consumption.js.map +7 -0
  918. package/dist/esm/vehicle/fuel-type.js +268 -0
  919. package/dist/esm/vehicle/fuel-type.js.map +7 -0
  920. package/dist/esm/vehicle/index.js +134 -0
  921. package/dist/esm/vehicle/index.js.map +7 -0
  922. package/dist/esm/vehicle/odometer-reading.js +145 -0
  923. package/dist/esm/vehicle/odometer-reading.js.map +7 -0
  924. package/dist/esm/vehicle/operating-hours.js +154 -0
  925. package/dist/esm/vehicle/operating-hours.js.map +7 -0
  926. package/dist/esm/vehicle/suspension-type.js +292 -0
  927. package/dist/esm/vehicle/suspension-type.js.map +7 -0
  928. package/dist/esm/vehicle/swedish-driving-license-category.js +384 -0
  929. package/dist/esm/vehicle/swedish-driving-license-category.js.map +7 -0
  930. package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js +12 -0
  931. package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
  932. package/dist/esm/vehicle/swedish-eco-vehicle-classification.js +212 -0
  933. package/dist/esm/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
  934. package/dist/esm/vehicle/swedish-vehicle-registration-number.js +176 -0
  935. package/dist/esm/vehicle/swedish-vehicle-registration-number.js.map +7 -0
  936. package/dist/esm/vehicle/swedish-vehicle-status.js +152 -0
  937. package/dist/esm/vehicle/swedish-vehicle-status.js.map +7 -0
  938. package/dist/esm/vehicle/swedish-vehicle-type.js +262 -0
  939. package/dist/esm/vehicle/swedish-vehicle-type.js.map +7 -0
  940. package/dist/esm/vehicle/tire-dimension.js +186 -0
  941. package/dist/esm/vehicle/tire-dimension.js.map +7 -0
  942. package/dist/esm/vehicle/tire-type.js +208 -0
  943. package/dist/esm/vehicle/tire-type.js.map +7 -0
  944. package/dist/esm/vehicle/track-type.js +168 -0
  945. package/dist/esm/vehicle/track-type.js.map +7 -0
  946. package/dist/esm/vehicle/transmission-type.js +238 -0
  947. package/dist/esm/vehicle/transmission-type.js.map +7 -0
  948. package/dist/esm/vehicle/vehicle-extensions.js +15 -0
  949. package/dist/esm/vehicle/vehicle-extensions.js.map +7 -0
  950. package/dist/esm/vehicle/vehicle-identification-number.js +248 -0
  951. package/dist/esm/vehicle/vehicle-identification-number.js.map +7 -0
  952. package/dist/esm/vehicle/vehicle-masking.js +48 -0
  953. package/dist/esm/vehicle/vehicle-masking.js.map +7 -0
  954. package/dist/esm/vehicle/wheel-rim-dimension.js +163 -0
  955. package/dist/esm/vehicle/wheel-rim-dimension.js.map +7 -0
  956. package/dist/esm/web/email-address.js +522 -0
  957. package/dist/esm/web/email-address.js.map +7 -0
  958. package/dist/esm/web/index.js +16 -0
  959. package/dist/esm/web/index.js.map +7 -0
  960. package/dist/esm/web/url.js +333 -0
  961. package/dist/esm/web/url.js.map +7 -0
  962. package/dist/types/frequency-CweGfJFS.d.cts +329 -0
  963. package/dist/types/frequency-DdOMV6Sw.d.ts +329 -0
  964. package/dist/{index.d.cts → types/index.d.cts} +9 -0
  965. package/dist/{index.d.ts → types/index.d.ts} +9 -0
  966. package/dist/types/length-CceXIJYY.d.ts +354 -0
  967. package/dist/types/length-XRL5Eg7F.d.cts +354 -0
  968. package/dist/types/measurement/index.d.cts +136 -0
  969. package/dist/types/measurement/index.d.ts +136 -0
  970. package/dist/types/product/index.d.cts +1239 -0
  971. package/dist/types/product/index.d.ts +1239 -0
  972. package/dist/types/screen-size-BD4t3wzb.d.cts +473 -0
  973. package/dist/types/screen-size-DUmjNjxG.d.ts +473 -0
  974. package/dist/{text-scanning → types/text-scanning}/index.d.cts +50 -0
  975. package/dist/{text-scanning → types/text-scanning}/index.d.ts +50 -0
  976. package/dist/types/vehicle/index.d.cts +798 -0
  977. package/dist/types/vehicle/index.d.ts +798 -0
  978. package/dist/types/volume-CFA4e3dc.d.cts +175 -0
  979. package/dist/types/volume-DGLPQypt.d.ts +175 -0
  980. package/dist/types/weight-B30-Hzxu.d.ts +1057 -0
  981. package/dist/types/weight-C5C7OuV_.d.cts +1057 -0
  982. package/dist/types/wheel-rim-dimension-CVCmLASl.d.ts +699 -0
  983. package/dist/types/wheel-rim-dimension-CdkDrzad.d.cts +699 -0
  984. package/package.json +100 -65
  985. package/dist/banking/index.cjs +0 -6491
  986. package/dist/banking/index.cjs.map +0 -1
  987. package/dist/banking/index.js +0 -6464
  988. package/dist/banking/index.js.map +0 -1
  989. package/dist/contact/index.cjs +0 -6678
  990. package/dist/contact/index.cjs.map +0 -1
  991. package/dist/contact/index.js +0 -6586
  992. package/dist/contact/index.js.map +0 -1
  993. package/dist/finance/index.cjs +0 -3592
  994. package/dist/finance/index.cjs.map +0 -1
  995. package/dist/finance/index.js +0 -3584
  996. package/dist/finance/index.js.map +0 -1
  997. package/dist/geography/index.cjs +0 -4227
  998. package/dist/geography/index.cjs.map +0 -1
  999. package/dist/geography/index.js +0 -4202
  1000. package/dist/geography/index.js.map +0 -1
  1001. package/dist/index.cjs +0 -14087
  1002. package/dist/index.cjs.map +0 -1
  1003. package/dist/index.js +0 -13868
  1004. package/dist/index.js.map +0 -1
  1005. package/dist/organization/index.cjs +0 -2376
  1006. package/dist/organization/index.cjs.map +0 -1
  1007. package/dist/organization/index.js +0 -2346
  1008. package/dist/organization/index.js.map +0 -1
  1009. package/dist/person/index.cjs +0 -1144
  1010. package/dist/person/index.cjs.map +0 -1
  1011. package/dist/person/index.js +0 -1125
  1012. package/dist/person/index.js.map +0 -1
  1013. package/dist/property/index.cjs +0 -487
  1014. package/dist/property/index.cjs.map +0 -1
  1015. package/dist/property/index.js +0 -480
  1016. package/dist/property/index.js.map +0 -1
  1017. package/dist/sample-data/index.cjs +0 -12310
  1018. package/dist/sample-data/index.cjs.map +0 -1
  1019. package/dist/sample-data/index.js +0 -12302
  1020. package/dist/sample-data/index.js.map +0 -1
  1021. package/dist/text-scanning/index.cjs +0 -10414
  1022. package/dist/text-scanning/index.cjs.map +0 -1
  1023. package/dist/text-scanning/index.js +0 -10406
  1024. package/dist/text-scanning/index.js.map +0 -1
  1025. package/dist/validation/index.cjs +0 -83
  1026. package/dist/validation/index.cjs.map +0 -1
  1027. package/dist/validation/index.js +0 -79
  1028. package/dist/validation/index.js.map +0 -1
  1029. package/dist/web/index.cjs +0 -3994
  1030. package/dist/web/index.cjs.map +0 -1
  1031. package/dist/web/index.js +0 -3987
  1032. package/dist/web/index.js.map +0 -1
  1033. /package/dist/{banking → types/banking}/index.d.cts +0 -0
  1034. /package/dist/{banking → types/banking}/index.d.ts +0 -0
  1035. /package/dist/{contact → types/contact}/index.d.cts +0 -0
  1036. /package/dist/{contact → types/contact}/index.d.ts +0 -0
  1037. /package/dist/{country-BhD51LDL.d.cts → types/country-BhD51LDL.d.cts} +0 -0
  1038. /package/dist/{country-p0n0EVQ9.d.ts → types/country-p0n0EVQ9.d.ts} +0 -0
  1039. /package/dist/{finance → types/finance}/index.d.cts +0 -0
  1040. /package/dist/{finance → types/finance}/index.d.ts +0 -0
  1041. /package/dist/{geography → types/geography}/index.d.cts +0 -0
  1042. /package/dist/{geography → types/geography}/index.d.ts +0 -0
  1043. /package/dist/{isin-EeVPpNWu.d.ts → types/isin-EeVPpNWu.d.ts} +0 -0
  1044. /package/dist/{isin-ZlQLBVm8.d.cts → types/isin-ZlQLBVm8.d.cts} +0 -0
  1045. /package/dist/{organization → types/organization}/index.d.cts +0 -0
  1046. /package/dist/{organization → types/organization}/index.d.ts +0 -0
  1047. /package/dist/{person → types/person}/index.d.cts +0 -0
  1048. /package/dist/{person → types/person}/index.d.ts +0 -0
  1049. /package/dist/{person-full-name-Cmc9Ynuc.d.cts → types/person-full-name-Cmc9Ynuc.d.cts} +0 -0
  1050. /package/dist/{person-full-name-D6Hbsab6.d.ts → types/person-full-name-D6Hbsab6.d.ts} +0 -0
  1051. /package/dist/{phone-number-C24--ggy.d.ts → types/phone-number-C24--ggy.d.ts} +0 -0
  1052. /package/dist/{phone-number-DZ-YxCQQ.d.cts → types/phone-number-DZ-YxCQQ.d.cts} +0 -0
  1053. /package/dist/{property → types/property}/index.d.cts +0 -0
  1054. /package/dist/{property → types/property}/index.d.ts +0 -0
  1055. /package/dist/{sample-data → types/sample-data}/index.d.cts +0 -0
  1056. /package/dist/{sample-data → types/sample-data}/index.d.ts +0 -0
  1057. /package/dist/{swedish-address-DNC3ftRF.d.cts → types/swedish-address-DNC3ftRF.d.cts} +0 -0
  1058. /package/dist/{swedish-address-GMzjqgxb.d.ts → types/swedish-address-GMzjqgxb.d.ts} +0 -0
  1059. /package/dist/{swedish-bank-account-holder-name-BFJ8h1aO.d.cts → types/swedish-bank-account-holder-name-BFJ8h1aO.d.cts} +0 -0
  1060. /package/dist/{swedish-bank-account-holder-name-CAAru07F.d.ts → types/swedish-bank-account-holder-name-CAAru07F.d.ts} +0 -0
  1061. /package/dist/{swedish-municipality-DlUS7g7h.d.cts → types/swedish-municipality-DlUS7g7h.d.cts} +0 -0
  1062. /package/dist/{swedish-municipality-nDRHYRAd.d.ts → types/swedish-municipality-nDRHYRAd.d.ts} +0 -0
  1063. /package/dist/{swedish-organization-name-D7NvERxA.d.cts → types/swedish-organization-name-D7NvERxA.d.cts} +0 -0
  1064. /package/dist/{swedish-organization-name-rR0Q836C.d.ts → types/swedish-organization-name-rR0Q836C.d.ts} +0 -0
  1065. /package/dist/{swedish-organization-number-Bcj7V_lh.d.cts → types/swedish-organization-number-Bcj7V_lh.d.cts} +0 -0
  1066. /package/dist/{swedish-organization-number-DM8dpXwR.d.ts → types/swedish-organization-number-DM8dpXwR.d.ts} +0 -0
  1067. /package/dist/{swedish-organization-type-CZOdETwG.d.cts → types/swedish-organization-type-CZOdETwG.d.cts} +0 -0
  1068. /package/dist/{swedish-organization-type-CZOdETwG.d.ts → types/swedish-organization-type-CZOdETwG.d.ts} +0 -0
  1069. /package/dist/{swedish-personal-identity-number-BiIg4io3.d.ts → types/swedish-personal-identity-number-BiIg4io3.d.ts} +0 -0
  1070. /package/dist/{swedish-personal-identity-number-Cp9Coz55.d.cts → types/swedish-personal-identity-number-Cp9Coz55.d.cts} +0 -0
  1071. /package/dist/{swedish-property-designation-BM-gdd9x.d.ts → types/swedish-property-designation-BM-gdd9x.d.ts} +0 -0
  1072. /package/dist/{swedish-property-designation-BaHXufqV.d.cts → types/swedish-property-designation-BaHXufqV.d.cts} +0 -0
  1073. /package/dist/{swedish-sni-code-Ccsswpni.d.ts → types/swedish-sni-code-Ccsswpni.d.ts} +0 -0
  1074. /package/dist/{swedish-sni-code-CuJFyM6l.d.cts → types/swedish-sni-code-CuJFyM6l.d.cts} +0 -0
  1075. /package/dist/{swedish-swish-number-CL6Gx_h3.d.cts → types/swedish-swish-number-CL6Gx_h3.d.cts} +0 -0
  1076. /package/dist/{swedish-swish-number-DDG3mNDg.d.ts → types/swedish-swish-number-DDG3mNDg.d.ts} +0 -0
  1077. /package/dist/{text-candidate-qg2bD9PY.d.cts → types/text-candidate-qg2bD9PY.d.cts} +0 -0
  1078. /package/dist/{text-candidate-qg2bD9PY.d.ts → types/text-candidate-qg2bD9PY.d.ts} +0 -0
  1079. /package/dist/{validation → types/validation}/index.d.cts +0 -0
  1080. /package/dist/{validation → types/validation}/index.d.ts +0 -0
  1081. /package/dist/{web → types/web}/index.d.cts +0 -0
  1082. /package/dist/{web → types/web}/index.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/primitives-defaults.ts","../../src/internal/input-sanitization.ts","../../src/geography/continent.ts","../../src/geography/country-capital.ts","../../src/geography/geo-coordinate.ts","../../src/geography/language.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/finance/currency.ts","../../src/geography/country-data.ts","../../src/geography/country-coordinates.ts","../../src/geography/country-capitals.ts","../../src/geography/country-metadata.ts","../../src/geography/country.ts","../../src/geography/swedish-county.ts","../../src/geography/swedish-municipality-data.ts","../../src/geography/swedish-municipality.ts","../../src/contact/address-city.ts","../../src/contact/address-street.ts","../../src/contact/address-zip-code.ts","../../src/contact/country-address-registry.ts","../../src/contact/address.ts","../../src/contact/phone-calling-code.ts","../../src/contact/phone-number.ts","../../src/contact/swedish-address-zip-code.ts","../../src/contact/swedish-address.ts","../../src/organization/duns-number.ts","../../src/internal/luhn.ts","../../src/validation/validation-error-reason.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/organization/organization-validation-utils.ts","../../src/internal/clock.ts","../../src/person/personnummer-parser.ts","../../src/person/swedish-personal-identity-number.ts","../../src/person/swedish-coordination-number.ts","../../src/organization/swedish-organization-name.ts","../../src/organization/swedish-organization-number.ts","../../src/organization/eu-vat-number.ts","../../src/organization/lei-code.ts","../../src/text-scanning/text-scan-result.ts","../../src/text-scanning/text-scanner-options.ts","../../src/text-scanning/text-scanner.ts","../../src/web/email-address.ts","../../src/web/url.ts","../../src/finance/isin.ts","../../src/property/swedish-property-designation.ts","../../src/banking/iban.ts","../../src/banking/bic.ts","../../src/banking/swedish-bankgiro-number.ts","../../src/banking/swedish-postgiro-number.ts","../../src/banking/swedish-ocr-reference-number.ts","../../src/banking/swedish-bank.ts","../../src/banking/bank-resolver.ts","../../src/banking/swedish-bank-clearing-number.ts","../../src/banking/swedish-bank-account.ts","../../src/banking/swedish-swish-number.ts","../../src/register-default-text-scanners.ts","../../src/text-scanning/index.ts"],"names":["MAX_INPUT_LENGTH","BY_KEY","BY_NAME","BY_CODE","SCAN_PATTERN","addGenitive","ALL","SCAN","capitalizeWord","nameType","tldCountryMapCache","getTldCountryMap","prefix","parseInt4"],"mappings":"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CV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CA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,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO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AA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EA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","file":"index.js","sourcesContent":["/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nexport interface ContinentFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A continent (`kontinent`) identified by its two-letter code, English name,\n * or Swedish name. Seven continents are recognized: Africa, Antarctica, Asia,\n * Europe, North America, Oceania, and South America.\n *\n * Sources:\n * - UN M49 Standard\n * - Datahub continent codes\n */\nexport class Continent {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Continent\",\n localizedName: \"Kontinent\",\n emoji: \"\\u{1F5FA}\\uFE0F\",\n sources: Object.freeze([\n \"https://unstats.un.org/unsd/methodology/m49/\",\n \"https://datahub.io/core/continent-codes\",\n ]),\n });\n\n static readonly Africa: Continent = new Continent(\"AF\", \"Africa\", \"Afrika\");\n static readonly Antarctica: Continent = new Continent(\"AN\", \"Antarctica\", \"Antarktis\");\n static readonly Asia: Continent = new Continent(\"AS\", \"Asia\", \"Asien\");\n static readonly Europe: Continent = new Continent(\"EU\", \"Europe\", \"Europa\");\n static readonly NorthAmerica: Continent = new Continent(\"NA\", \"North America\", \"Nordamerika\");\n static readonly Oceania: Continent = new Continent(\"OC\", \"Oceania\", \"Oceanien\");\n static readonly SouthAmerica: Continent = new Continent(\"SA\", \"South America\", \"Sydamerika\");\n\n /** All seven continents. */\n static readonly all: readonly Continent[] = Object.freeze([\n Continent.Africa,\n Continent.Antarctica,\n Continent.Asia,\n Continent.Europe,\n Continent.NorthAmerica,\n Continent.Oceania,\n Continent.SouthAmerica,\n ]);\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n\n private constructor(code: string, englishName: string, localizedName: string) {\n this.code = code;\n this.englishName = englishName;\n this.localizedName = localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.code;\n }\n\n static tryParse(input: string | null | undefined): Continent | null {\n if (input == null) return null;\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Continent {\n const r = Continent.tryParse(input);\n if (r === null) throw new Error(\"Unknown continent.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Continent.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: ContinentFormatOptions): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: ContinentFormatOptions,\n ): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Continent.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Continent | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Continent | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nconst BY_KEY = (() => {\n const m = new Map<string, Continent>();\n for (const c of Continent.all) {\n m.set(c.code.toLowerCase(), c);\n m.set(c.englishName.toLowerCase(), c);\n m.set(c.localizedName.toLowerCase(), c);\n }\n return m;\n})();\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\n/**\n * The capital city of a country (`huvudstad`), with names in English, Swedish,\n * and the country's native language, plus its geographic coordinates.\n */\nexport class CountryCapital {\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly coordinate: GeoCoordinate;\n\n /** @internal */\n constructor(\n englishName: string,\n localizedName: string,\n nativeName: string,\n coordinate: GeoCoordinate,\n ) {\n this.englishName = englishName;\n this.localizedName = localizedName;\n this.nativeName = nativeName;\n this.coordinate = coordinate;\n }\n\n /** Capital city name in the current display language. */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n toString(): string {\n return this.displayName;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\nexport interface GeoCoordinateFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A geographic coordinate pair (latitude, longitude) in the WGS 84 reference\n * system (`geografisk koordinat`). Parsing accepts decimal degrees, degrees\n * with cardinal directions, DMS, and DDM formats. Swedish cardinal letters Ö\n * (east) and V (west) are accepted alongside E and W.\n */\nexport class GeoCoordinate {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Geographic Coordinate\",\n localizedName: \"Geografisk koordinat\",\n emoji: \"\\u{1F4CD}\",\n sources: Object.freeze([\n \"https://en.wikipedia.org/wiki/Geographic_coordinate_system\",\n \"https://epsg.io/4326\",\n ]),\n });\n\n readonly latitude: number;\n readonly longitude: number;\n\n private constructor(latitude: number, longitude: number) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n\n /** @internal */\n static _unsafe(latitude: number, longitude: number): GeoCoordinate {\n return new GeoCoordinate(latitude, longitude);\n }\n\n get latitudeDirection(): \"N\" | \"S\" {\n return this.latitude >= 0 ? \"N\" : \"S\";\n }\n\n get longitudeDirection(): \"E\" | \"W\" {\n return this.longitude >= 0 ? \"E\" : \"W\";\n }\n\n /** Creates a coordinate from explicit latitude and longitude values. */\n static create(latitude: number, longitude: number): GeoCoordinate {\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new RangeError(\"Latitude must be between -90 and 90.\");\n }\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new RangeError(\"Longitude must be between -180 and 180.\");\n }\n return GeoCoordinate._unsafe(latitude, longitude);\n }\n\n static tryParse(input: string | null | undefined): GeoCoordinate | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > 200) return null;\n\n let m: RegExpMatchArray | null;\n\n m = sanitized.match(DECIMAL_DEGREES);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(SPACE_SEPARATED);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(DECIMAL_CARDINAL_SUFFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(CARDINAL_PREFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(DMS);\n if (m) return tryDms(m.groups!);\n\n m = sanitized.match(DDM);\n if (m) return tryDdm(m.groups!);\n\n return null;\n }\n\n static parse(input: string): GeoCoordinate {\n const r = GeoCoordinate.tryParse(input);\n if (r === null) throw new Error(\"Invalid geographic coordinate.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return GeoCoordinate.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && GeoCoordinate.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return `${formatNumber(this.latitude)}, ${formatNumber(this.longitude)}`;\n }\n\n toString(): string {\n return `${formatNumber(Math.abs(this.latitude))}°${this.latitudeDirection}, ${formatNumber(Math.abs(this.longitude))}°${this.longitudeDirection}`;\n }\n\n /** Returns the coordinate in degrees, minutes, and seconds, e.g. `59°19'45.5\"N, 18°4'7\"E`. */\n toDmsString(): string {\n const [latDeg, latMin, latSec] = toDmsParts(Math.abs(this.latitude));\n const [lonDeg, lonMin, lonSec] = toDmsParts(Math.abs(this.longitude));\n return `${latDeg}°${latMin}'${formatSeconds(latSec)}\"${this.latitudeDirection}, ${lonDeg}°${lonMin}'${formatSeconds(lonSec)}\"${this.longitudeDirection}`;\n }\n\n /** Distance in kilometers (Haversine) between two coordinates. */\n static distanceKilometers(a: GeoCoordinate, b: GeoCoordinate): number {\n return haversineKm(a, b);\n }\n\n /** Returns true if coordinates `a` and `b` are within `radiusKm` kilometers of each other. */\n static isWithinKilometers(a: GeoCoordinate, b: GeoCoordinate, radiusKm: number): boolean {\n return GeoCoordinate.distanceKilometers(a, b) <= radiusKm;\n }\n\n /** Distance in kilometers from this coordinate to `other`. */\n distanceKilometersTo(other: GeoCoordinate): number {\n return haversineKm(this, other);\n }\n\n /**\n * Returns true if `other` is within `radiusKm` kilometers of this\n * coordinate (inclusive).\n */\n isWithinKilometers(other: GeoCoordinate, radiusKm: number): boolean {\n return this.distanceKilometersTo(other) <= radiusKm;\n }\n\n equals(other: GeoCoordinate | null | undefined): boolean {\n return other != null && this.latitude === other.latitude && this.longitude === other.longitude;\n }\n}\n\n// --- Regexes ---\n\nconst DECIMAL_DEGREES =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s*[,;]\\s*(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst SPACE_SEPARATED =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s+(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst DECIMAL_CARDINAL_SUFFIX =\n /^\\s*\\(?\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst CARDINAL_PREFIX =\n /^\\s*\\(?\\s*(?<latDir>[NSns])\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*[,;\\s]\\s*(?<lonDir>[EWewÖöVv])\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*\\)?\\s*$/u;\n\nconst DMS =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latMin>\\d+)\\s*[′']\\s*(?<latSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonMin>\\d+)\\s*[′']\\s*(?<lonSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst DDM =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\n// --- Helpers ---\n\nfunction tryDecimal(latStr: string, lonStr: string): GeoCoordinate | null {\n const lat = parseFloat(latStr);\n const lon = parseFloat(lonStr);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDecimalCardinal(\n latStr: string,\n latDir: string,\n lonStr: string,\n lonDir: string,\n): GeoCoordinate | null {\n const lat = applyLatDirection(parseFloat(latStr), latDir);\n const lon = applyLonDirection(parseFloat(lonStr), lonDir);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDms(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latMin = parseFloat(g.latMin!);\n const latSec = parseFloat(g.latSec!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonMin = parseFloat(g.lonMin!);\n const lonSec = parseFloat(g.lonSec!);\n if (latMin >= 60 || latSec >= 60 || lonMin >= 60 || lonSec >= 60) return null;\n let lat = round8(latDeg + latMin / 60 + latSec / 3600);\n let lon = round8(lonDeg + lonMin / 60 + lonSec / 3600);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDdm(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latDecMin = parseFloat(g.latDecMin!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonDecMin = parseFloat(g.lonDecMin!);\n if (latDecMin >= 60 || lonDecMin >= 60) return null;\n let lat = round8(latDeg + latDecMin / 60);\n let lon = round8(lonDeg + lonDecMin / 60);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction applyLatDirection(lat: number, dir: string): number {\n return dir.toUpperCase() === \"S\" ? -lat : lat;\n}\n\nfunction applyLonDirection(lon: number, dir: string): number {\n const u = dir.toUpperCase();\n return u === \"W\" || u === \"V\" ? -lon : lon;\n}\n\nfunction isInRange(lat: number, lon: number): boolean {\n return lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180;\n}\n\nfunction round8(v: number): number {\n return Math.round(v * 1e8) / 1e8;\n}\n\nfunction toDmsParts(dd: number): [number, number, number] {\n const degrees = Math.trunc(dd);\n const fracMinutes = (dd - degrees) * 60;\n const minutes = Math.trunc(fracMinutes);\n const seconds = Math.round((fracMinutes - minutes) * 600) / 10;\n return [degrees, minutes, seconds];\n}\n\nfunction formatNumber(value: number): string {\n // Match C# \"G\" format on a double: minimal representation, no trailing zeros.\n // For our use cases this matches `value.toString()` in JS.\n return value.toString();\n}\n\nfunction formatSeconds(seconds: number): string {\n // Match C# \"0.#\" format: drop trailing zero after the decimal point.\n if (Number.isInteger(seconds)) return seconds.toString();\n return seconds.toString().replace(/(\\.\\d*?)0+$/, \"$1\");\n}\n\nfunction haversineKm(a: GeoCoordinate, b: GeoCoordinate): number {\n const R = 6371;\n const dLat = toRadians(b.latitude - a.latitude);\n const dLon = toRadians(b.longitude - a.longitude);\n const lat1 = toRadians(a.latitude);\n const lat2 = toRadians(b.latitude);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));\n}\n\nfunction toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\n/** Text direction for a writing system. */\nexport const TextDirection = {\n LeftToRight: \"LeftToRight\",\n RightToLeft: \"RightToLeft\",\n} as const;\nexport type TextDirection = (typeof TextDirection)[keyof typeof TextDirection];\n\n/** Primary writing script / writing system used by a language. */\nexport const WritingScript = {\n Unknown: \"Unknown\",\n Latin: \"Latin\",\n Cyrillic: \"Cyrillic\",\n Arabic: \"Arabic\",\n Greek: \"Greek\",\n Hebrew: \"Hebrew\",\n Devanagari: \"Devanagari\",\n Bengali: \"Bengali\",\n Gurmukhi: \"Gurmukhi\",\n Gujarati: \"Gujarati\",\n Oriya: \"Oriya\",\n Tamil: \"Tamil\",\n Telugu: \"Telugu\",\n Kannada: \"Kannada\",\n Malayalam: \"Malayalam\",\n Sinhala: \"Sinhala\",\n Thai: \"Thai\",\n Lao: \"Lao\",\n Tibetan: \"Tibetan\",\n Myanmar: \"Myanmar\",\n Georgian: \"Georgian\",\n Hangul: \"Hangul\",\n Ethiopic: \"Ethiopic\",\n Cherokee: \"Cherokee\",\n Canadian: \"Canadian\",\n Khmer: \"Khmer\",\n Mongolian: \"Mongolian\",\n Han: \"Han\",\n Armenian: \"Armenian\",\n Thaana: \"Thaana\",\n} as const;\nexport type WritingScript = (typeof WritingScript)[keyof typeof WritingScript];\n\nconst MAX_INPUT_LENGTH = 100;\n\nexport interface LanguageFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A language (`språk`) identified by its ISO 639-1 two-letter code, ISO 639-2/T\n * three-letter code, English name, Swedish name, or native name (endonym).\n */\nexport class Language {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Language\",\n localizedName: \"Språk\",\n emoji: \"\\u{1F5E3}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.loc.gov/standards/iso639-2/php/code_list.php\",\n \"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\",\n \"https://iso639-3.sil.org/\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly script: WritingScript;\n readonly direction: TextDirection;\n\n private constructor(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection,\n ) {\n this.alpha2Code = alpha2;\n this.alpha3Code = alpha3;\n this.englishName = en;\n this.localizedName = sv;\n this.nativeName = native;\n this.script = script;\n this.direction = direction;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.alpha2Code;\n }\n\n /** @internal Used by Country and other types. */\n static _create(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection = TextDirection.LeftToRight,\n ): Language {\n return new Language(alpha2, alpha3, en, sv, native, script, direction);\n }\n\n static tryParse(input: string | null | undefined): Language | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Language {\n const r = Language.tryParse(input);\n if (r === null) throw new Error(\"Unknown language.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Language.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: LanguageFormatOptions): string | null {\n const r = Language.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: LanguageFormatOptions,\n ): string | null {\n const r = Language.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Language.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Language | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n\n compareTo(other: Language | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n /** All recognized ISO 639-1 languages. */\n static get all(): readonly Language[] {\n return ALL;\n }\n\n // Frequently used language constants — populated below ALL.\n static readonly Afrikaans: Language;\n static readonly Albanian: Language;\n static readonly Arabic: Language;\n static readonly Bulgarian: Language;\n static readonly Catalan: Language;\n static readonly Chinese: Language;\n static readonly Croatian: Language;\n static readonly Czech: Language;\n static readonly Danish: Language;\n static readonly Dutch: Language;\n static readonly English: Language;\n static readonly Estonian: Language;\n static readonly Faroese: Language;\n static readonly Finnish: Language;\n static readonly French: Language;\n static readonly German: Language;\n static readonly Greek: Language;\n static readonly Hindi: Language;\n static readonly Hungarian: Language;\n static readonly Icelandic: Language;\n static readonly Italian: Language;\n static readonly Japanese: Language;\n static readonly Korean: Language;\n static readonly Latvian: Language;\n static readonly Lithuanian: Language;\n static readonly NorthernSami: Language;\n static readonly Norwegian: Language;\n static readonly NorwegianBokmal: Language;\n static readonly NorwegianNynorsk: Language;\n static readonly Polish: Language;\n static readonly Portuguese: Language;\n static readonly Romanian: Language;\n static readonly Russian: Language;\n static readonly Slovak: Language;\n static readonly Slovenian: Language;\n static readonly Spanish: Language;\n static readonly Swahili: Language;\n static readonly Swedish: Language;\n static readonly Turkish: Language;\n static readonly Ukrainian: Language;\n}\n\nconst L = Language._create;\n\nconst ALL: readonly Language[] = Object.freeze([\n L(\"aa\", \"aar\", \"Afar\", \"Afar\", \"Afaraf\", WritingScript.Latin),\n L(\"ab\", \"abk\", \"Abkhazian\", \"Abchaziska\", \"Аҧсуа\", WritingScript.Cyrillic),\n L(\"af\", \"afr\", \"Afrikaans\", \"Afrikaans\", \"Afrikaans\", WritingScript.Latin),\n L(\"ak\", \"aka\", \"Akan\", \"Akan\", \"Akan\", WritingScript.Latin),\n L(\"am\", \"amh\", \"Amharic\", \"Amhariska\", \"አማርኛ\", WritingScript.Ethiopic),\n L(\"an\", \"arg\", \"Aragonese\", \"Aragonesiska\", \"Aragonés\", WritingScript.Latin),\n L(\"ar\", \"ara\", \"Arabic\", \"Arabiska\", \"العربية\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"as\", \"asm\", \"Assamese\", \"Assamesiska\", \"অসমীয়া\", WritingScript.Bengali),\n L(\"av\", \"ava\", \"Avaric\", \"Avariska\", \"Авар\", WritingScript.Cyrillic),\n L(\"ay\", \"aym\", \"Aymara\", \"Aymara\", \"Aymar\", WritingScript.Latin),\n L(\"az\", \"aze\", \"Azerbaijani\", \"Azerbajdzjanska\", \"Azərbaycan\", WritingScript.Latin),\n L(\"ba\", \"bak\", \"Bashkir\", \"Basjkiriska\", \"Башҡорт\", WritingScript.Cyrillic),\n L(\"be\", \"bel\", \"Belarusian\", \"Vitryska\", \"Беларуская\", WritingScript.Cyrillic),\n L(\"bg\", \"bul\", \"Bulgarian\", \"Bulgariska\", \"Български\", WritingScript.Cyrillic),\n L(\"bh\", \"bih\", \"Bihari\", \"Bihari\", \"भोजपुरी\", WritingScript.Devanagari),\n L(\"bi\", \"bis\", \"Bislama\", \"Bislama\", \"Bislama\", WritingScript.Latin),\n L(\"bm\", \"bam\", \"Bambara\", \"Bambara\", \"Bamanankan\", WritingScript.Latin),\n L(\"bn\", \"ben\", \"Bengali\", \"Bengali\", \"বাংলা\", WritingScript.Bengali),\n L(\"bo\", \"bod\", \"Tibetan\", \"Tibetanska\", \"བོད་ཡིག\", WritingScript.Tibetan),\n L(\"br\", \"bre\", \"Breton\", \"Bretonska\", \"Brezhoneg\", WritingScript.Latin),\n L(\"bs\", \"bos\", \"Bosnian\", \"Bosniska\", \"Bosanski\", WritingScript.Latin),\n L(\"ca\", \"cat\", \"Catalan\", \"Katalanska\", \"Català\", WritingScript.Latin),\n L(\"ce\", \"che\", \"Chechen\", \"Tjetjenska\", \"Нохчийн\", WritingScript.Cyrillic),\n L(\"ch\", \"cha\", \"Chamorro\", \"Chamorro\", \"Chamoru\", WritingScript.Latin),\n L(\"co\", \"cos\", \"Corsican\", \"Korsikanska\", \"Corsu\", WritingScript.Latin),\n L(\"cr\", \"cre\", \"Cree\", \"Cree\", \"ᓀᐦᐃᔭᐍᐏᐣ\", WritingScript.Canadian),\n L(\"cs\", \"ces\", \"Czech\", \"Tjeckiska\", \"Čeština\", WritingScript.Latin),\n L(\"cu\", \"chu\", \"Church Slavonic\", \"Kyrkoslaviska\", \"Словѣньскъ\", WritingScript.Cyrillic),\n L(\"cv\", \"chv\", \"Chuvash\", \"Tjuvasjiska\", \"Чӑваш\", WritingScript.Cyrillic),\n L(\"cy\", \"cym\", \"Welsh\", \"Walesiska\", \"Cymraeg\", WritingScript.Latin),\n L(\"da\", \"dan\", \"Danish\", \"Danska\", \"Dansk\", WritingScript.Latin),\n L(\"de\", \"deu\", \"German\", \"Tyska\", \"Deutsch\", WritingScript.Latin),\n L(\"dv\", \"div\", \"Divehi\", \"Divehi\", \"ދިވެހި\", WritingScript.Thaana, TextDirection.RightToLeft),\n L(\"dz\", \"dzo\", \"Dzongkha\", \"Dzongkha\", \"རྫོང་ཁ\", WritingScript.Tibetan),\n L(\"ee\", \"ewe\", \"Ewe\", \"Ewe\", \"Eʋegbe\", WritingScript.Latin),\n L(\"el\", \"ell\", \"Greek\", \"Grekiska\", \"Ελληνικά\", WritingScript.Greek),\n L(\"en\", \"eng\", \"English\", \"Engelska\", \"English\", WritingScript.Latin),\n L(\"eo\", \"epo\", \"Esperanto\", \"Esperanto\", \"Esperanto\", WritingScript.Latin),\n L(\"es\", \"spa\", \"Spanish\", \"Spanska\", \"Español\", WritingScript.Latin),\n L(\"et\", \"est\", \"Estonian\", \"Estniska\", \"Eesti\", WritingScript.Latin),\n L(\"eu\", \"eus\", \"Basque\", \"Baskiska\", \"Euskara\", WritingScript.Latin),\n L(\"fa\", \"fas\", \"Persian\", \"Persiska\", \"فارسی\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"ff\", \"ful\", \"Fulah\", \"Fulani\", \"Fulfulde\", WritingScript.Latin),\n L(\"fi\", \"fin\", \"Finnish\", \"Finska\", \"Suomi\", WritingScript.Latin),\n L(\"fj\", \"fij\", \"Fijian\", \"Fijianska\", \"Vosa Vakaviti\", WritingScript.Latin),\n L(\"fo\", \"fao\", \"Faroese\", \"Färöiska\", \"Føroyskt\", WritingScript.Latin),\n L(\"fr\", \"fra\", \"French\", \"Franska\", \"Français\", WritingScript.Latin),\n L(\"fy\", \"fry\", \"Western Frisian\", \"Frisiska\", \"Frysk\", WritingScript.Latin),\n L(\"ga\", \"gle\", \"Irish\", \"Iriska\", \"Gaeilge\", WritingScript.Latin),\n L(\"gd\", \"gla\", \"Scottish Gaelic\", \"Skotsk gaeliska\", \"Gàidhlig\", WritingScript.Latin),\n L(\"gl\", \"glg\", \"Galician\", \"Galiciska\", \"Galego\", WritingScript.Latin),\n L(\"gn\", \"grn\", \"Guarani\", \"Guaraní\", \"Avañe'ẽ\", WritingScript.Latin),\n L(\"gu\", \"guj\", \"Gujarati\", \"Gujarati\", \"ગુજરાતી\", WritingScript.Gujarati),\n L(\"gv\", \"glv\", \"Manx\", \"Manx\", \"Gaelg\", WritingScript.Latin),\n L(\"ha\", \"hau\", \"Hausa\", \"Hausa\", \"Hausa\", WritingScript.Latin),\n L(\"he\", \"heb\", \"Hebrew\", \"Hebreiska\", \"עברית\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"hi\", \"hin\", \"Hindi\", \"Hindi\", \"हिन्दी\", WritingScript.Devanagari),\n L(\"ho\", \"hmo\", \"Hiri Motu\", \"Hiri Motu\", \"Hiri Motu\", WritingScript.Latin),\n L(\"hr\", \"hrv\", \"Croatian\", \"Kroatiska\", \"Hrvatski\", WritingScript.Latin),\n L(\"ht\", \"hat\", \"Haitian Creole\", \"Haitisk kreol\", \"Kreyòl Ayisyen\", WritingScript.Latin),\n L(\"hu\", \"hun\", \"Hungarian\", \"Ungerska\", \"Magyar\", WritingScript.Latin),\n L(\"hy\", \"hye\", \"Armenian\", \"Armeniska\", \"Հայերեն\", WritingScript.Armenian),\n L(\"ia\", \"ina\", \"Interlingua\", \"Interlingua\", \"Interlingua\", WritingScript.Latin),\n L(\"id\", \"ind\", \"Indonesian\", \"Indonesiska\", \"Bahasa Indonesia\", WritingScript.Latin),\n L(\"ie\", \"ile\", \"Interlingue\", \"Interlingue\", \"Interlingue\", WritingScript.Latin),\n L(\"ig\", \"ibo\", \"Igbo\", \"Igbo\", \"Igbo\", WritingScript.Latin),\n L(\"ii\", \"iii\", \"Sichuan Yi\", \"Yi\", \"ꆈꌠ꒡\", WritingScript.Unknown),\n L(\"ik\", \"ipk\", \"Inupiaq\", \"Inupiaq\", \"Iñupiaq\", WritingScript.Latin),\n L(\"io\", \"ido\", \"Ido\", \"Ido\", \"Ido\", WritingScript.Latin),\n L(\"is\", \"isl\", \"Icelandic\", \"Isländska\", \"Íslenska\", WritingScript.Latin),\n L(\"it\", \"ita\", \"Italian\", \"Italienska\", \"Italiano\", WritingScript.Latin),\n L(\"iu\", \"iku\", \"Inuktitut\", \"Inuktitut\", \"ᐃᓄᒃᑎᑐᑦ\", WritingScript.Canadian),\n L(\"ja\", \"jpn\", \"Japanese\", \"Japanska\", \"日本語\", WritingScript.Han),\n L(\"jv\", \"jav\", \"Javanese\", \"Javanesiska\", \"Basa Jawa\", WritingScript.Latin),\n L(\"ka\", \"kat\", \"Georgian\", \"Georgiska\", \"ქართული\", WritingScript.Georgian),\n L(\"kg\", \"kon\", \"Kongo\", \"Kikongo\", \"KiKongo\", WritingScript.Latin),\n L(\"ki\", \"kik\", \"Kikuyu\", \"Kikuyu\", \"Gĩkũyũ\", WritingScript.Latin),\n L(\"kj\", \"kua\", \"Kuanyama\", \"Kuanyama\", \"Kuanyama\", WritingScript.Latin),\n L(\"kk\", \"kaz\", \"Kazakh\", \"Kazakiska\", \"Қазақша\", WritingScript.Cyrillic),\n L(\"kl\", \"kal\", \"Kalaallisut\", \"Grönländska\", \"Kalaallisut\", WritingScript.Latin),\n L(\"km\", \"khm\", \"Khmer\", \"Khmer\", \"ភាសាខ្មែរ\", WritingScript.Khmer),\n L(\"kn\", \"kan\", \"Kannada\", \"Kannada\", \"ಕನ್ನಡ\", WritingScript.Kannada),\n L(\"ko\", \"kor\", \"Korean\", \"Koreanska\", \"한국어\", WritingScript.Hangul),\n L(\"kr\", \"kau\", \"Kanuri\", \"Kanuri\", \"Kanuri\", WritingScript.Latin),\n L(\n \"ks\",\n \"kas\",\n \"Kashmiri\",\n \"Kashmiri\",\n \"कश्मीरी\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"ku\", \"kur\", \"Kurdish\", \"Kurdiska\", \"Kurdî\", WritingScript.Latin),\n L(\"kv\", \"kom\", \"Komi\", \"Komi\", \"Коми\", WritingScript.Cyrillic),\n L(\"kw\", \"cor\", \"Cornish\", \"Korniska\", \"Kernewek\", WritingScript.Latin),\n L(\"ky\", \"kir\", \"Kyrgyz\", \"Kirgiziska\", \"Кыргызча\", WritingScript.Cyrillic),\n L(\"la\", \"lat\", \"Latin\", \"Latin\", \"Latina\", WritingScript.Latin),\n L(\"lb\", \"ltz\", \"Luxembourgish\", \"Luxemburgiska\", \"Lëtzebuergesch\", WritingScript.Latin),\n L(\"lg\", \"lug\", \"Ganda\", \"Luganda\", \"Luganda\", WritingScript.Latin),\n L(\"li\", \"lim\", \"Limburgish\", \"Limburgiska\", \"Limburgs\", WritingScript.Latin),\n L(\"ln\", \"lin\", \"Lingala\", \"Lingala\", \"Lingála\", WritingScript.Latin),\n L(\"lo\", \"lao\", \"Lao\", \"Laotiska\", \"ພາສາລາວ\", WritingScript.Lao),\n L(\"lt\", \"lit\", \"Lithuanian\", \"Litauiska\", \"Lietuvių\", WritingScript.Latin),\n L(\"lu\", \"lub\", \"Luba-Katanga\", \"Luba-Katanga\", \"Kiluba\", WritingScript.Latin),\n L(\"lv\", \"lav\", \"Latvian\", \"Lettiska\", \"Latviešu\", WritingScript.Latin),\n L(\"mg\", \"mlg\", \"Malagasy\", \"Malagassiska\", \"Malagasy\", WritingScript.Latin),\n L(\"mh\", \"mah\", \"Marshallese\", \"Marshallesiska\", \"Kajin M̧ajeļ\", WritingScript.Latin),\n L(\"mi\", \"mri\", \"Maori\", \"Maori\", \"Te Reo Māori\", WritingScript.Latin),\n L(\"mk\", \"mkd\", \"Macedonian\", \"Makedonska\", \"Македонски\", WritingScript.Cyrillic),\n L(\"ml\", \"mal\", \"Malayalam\", \"Malayalam\", \"മലയാളം\", WritingScript.Malayalam),\n L(\"mn\", \"mon\", \"Mongolian\", \"Mongoliska\", \"Монгол\", WritingScript.Cyrillic),\n L(\"mr\", \"mar\", \"Marathi\", \"Marathi\", \"मराठी\", WritingScript.Devanagari),\n L(\"ms\", \"msa\", \"Malay\", \"Malajiska\", \"Bahasa Melayu\", WritingScript.Latin),\n L(\"mt\", \"mlt\", \"Maltese\", \"Maltesiska\", \"Malti\", WritingScript.Latin),\n L(\"my\", \"mya\", \"Burmese\", \"Burmesiska\", \"မြန်မာစာ\", WritingScript.Myanmar),\n L(\"na\", \"nau\", \"Nauru\", \"Nauru\", \"Dorerin Naoero\", WritingScript.Latin),\n L(\"nb\", \"nob\", \"Norwegian Bokmål\", \"Norska (bokmål)\", \"Norsk bokmål\", WritingScript.Latin),\n L(\"nd\", \"nde\", \"Northern Ndebele\", \"Nordndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"ne\", \"nep\", \"Nepali\", \"Nepalesiska\", \"नेपाली\", WritingScript.Devanagari),\n L(\"ng\", \"ndo\", \"Ndonga\", \"Ndonga\", \"Owambo\", WritingScript.Latin),\n L(\"nl\", \"nld\", \"Dutch\", \"Nederländska\", \"Nederlands\", WritingScript.Latin),\n L(\"nn\", \"nno\", \"Norwegian Nynorsk\", \"Norska (nynorsk)\", \"Norsk nynorsk\", WritingScript.Latin),\n L(\"no\", \"nor\", \"Norwegian\", \"Norska\", \"Norsk\", WritingScript.Latin),\n L(\"nr\", \"nbl\", \"Southern Ndebele\", \"Sydndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"nv\", \"nav\", \"Navajo\", \"Navajo\", \"Diné Bizaad\", WritingScript.Latin),\n L(\"ny\", \"nya\", \"Chichewa\", \"Chichewa\", \"Chichewa\", WritingScript.Latin),\n L(\"oc\", \"oci\", \"Occitan\", \"Occitanska\", \"Occitan\", WritingScript.Latin),\n L(\"oj\", \"oji\", \"Ojibwa\", \"Ojibwa\", \"ᐊᓂᔑᓈᐯᒧᐎᓐ\", WritingScript.Canadian),\n L(\"om\", \"orm\", \"Oromo\", \"Oromo\", \"Afaan Oromoo\", WritingScript.Latin),\n L(\"or\", \"ori\", \"Oriya\", \"Oriya\", \"ଓଡ଼ିଆ\", WritingScript.Oriya),\n L(\"os\", \"oss\", \"Ossetian\", \"Ossetiska\", \"Ирон\", WritingScript.Cyrillic),\n L(\"pa\", \"pan\", \"Punjabi\", \"Punjabi\", \"ਪੰਜਾਬੀ\", WritingScript.Gurmukhi),\n L(\"pi\", \"pli\", \"Pali\", \"Pali\", \"पालि\", WritingScript.Devanagari),\n L(\"pl\", \"pol\", \"Polish\", \"Polska\", \"Polski\", WritingScript.Latin),\n L(\"ps\", \"pus\", \"Pashto\", \"Pashto\", \"پښتو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"pt\", \"por\", \"Portuguese\", \"Portugisiska\", \"Português\", WritingScript.Latin),\n L(\"qu\", \"que\", \"Quechua\", \"Quechua\", \"Runa Simi\", WritingScript.Latin),\n L(\"rm\", \"roh\", \"Romansh\", \"Rätoromanska\", \"Rumantsch\", WritingScript.Latin),\n L(\"rn\", \"run\", \"Rundi\", \"Kirundi\", \"Ikirundi\", WritingScript.Latin),\n L(\"ro\", \"ron\", \"Romanian\", \"Rumänska\", \"Română\", WritingScript.Latin),\n L(\"ru\", \"rus\", \"Russian\", \"Ryska\", \"Русский\", WritingScript.Cyrillic),\n L(\"rw\", \"kin\", \"Kinyarwanda\", \"Kinyarwanda\", \"Ikinyarwanda\", WritingScript.Latin),\n L(\"sa\", \"san\", \"Sanskrit\", \"Sanskrit\", \"संस्कृतम्\", WritingScript.Devanagari),\n L(\"sc\", \"srd\", \"Sardinian\", \"Sardiska\", \"Sardu\", WritingScript.Latin),\n L(\"sd\", \"snd\", \"Sindhi\", \"Sindhi\", \"سنڌي\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"se\", \"sme\", \"Northern Sami\", \"Nordsamiska\", \"Davvisámegiella\", WritingScript.Latin),\n L(\"sg\", \"sag\", \"Sango\", \"Sango\", \"Yângâ tî Sängö\", WritingScript.Latin),\n L(\"si\", \"sin\", \"Sinhala\", \"Singalesiska\", \"සිංහල\", WritingScript.Sinhala),\n L(\"sk\", \"slk\", \"Slovak\", \"Slovakiska\", \"Slovenčina\", WritingScript.Latin),\n L(\"sl\", \"slv\", \"Slovenian\", \"Slovenska\", \"Slovenščina\", WritingScript.Latin),\n L(\"sm\", \"smo\", \"Samoan\", \"Samoanska\", \"Gagana Sāmoa\", WritingScript.Latin),\n L(\"sn\", \"sna\", \"Shona\", \"Shona\", \"ChiShona\", WritingScript.Latin),\n L(\"so\", \"som\", \"Somali\", \"Somaliska\", \"Soomaali\", WritingScript.Latin),\n L(\"sq\", \"sqi\", \"Albanian\", \"Albanska\", \"Shqip\", WritingScript.Latin),\n L(\"sr\", \"srp\", \"Serbian\", \"Serbiska\", \"Српски\", WritingScript.Cyrillic),\n L(\"ss\", \"ssw\", \"Swati\", \"Swati\", \"SiSwati\", WritingScript.Latin),\n L(\"st\", \"sot\", \"Southern Sotho\", \"Sotho\", \"Sesotho\", WritingScript.Latin),\n L(\"su\", \"sun\", \"Sundanese\", \"Sundanesiska\", \"Basa Sunda\", WritingScript.Latin),\n L(\"sv\", \"swe\", \"Swedish\", \"Svenska\", \"Svenska\", WritingScript.Latin),\n L(\"sw\", \"swa\", \"Swahili\", \"Swahili\", \"Kiswahili\", WritingScript.Latin),\n L(\"ta\", \"tam\", \"Tamil\", \"Tamil\", \"தமிழ்\", WritingScript.Tamil),\n L(\"te\", \"tel\", \"Telugu\", \"Telugu\", \"తెలుగు\", WritingScript.Telugu),\n L(\"tg\", \"tgk\", \"Tajik\", \"Tadzjikiska\", \"Тоҷикӣ\", WritingScript.Cyrillic),\n L(\"th\", \"tha\", \"Thai\", \"Thailändska\", \"ไทย\", WritingScript.Thai),\n L(\"ti\", \"tir\", \"Tigrinya\", \"Tigrinja\", \"ትግርኛ\", WritingScript.Ethiopic),\n L(\"tk\", \"tuk\", \"Turkmen\", \"Turkmeniska\", \"Türkmen\", WritingScript.Latin),\n L(\"tl\", \"tgl\", \"Tagalog\", \"Tagalog\", \"Tagalog\", WritingScript.Latin),\n L(\"tn\", \"tsn\", \"Tswana\", \"Tswana\", \"Setswana\", WritingScript.Latin),\n L(\"to\", \"ton\", \"Tongan\", \"Tonganska\", \"Lea Faka-Tonga\", WritingScript.Latin),\n L(\"tr\", \"tur\", \"Turkish\", \"Turkiska\", \"Türkçe\", WritingScript.Latin),\n L(\"ts\", \"tso\", \"Tsonga\", \"Tsonga\", \"Xitsonga\", WritingScript.Latin),\n L(\"tt\", \"tat\", \"Tatar\", \"Tatariska\", \"Татар\", WritingScript.Cyrillic),\n L(\"tw\", \"twi\", \"Twi\", \"Twi\", \"Twi\", WritingScript.Latin),\n L(\"ty\", \"tah\", \"Tahitian\", \"Tahitiska\", \"Reo Tahiti\", WritingScript.Latin),\n L(\n \"ug\",\n \"uig\",\n \"Uyghur\",\n \"Uiguriska\",\n \"ئۇيغۇرچە\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"uk\", \"ukr\", \"Ukrainian\", \"Ukrainska\", \"Українська\", WritingScript.Cyrillic),\n L(\"ur\", \"urd\", \"Urdu\", \"Urdu\", \"اردو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"uz\", \"uzb\", \"Uzbek\", \"Uzbekiska\", \"Oʻzbek\", WritingScript.Latin),\n L(\"ve\", \"ven\", \"Venda\", \"Venda\", \"Tshivenḓa\", WritingScript.Latin),\n L(\"vi\", \"vie\", \"Vietnamese\", \"Vietnamesiska\", \"Tiếng Việt\", WritingScript.Latin),\n L(\"vo\", \"vol\", \"Volapük\", \"Volapük\", \"Volapük\", WritingScript.Latin),\n L(\"wa\", \"wln\", \"Walloon\", \"Vallonska\", \"Walon\", WritingScript.Latin),\n L(\"wo\", \"wol\", \"Wolof\", \"Wolof\", \"Wollof\", WritingScript.Latin),\n L(\"xh\", \"xho\", \"Xhosa\", \"Xhosa\", \"isiXhosa\", WritingScript.Latin),\n L(\"yi\", \"yid\", \"Yiddish\", \"Jiddisch\", \"ייִדיש\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"yo\", \"yor\", \"Yoruba\", \"Yoruba\", \"Yorùbá\", WritingScript.Latin),\n L(\"za\", \"zha\", \"Zhuang\", \"Zhuang\", \"Saɯ cueŋƅ\", WritingScript.Latin),\n L(\"zh\", \"zho\", \"Chinese\", \"Kinesiska\", \"中文\", WritingScript.Han),\n L(\"zu\", \"zul\", \"Zulu\", \"Zulu\", \"isiZulu\", WritingScript.Latin),\n]);\n\nconst BY_KEY = (() => {\n const m = new Map<string, Language>();\n for (const lang of ALL) {\n m.set(lang.alpha2Code, lang);\n m.set(lang.alpha3Code, lang);\n m.set(lang.englishName.toLowerCase(), lang);\n if (!m.has(lang.localizedName.toLowerCase())) {\n m.set(lang.localizedName.toLowerCase(), lang);\n }\n if (\n lang.nativeName.toLowerCase() !== lang.englishName.toLowerCase() &&\n !m.has(lang.nativeName.toLowerCase())\n ) {\n m.set(lang.nativeName.toLowerCase(), lang);\n }\n }\n return m;\n})();\n\nconst byA2 = (a2: string) => BY_KEY.get(a2)!;\n\n(Language as { Afrikaans: Language }).Afrikaans = byA2(\"af\");\n(Language as { Albanian: Language }).Albanian = byA2(\"sq\");\n(Language as { Arabic: Language }).Arabic = byA2(\"ar\");\n(Language as { Bulgarian: Language }).Bulgarian = byA2(\"bg\");\n(Language as { Catalan: Language }).Catalan = byA2(\"ca\");\n(Language as { Chinese: Language }).Chinese = byA2(\"zh\");\n(Language as { Croatian: Language }).Croatian = byA2(\"hr\");\n(Language as { Czech: Language }).Czech = byA2(\"cs\");\n(Language as { Danish: Language }).Danish = byA2(\"da\");\n(Language as { Dutch: Language }).Dutch = byA2(\"nl\");\n(Language as { English: Language }).English = byA2(\"en\");\n(Language as { Estonian: Language }).Estonian = byA2(\"et\");\n(Language as { Faroese: Language }).Faroese = byA2(\"fo\");\n(Language as { Finnish: Language }).Finnish = byA2(\"fi\");\n(Language as { French: Language }).French = byA2(\"fr\");\n(Language as { German: Language }).German = byA2(\"de\");\n(Language as { Greek: Language }).Greek = byA2(\"el\");\n(Language as { Hindi: Language }).Hindi = byA2(\"hi\");\n(Language as { Hungarian: Language }).Hungarian = byA2(\"hu\");\n(Language as { Icelandic: Language }).Icelandic = byA2(\"is\");\n(Language as { Italian: Language }).Italian = byA2(\"it\");\n(Language as { Japanese: Language }).Japanese = byA2(\"ja\");\n(Language as { Korean: Language }).Korean = byA2(\"ko\");\n(Language as { Latvian: Language }).Latvian = byA2(\"lv\");\n(Language as { Lithuanian: Language }).Lithuanian = byA2(\"lt\");\n(Language as { NorthernSami: Language }).NorthernSami = byA2(\"se\");\n(Language as { Norwegian: Language }).Norwegian = byA2(\"no\");\n(Language as { NorwegianBokmal: Language }).NorwegianBokmal = byA2(\"nb\");\n(Language as { NorwegianNynorsk: Language }).NorwegianNynorsk = byA2(\"nn\");\n(Language as { Polish: Language }).Polish = byA2(\"pl\");\n(Language as { Portuguese: Language }).Portuguese = byA2(\"pt\");\n(Language as { Romanian: Language }).Romanian = byA2(\"ro\");\n(Language as { Russian: Language }).Russian = byA2(\"ru\");\n(Language as { Slovak: Language }).Slovak = byA2(\"sk\");\n(Language as { Slovenian: Language }).Slovenian = byA2(\"sl\");\n(Language as { Spanish: Language }).Spanish = byA2(\"es\");\n(Language as { Swahili: Language }).Swahili = byA2(\"sw\");\n(Language as { Swedish: Language }).Swedish = byA2(\"sv\");\n(Language as { Turkish: Language }).Turkish = byA2(\"tr\");\n(Language as { Ukrainian: Language }).Ukrainian = byA2(\"uk\");\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n// `geography/country.ts` imports this module for its currency accessors. Both\n// directions are only used inside function bodies, never at module-evaluation\n// time, so the cycle resolves safely under ESM.\nimport { Country } from \"../geography/country.js\";\n\ninterface CurrencyRow {\n code: string;\n en: string;\n sv: string;\n symbol: string;\n decimalPlaces: number;\n}\n\nconst KNOWN_CURRENCIES: readonly CurrencyRow[] = [\n { code: \"SEK\", en: \"Swedish krona\", sv: \"Svensk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"NOK\", en: \"Norwegian krone\", sv: \"Norsk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"DKK\", en: \"Danish krone\", sv: \"Dansk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"ISK\", en: \"Icelandic króna\", sv: \"Isländsk krona\", symbol: \"kr\", decimalPlaces: 0 },\n { code: \"EUR\", en: \"Euro\", sv: \"Euro\", symbol: \"€\", decimalPlaces: 2 },\n {\n code: \"USD\",\n en: \"United States dollar\",\n sv: \"Amerikansk dollar\",\n symbol: \"$\",\n decimalPlaces: 2,\n },\n { code: \"GBP\", en: \"Pound sterling\", sv: \"Brittiskt pund\", symbol: \"£\", decimalPlaces: 2 },\n { code: \"CHF\", en: \"Swiss franc\", sv: \"Schweizisk franc\", symbol: \"CHF\", decimalPlaces: 2 },\n { code: \"JPY\", en: \"Japanese yen\", sv: \"Japansk yen\", symbol: \"¥\", decimalPlaces: 0 },\n { code: \"CNY\", en: \"Chinese yuan\", sv: \"Kinesisk yuan\", symbol: \"¥\", decimalPlaces: 2 },\n { code: \"CAD\", en: \"Canadian dollar\", sv: \"Kanadensisk dollar\", symbol: \"CA$\", decimalPlaces: 2 },\n { code: \"AUD\", en: \"Australian dollar\", sv: \"Australisk dollar\", symbol: \"A$\", decimalPlaces: 2 },\n {\n code: \"NZD\",\n en: \"New Zealand dollar\",\n sv: \"Nyzeeländsk dollar\",\n symbol: \"NZ$\",\n decimalPlaces: 2,\n },\n { code: \"PLN\", en: \"Polish złoty\", sv: \"Polsk zloty\", symbol: \"zł\", decimalPlaces: 2 },\n { code: \"CZK\", en: \"Czech koruna\", sv: \"Tjeckisk koruna\", symbol: \"Kč\", decimalPlaces: 2 },\n { code: \"HUF\", en: \"Hungarian forint\", sv: \"Ungersk forint\", symbol: \"Ft\", decimalPlaces: 2 },\n { code: \"RON\", en: \"Romanian leu\", sv: \"Rumänsk leu\", symbol: \"lei\", decimalPlaces: 2 },\n { code: \"BGN\", en: \"Bulgarian lev\", sv: \"Bulgarisk lev\", symbol: \"лв\", decimalPlaces: 2 },\n { code: \"HRK\", en: \"Croatian kuna\", sv: \"Kroatisk kuna\", symbol: \"kn\", decimalPlaces: 2 },\n { code: \"TRY\", en: \"Turkish lira\", sv: \"Turkisk lira\", symbol: \"₺\", decimalPlaces: 2 },\n { code: \"RUB\", en: \"Russian ruble\", sv: \"Rysk rubel\", symbol: \"₽\", decimalPlaces: 2 },\n { code: \"INR\", en: \"Indian rupee\", sv: \"Indisk rupie\", symbol: \"₹\", decimalPlaces: 2 },\n { code: \"BRL\", en: \"Brazilian real\", sv: \"Brasiliansk real\", symbol: \"R$\", decimalPlaces: 2 },\n { code: \"ZAR\", en: \"South African rand\", sv: \"Sydafrikansk rand\", symbol: \"R\", decimalPlaces: 2 },\n { code: \"MXN\", en: \"Mexican peso\", sv: \"Mexikansk peso\", symbol: \"MX$\", decimalPlaces: 2 },\n {\n code: \"SGD\",\n en: \"Singapore dollar\",\n sv: \"Singaporiansk dollar\",\n symbol: \"S$\",\n decimalPlaces: 2,\n },\n { code: \"HKD\", en: \"Hong Kong dollar\", sv: \"Hongkongdollar\", symbol: \"HK$\", decimalPlaces: 2 },\n { code: \"KRW\", en: \"South Korean won\", sv: \"Sydkoreansk won\", symbol: \"₩\", decimalPlaces: 0 },\n { code: \"THB\", en: \"Thai baht\", sv: \"Thailändsk baht\", symbol: \"฿\", decimalPlaces: 2 },\n {\n code: \"TWD\",\n en: \"New Taiwan dollar\",\n sv: \"Taiwanesisk dollar\",\n symbol: \"NT$\",\n decimalPlaces: 2,\n },\n { code: \"ILS\", en: \"Israeli new shekel\", sv: \"Israelisk shekel\", symbol: \"₪\", decimalPlaces: 2 },\n {\n code: \"AED\",\n en: \"United Arab Emirates dirham\",\n sv: \"Emiratisk dirham\",\n symbol: \"د.إ\",\n decimalPlaces: 2,\n },\n { code: \"SAR\", en: \"Saudi riyal\", sv: \"Saudisk riyal\", symbol: \"﷼\", decimalPlaces: 2 },\n { code: \"PHP\", en: \"Philippine peso\", sv: \"Filippinsk peso\", symbol: \"₱\", decimalPlaces: 2 },\n { code: \"IDR\", en: \"Indonesian rupiah\", sv: \"Indonesisk rupiah\", symbol: \"Rp\", decimalPlaces: 2 },\n { code: \"MYR\", en: \"Malaysian ringgit\", sv: \"Malaysisk ringgit\", symbol: \"RM\", decimalPlaces: 2 },\n { code: \"VND\", en: \"Vietnamese đồng\", sv: \"Vietnamesisk dong\", symbol: \"₫\", decimalPlaces: 0 },\n { code: \"UAH\", en: \"Ukrainian hryvnia\", sv: \"Ukrainsk hryvnia\", symbol: \"₴\", decimalPlaces: 2 },\n { code: \"EGP\", en: \"Egyptian pound\", sv: \"Egyptiskt pund\", symbol: \"E£\", decimalPlaces: 2 },\n { code: \"NGN\", en: \"Nigerian naira\", sv: \"Nigeriansk naira\", symbol: \"₦\", decimalPlaces: 2 },\n { code: \"KES\", en: \"Kenyan shilling\", sv: \"Kenyansk shilling\", symbol: \"KSh\", decimalPlaces: 2 },\n { code: \"COP\", en: \"Colombian peso\", sv: \"Colombiansk peso\", symbol: \"CO$\", decimalPlaces: 2 },\n { code: \"ARS\", en: \"Argentine peso\", sv: \"Argentinsk peso\", symbol: \"AR$\", decimalPlaces: 2 },\n { code: \"CLP\", en: \"Chilean peso\", sv: \"Chilensk peso\", symbol: \"CL$\", decimalPlaces: 0 },\n { code: \"PEN\", en: \"Peruvian sol\", sv: \"Peruansk sol\", symbol: \"S/.\", decimalPlaces: 2 },\n];\n\n/**\n * An ISO 4217 currency identified by its three-letter code (e.g. `SEK`, `EUR`).\n */\nexport class Currency {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Currency\",\n localizedName: \"Valuta\",\n emoji: \"\\u{1F4B1}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-4217-currency-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_4217\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly symbol: string;\n readonly decimalPlaces: number;\n\n private constructor(row: CurrencyRow) {\n this.code = row.code;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.symbol = row.symbol;\n this.decimalPlaces = row.decimalPlaces;\n }\n\n /** @internal */\n static _fromRow(row: CurrencyRow): Currency {\n return new Currency(row);\n }\n\n /** Display name in current UI culture (Swedish or English). */\n /**\n * The currency name as used in its issuing country. Falls back to\n * {@link englishName} when no issuing country is known.\n */\n get nativeName(): string {\n const country = Country.all.find(\n (c) => c.currencyCode != null && c.currencyCode.toUpperCase() === this.code.toUpperCase(),\n );\n if (country === undefined) return this.englishName;\n return country.nativeName === country.englishName ? this.englishName : this.localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): Currency | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n const byCode = BY_CODE.get(trimmed.toUpperCase());\n if (byCode) return byCode;\n const byName = BY_NAME.get(trimmed.toLowerCase());\n if (byName) return byName;\n return null;\n }\n\n static parse(input: string): Currency {\n const r = Currency.tryParse(input);\n if (r === null) throw new Error(\"Unknown currency.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Currency.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Currency.normalize(input) === input;\n }\n\n /** All known currencies. */\n static get all(): readonly Currency[] {\n return ALL_CURRENCIES;\n }\n\n /** @internal Lookup by symbol. */\n static tryParseSymbol(symbol: string | null | undefined): Currency | null {\n if (symbol == null || symbol.trim() === \"\") return null;\n return BY_SYMBOL.get(symbol.trim().toLowerCase()) ?? null;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Currency | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Currency | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n static get SEK(): Currency {\n return BY_CODE.get(\"SEK\")!;\n }\n static get EUR(): Currency {\n return BY_CODE.get(\"EUR\")!;\n }\n static get USD(): Currency {\n return BY_CODE.get(\"USD\")!;\n }\n static get NOK(): Currency {\n return BY_CODE.get(\"NOK\")!;\n }\n static get DKK(): Currency {\n return BY_CODE.get(\"DKK\")!;\n }\n static get GBP(): Currency {\n return BY_CODE.get(\"GBP\")!;\n }\n}\n\nconst ALL_CURRENCIES: readonly Currency[] = KNOWN_CURRENCIES.map((r) => Currency._fromRow(r));\n\nconst BY_CODE = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) BY_CODE.set(c.code.toUpperCase(), c);\n\nconst BY_NAME = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n BY_NAME.set(c.englishName.toLowerCase(), c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n}\n\nconst BY_SYMBOL = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n if (!BY_SYMBOL.has(c.symbol.toLowerCase())) BY_SYMBOL.set(c.symbol.toLowerCase(), c);\n}\n\n/**\n * Returns the primary currency for a country, or `null` when no association\n * is known. Resolves the country's first `currencyCodes` entry to a\n * {@link Currency} instance.\n */\nexport function getCurrencyForCountry(country: Country): Currency | null {\n const codes = country.currencyCodes;\n if (codes.length === 0) return null;\n const first = codes[0];\n if (first == null) return null;\n return Currency.tryParse(first);\n}\n","import { Continent } from \"./continent.js\";\n\n/**\n * Static country data: ISO 3166-1 alpha-2/alpha-3/numeric codes, English/Swedish/native names,\n * E.164 calling code, ccTLD, continent. Sourced from ISO 3166, ITU-T E.164, and IANA root db.\n */\nexport interface CountryRow {\n readonly alpha2: string;\n readonly alpha3: string;\n readonly numeric: number;\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly callingCode: string;\n readonly tld: string;\n readonly continent: Continent;\n}\n\nconst C = (\n alpha2: string,\n alpha3: string,\n numeric: number,\n en: string,\n sv: string,\n native: string,\n callingCode: string,\n tld: string,\n continent: Continent,\n): CountryRow => ({ alpha2, alpha3, numeric, en, sv, native, callingCode, tld, continent });\n\nexport const COUNTRY_ROWS: readonly CountryRow[] = [\n C(\"AF\", \"AFG\", 4, \"Afghanistan\", \"Afghanistan\", \"افغانستان\", \"93\", \".af\", Continent.Asia),\n C(\"AL\", \"ALB\", 8, \"Albania\", \"Albanien\", \"Shqipëria\", \"355\", \".al\", Continent.Europe),\n C(\"DZ\", \"DZA\", 12, \"Algeria\", \"Algeriet\", \"الجزائر\", \"213\", \".dz\", Continent.Africa),\n C(\n \"AS\",\n \"ASM\",\n 16,\n \"American Samoa\",\n \"Amerikanska Samoa\",\n \"American Samoa\",\n \"1\",\n \".as\",\n Continent.Oceania,\n ),\n C(\"AD\", \"AND\", 20, \"Andorra\", \"Andorra\", \"Andorra\", \"376\", \".ad\", Continent.Europe),\n C(\"AO\", \"AGO\", 24, \"Angola\", \"Angola\", \"Angola\", \"244\", \".ao\", Continent.Africa),\n C(\n \"AG\",\n \"ATG\",\n 28,\n \"Antigua and Barbuda\",\n \"Antigua och Barbuda\",\n \"Antigua and Barbuda\",\n \"1\",\n \".ag\",\n Continent.NorthAmerica,\n ),\n C(\"AR\", \"ARG\", 32, \"Argentina\", \"Argentina\", \"Argentina\", \"54\", \".ar\", Continent.SouthAmerica),\n C(\"AM\", \"ARM\", 51, \"Armenia\", \"Armenien\", \"Հայաստան\", \"374\", \".am\", Continent.Asia),\n C(\"AW\", \"ABW\", 533, \"Aruba\", \"Aruba\", \"Aruba\", \"297\", \".aw\", Continent.NorthAmerica),\n C(\"AU\", \"AUS\", 36, \"Australia\", \"Australien\", \"Australia\", \"61\", \".au\", Continent.Oceania),\n C(\"AT\", \"AUT\", 40, \"Austria\", \"Österrike\", \"Österreich\", \"43\", \".at\", Continent.Europe),\n C(\"AZ\", \"AZE\", 31, \"Azerbaijan\", \"Azerbajdzjan\", \"Azərbaycan\", \"994\", \".az\", Continent.Asia),\n C(\"BS\", \"BHS\", 44, \"Bahamas\", \"Bahamas\", \"Bahamas\", \"1\", \".bs\", Continent.NorthAmerica),\n C(\"BH\", \"BHR\", 48, \"Bahrain\", \"Bahrain\", \"البحرين\", \"973\", \".bh\", Continent.Asia),\n C(\"BD\", \"BGD\", 50, \"Bangladesh\", \"Bangladesh\", \"বাংলাদেশ\", \"880\", \".bd\", Continent.Asia),\n C(\"BB\", \"BRB\", 52, \"Barbados\", \"Barbados\", \"Barbados\", \"1\", \".bb\", Continent.NorthAmerica),\n C(\"BY\", \"BLR\", 112, \"Belarus\", \"Belarus\", \"Беларусь\", \"375\", \".by\", Continent.Europe),\n C(\"BE\", \"BEL\", 56, \"Belgium\", \"Belgien\", \"België\", \"32\", \".be\", Continent.Europe),\n C(\"BZ\", \"BLZ\", 84, \"Belize\", \"Belize\", \"Belize\", \"501\", \".bz\", Continent.NorthAmerica),\n C(\"BJ\", \"BEN\", 204, \"Benin\", \"Benin\", \"Bénin\", \"229\", \".bj\", Continent.Africa),\n C(\"BM\", \"BMU\", 60, \"Bermuda\", \"Bermuda\", \"Bermuda\", \"1\", \".bm\", Continent.NorthAmerica),\n C(\"BT\", \"BTN\", 64, \"Bhutan\", \"Bhutan\", \"འབྲུག\", \"975\", \".bt\", Continent.Asia),\n C(\"BO\", \"BOL\", 68, \"Bolivia\", \"Bolivia\", \"Bolivia\", \"591\", \".bo\", Continent.SouthAmerica),\n C(\n \"BA\",\n \"BIH\",\n 70,\n \"Bosnia and Herzegovina\",\n \"Bosnien och Hercegovina\",\n \"Bosna i Hercegovina\",\n \"387\",\n \".ba\",\n Continent.Europe,\n ),\n C(\"BW\", \"BWA\", 72, \"Botswana\", \"Botswana\", \"Botswana\", \"267\", \".bw\", Continent.Africa),\n C(\"BR\", \"BRA\", 76, \"Brazil\", \"Brasilien\", \"Brasil\", \"55\", \".br\", Continent.SouthAmerica),\n C(\"BN\", \"BRN\", 96, \"Brunei\", \"Brunei\", \"Brunei\", \"673\", \".bn\", Continent.Asia),\n C(\"BG\", \"BGR\", 100, \"Bulgaria\", \"Bulgarien\", \"България\", \"359\", \".bg\", Continent.Europe),\n C(\n \"BF\",\n \"BFA\",\n 854,\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"226\",\n \".bf\",\n Continent.Africa,\n ),\n C(\"BI\", \"BDI\", 108, \"Burundi\", \"Burundi\", \"Burundi\", \"257\", \".bi\", Continent.Africa),\n C(\"CV\", \"CPV\", 132, \"Cabo Verde\", \"Kap Verde\", \"Cabo Verde\", \"238\", \".cv\", Continent.Africa),\n C(\"KH\", \"KHM\", 116, \"Cambodia\", \"Kambodja\", \"កម្ពុជា\", \"855\", \".kh\", Continent.Asia),\n C(\"CM\", \"CMR\", 120, \"Cameroon\", \"Kamerun\", \"Cameroun\", \"237\", \".cm\", Continent.Africa),\n C(\"CA\", \"CAN\", 124, \"Canada\", \"Kanada\", \"Canada\", \"1\", \".ca\", Continent.NorthAmerica),\n C(\n \"CF\",\n \"CAF\",\n 140,\n \"Central African Republic\",\n \"Centralafrikanska republiken\",\n \"République centrafricaine\",\n \"236\",\n \".cf\",\n Continent.Africa,\n ),\n C(\"TD\", \"TCD\", 148, \"Chad\", \"Tchad\", \"Tchad\", \"235\", \".td\", Continent.Africa),\n C(\"CL\", \"CHL\", 152, \"Chile\", \"Chile\", \"Chile\", \"56\", \".cl\", Continent.SouthAmerica),\n C(\"CN\", \"CHN\", 156, \"China\", \"Kina\", \"中国\", \"86\", \".cn\", Continent.Asia),\n C(\"CO\", \"COL\", 170, \"Colombia\", \"Colombia\", \"Colombia\", \"57\", \".co\", Continent.SouthAmerica),\n C(\"KM\", \"COM\", 174, \"Comoros\", \"Komorerna\", \"Komori\", \"269\", \".km\", Continent.Africa),\n C(\"CG\", \"COG\", 178, \"Congo\", \"Kongo\", \"Congo\", \"242\", \".cg\", Continent.Africa),\n C(\n \"CD\",\n \"COD\",\n 180,\n \"Congo (Democratic Republic)\",\n \"Demokratiska republiken Kongo\",\n \"République démocratique du Congo\",\n \"243\",\n \".cd\",\n Continent.Africa,\n ),\n C(\n \"CR\",\n \"CRI\",\n 188,\n \"Costa Rica\",\n \"Costa Rica\",\n \"Costa Rica\",\n \"506\",\n \".cr\",\n Continent.NorthAmerica,\n ),\n C(\n \"CI\",\n \"CIV\",\n 384,\n \"Côte d'Ivoire\",\n \"Elfenbenskusten\",\n \"Côte d'Ivoire\",\n \"225\",\n \".ci\",\n Continent.Africa,\n ),\n C(\"HR\", \"HRV\", 191, \"Croatia\", \"Kroatien\", \"Hrvatska\", \"385\", \".hr\", Continent.Europe),\n C(\"CU\", \"CUB\", 192, \"Cuba\", \"Kuba\", \"Cuba\", \"53\", \".cu\", Continent.NorthAmerica),\n C(\"CW\", \"CUW\", 531, \"Curaçao\", \"Curaçao\", \"Curaçao\", \"599\", \".cw\", Continent.NorthAmerica),\n C(\"CY\", \"CYP\", 196, \"Cyprus\", \"Cypern\", \"Κύπρος\", \"357\", \".cy\", Continent.Europe),\n C(\"CZ\", \"CZE\", 203, \"Czechia\", \"Tjeckien\", \"Česko\", \"420\", \".cz\", Continent.Europe),\n C(\"DK\", \"DNK\", 208, \"Denmark\", \"Danmark\", \"Danmark\", \"45\", \".dk\", Continent.Europe),\n C(\"DJ\", \"DJI\", 262, \"Djibouti\", \"Djibouti\", \"Djibouti\", \"253\", \".dj\", Continent.Africa),\n C(\"DM\", \"DMA\", 212, \"Dominica\", \"Dominica\", \"Dominica\", \"1\", \".dm\", Continent.NorthAmerica),\n C(\n \"DO\",\n \"DOM\",\n 214,\n \"Dominican Republic\",\n \"Dominikanska republiken\",\n \"República Dominicana\",\n \"1\",\n \".do\",\n Continent.NorthAmerica,\n ),\n C(\"EC\", \"ECU\", 218, \"Ecuador\", \"Ecuador\", \"Ecuador\", \"593\", \".ec\", Continent.SouthAmerica),\n C(\"EG\", \"EGY\", 818, \"Egypt\", \"Egypten\", \"مصر\", \"20\", \".eg\", Continent.Africa),\n C(\n \"SV\",\n \"SLV\",\n 222,\n \"El Salvador\",\n \"El Salvador\",\n \"El Salvador\",\n \"503\",\n \".sv\",\n Continent.NorthAmerica,\n ),\n C(\n \"GQ\",\n \"GNQ\",\n 226,\n \"Equatorial Guinea\",\n \"Ekvatorialguinea\",\n \"Guinea Ecuatorial\",\n \"240\",\n \".gq\",\n Continent.Africa,\n ),\n C(\"ER\", \"ERI\", 232, \"Eritrea\", \"Eritrea\", \"ኤርትራ\", \"291\", \".er\", Continent.Africa),\n C(\"EE\", \"EST\", 233, \"Estonia\", \"Estland\", \"Eesti\", \"372\", \".ee\", Continent.Europe),\n C(\"SZ\", \"SWZ\", 748, \"Eswatini\", \"Eswatini\", \"eSwatini\", \"268\", \".sz\", Continent.Africa),\n C(\"ET\", \"ETH\", 231, \"Ethiopia\", \"Etiopien\", \"ኢትዮጵያ\", \"251\", \".et\", Continent.Africa),\n C(\"FJ\", \"FJI\", 242, \"Fiji\", \"Fiji\", \"Fiji\", \"679\", \".fj\", Continent.Oceania),\n C(\"FI\", \"FIN\", 246, \"Finland\", \"Finland\", \"Suomi\", \"358\", \".fi\", Continent.Europe),\n C(\"FR\", \"FRA\", 250, \"France\", \"Frankrike\", \"France\", \"33\", \".fr\", Continent.Europe),\n C(\"GA\", \"GAB\", 266, \"Gabon\", \"Gabon\", \"Gabon\", \"241\", \".ga\", Continent.Africa),\n C(\"GM\", \"GMB\", 270, \"Gambia\", \"Gambia\", \"Gambia\", \"220\", \".gm\", Continent.Africa),\n C(\"GE\", \"GEO\", 268, \"Georgia\", \"Georgien\", \"საქართველო\", \"995\", \".ge\", Continent.Asia),\n C(\"DE\", \"DEU\", 276, \"Germany\", \"Tyskland\", \"Deutschland\", \"49\", \".de\", Continent.Europe),\n C(\"GH\", \"GHA\", 288, \"Ghana\", \"Ghana\", \"Ghana\", \"233\", \".gh\", Continent.Africa),\n C(\"GI\", \"GIB\", 292, \"Gibraltar\", \"Gibraltar\", \"Gibraltar\", \"350\", \".gi\", Continent.Europe),\n C(\"GR\", \"GRC\", 300, \"Greece\", \"Grekland\", \"Ελλάδα\", \"30\", \".gr\", Continent.Europe),\n C(\n \"GL\",\n \"GRL\",\n 304,\n \"Greenland\",\n \"Grönland\",\n \"Kalaallit Nunaat\",\n \"299\",\n \".gl\",\n Continent.NorthAmerica,\n ),\n C(\"GD\", \"GRD\", 308, \"Grenada\", \"Grenada\", \"Grenada\", \"1\", \".gd\", Continent.NorthAmerica),\n C(\"GU\", \"GUM\", 316, \"Guam\", \"Guam\", \"Guam\", \"1\", \".gu\", Continent.Oceania),\n C(\"GT\", \"GTM\", 320, \"Guatemala\", \"Guatemala\", \"Guatemala\", \"502\", \".gt\", Continent.NorthAmerica),\n C(\"GG\", \"GGY\", 831, \"Guernsey\", \"Guernsey\", \"Guernsey\", \"44\", \".gg\", Continent.Europe),\n C(\"GN\", \"GIN\", 324, \"Guinea\", \"Guinea\", \"Guinée\", \"224\", \".gn\", Continent.Africa),\n C(\n \"GW\",\n \"GNB\",\n 624,\n \"Guinea-Bissau\",\n \"Guinea-Bissau\",\n \"Guiné-Bissau\",\n \"245\",\n \".gw\",\n Continent.Africa,\n ),\n C(\"GY\", \"GUY\", 328, \"Guyana\", \"Guyana\", \"Guyana\", \"592\", \".gy\", Continent.SouthAmerica),\n C(\"HT\", \"HTI\", 332, \"Haiti\", \"Haiti\", \"Haïti\", \"509\", \".ht\", Continent.NorthAmerica),\n C(\"HN\", \"HND\", 340, \"Honduras\", \"Honduras\", \"Honduras\", \"504\", \".hn\", Continent.NorthAmerica),\n C(\"HK\", \"HKG\", 344, \"Hong Kong\", \"Hongkong\", \"香港\", \"852\", \".hk\", Continent.Asia),\n C(\"HU\", \"HUN\", 348, \"Hungary\", \"Ungern\", \"Magyarország\", \"36\", \".hu\", Continent.Europe),\n C(\"IS\", \"ISL\", 352, \"Iceland\", \"Island\", \"Ísland\", \"354\", \".is\", Continent.Europe),\n C(\"IN\", \"IND\", 356, \"India\", \"Indien\", \"भारत\", \"91\", \".in\", Continent.Asia),\n C(\"ID\", \"IDN\", 360, \"Indonesia\", \"Indonesien\", \"Indonesia\", \"62\", \".id\", Continent.Asia),\n C(\"IR\", \"IRN\", 364, \"Iran\", \"Iran\", \"ایران\", \"98\", \".ir\", Continent.Asia),\n C(\"IQ\", \"IRQ\", 368, \"Iraq\", \"Irak\", \"العراق\", \"964\", \".iq\", Continent.Asia),\n C(\"IE\", \"IRL\", 372, \"Ireland\", \"Irland\", \"Éire\", \"353\", \".ie\", Continent.Europe),\n C(\"IM\", \"IMN\", 833, \"Isle of Man\", \"Isle of Man\", \"Isle of Man\", \"44\", \".im\", Continent.Europe),\n C(\"IL\", \"ISR\", 376, \"Israel\", \"Israel\", \"ישראל\", \"972\", \".il\", Continent.Asia),\n C(\"IT\", \"ITA\", 380, \"Italy\", \"Italien\", \"Italia\", \"39\", \".it\", Continent.Europe),\n C(\"JM\", \"JAM\", 388, \"Jamaica\", \"Jamaica\", \"Jamaica\", \"1\", \".jm\", Continent.NorthAmerica),\n C(\"JP\", \"JPN\", 392, \"Japan\", \"Japan\", \"日本\", \"81\", \".jp\", Continent.Asia),\n C(\"JE\", \"JEY\", 832, \"Jersey\", \"Jersey\", \"Jersey\", \"44\", \".je\", Continent.Europe),\n C(\"JO\", \"JOR\", 400, \"Jordan\", \"Jordanien\", \"الأردن\", \"962\", \".jo\", Continent.Asia),\n C(\"KZ\", \"KAZ\", 398, \"Kazakhstan\", \"Kazakstan\", \"Қазақстан\", \"7\", \".kz\", Continent.Asia),\n C(\"KE\", \"KEN\", 404, \"Kenya\", \"Kenya\", \"Kenya\", \"254\", \".ke\", Continent.Africa),\n C(\"KI\", \"KIR\", 296, \"Kiribati\", \"Kiribati\", \"Kiribati\", \"686\", \".ki\", Continent.Oceania),\n C(\"KP\", \"PRK\", 408, \"North Korea\", \"Nordkorea\", \"조선\", \"850\", \".kp\", Continent.Asia),\n C(\"KR\", \"KOR\", 410, \"South Korea\", \"Sydkorea\", \"대한민국\", \"82\", \".kr\", Continent.Asia),\n C(\"KW\", \"KWT\", 414, \"Kuwait\", \"Kuwait\", \"الكويت\", \"965\", \".kw\", Continent.Asia),\n C(\"KG\", \"KGZ\", 417, \"Kyrgyzstan\", \"Kirgizistan\", \"Кыргызстан\", \"996\", \".kg\", Continent.Asia),\n C(\"LA\", \"LAO\", 418, \"Laos\", \"Laos\", \"ລາວ\", \"856\", \".la\", Continent.Asia),\n C(\"LV\", \"LVA\", 428, \"Latvia\", \"Lettland\", \"Latvija\", \"371\", \".lv\", Continent.Europe),\n C(\"LB\", \"LBN\", 422, \"Lebanon\", \"Libanon\", \"لبنان\", \"961\", \".lb\", Continent.Asia),\n C(\"LS\", \"LSO\", 426, \"Lesotho\", \"Lesotho\", \"Lesotho\", \"266\", \".ls\", Continent.Africa),\n C(\"LR\", \"LBR\", 430, \"Liberia\", \"Liberia\", \"Liberia\", \"231\", \".lr\", Continent.Africa),\n C(\"LY\", \"LBY\", 434, \"Libya\", \"Libyen\", \"ليبيا\", \"218\", \".ly\", Continent.Africa),\n C(\n \"LI\",\n \"LIE\",\n 438,\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"423\",\n \".li\",\n Continent.Europe,\n ),\n C(\"LT\", \"LTU\", 440, \"Lithuania\", \"Litauen\", \"Lietuva\", \"370\", \".lt\", Continent.Europe),\n C(\"LU\", \"LUX\", 442, \"Luxembourg\", \"Luxemburg\", \"Lëtzebuerg\", \"352\", \".lu\", Continent.Europe),\n C(\"MO\", \"MAC\", 446, \"Macao\", \"Macao\", \"澳門\", \"853\", \".mo\", Continent.Asia),\n C(\"MG\", \"MDG\", 450, \"Madagascar\", \"Madagaskar\", \"Madagasikara\", \"261\", \".mg\", Continent.Africa),\n C(\"MW\", \"MWI\", 454, \"Malawi\", \"Malawi\", \"Malawi\", \"265\", \".mw\", Continent.Africa),\n C(\"MY\", \"MYS\", 458, \"Malaysia\", \"Malaysia\", \"Malaysia\", \"60\", \".my\", Continent.Asia),\n C(\"MV\", \"MDV\", 462, \"Maldives\", \"Maldiverna\", \"ދިވެހިރާއްޖެ\", \"960\", \".mv\", Continent.Asia),\n C(\"ML\", \"MLI\", 466, \"Mali\", \"Mali\", \"Mali\", \"223\", \".ml\", Continent.Africa),\n C(\"MT\", \"MLT\", 470, \"Malta\", \"Malta\", \"Malta\", \"356\", \".mt\", Continent.Europe),\n C(\n \"MH\",\n \"MHL\",\n 584,\n \"Marshall Islands\",\n \"Marshallöarna\",\n \"Marshall Islands\",\n \"692\",\n \".mh\",\n Continent.Oceania,\n ),\n C(\"MR\", \"MRT\", 478, \"Mauritania\", \"Mauretanien\", \"موريتانيا\", \"222\", \".mr\", Continent.Africa),\n C(\"MU\", \"MUS\", 480, \"Mauritius\", \"Mauritius\", \"Maurice\", \"230\", \".mu\", Continent.Africa),\n C(\"MX\", \"MEX\", 484, \"Mexico\", \"Mexiko\", \"México\", \"52\", \".mx\", Continent.NorthAmerica),\n C(\"FM\", \"FSM\", 583, \"Micronesia\", \"Mikronesien\", \"Micronesia\", \"691\", \".fm\", Continent.Oceania),\n C(\"MD\", \"MDA\", 498, \"Moldova\", \"Moldavien\", \"Moldova\", \"373\", \".md\", Continent.Europe),\n C(\"MC\", \"MCO\", 492, \"Monaco\", \"Monaco\", \"Monaco\", \"377\", \".mc\", Continent.Europe),\n C(\"MN\", \"MNG\", 496, \"Mongolia\", \"Mongoliet\", \"Монгол\", \"976\", \".mn\", Continent.Asia),\n C(\"ME\", \"MNE\", 499, \"Montenegro\", \"Montenegro\", \"Crna Gora\", \"382\", \".me\", Continent.Europe),\n C(\"MA\", \"MAR\", 504, \"Morocco\", \"Marocko\", \"المغرب\", \"212\", \".ma\", Continent.Africa),\n C(\"MZ\", \"MOZ\", 508, \"Mozambique\", \"Moçambique\", \"Moçambique\", \"258\", \".mz\", Continent.Africa),\n C(\"MM\", \"MMR\", 104, \"Myanmar\", \"Myanmar\", \"မြန်မာ\", \"95\", \".mm\", Continent.Asia),\n C(\"NA\", \"NAM\", 516, \"Namibia\", \"Namibia\", \"Namibia\", \"264\", \".na\", Continent.Africa),\n C(\"NR\", \"NRU\", 520, \"Nauru\", \"Nauru\", \"Nauru\", \"674\", \".nr\", Continent.Oceania),\n C(\"NP\", \"NPL\", 524, \"Nepal\", \"Nepal\", \"नेपाल\", \"977\", \".np\", Continent.Asia),\n C(\"NL\", \"NLD\", 528, \"Netherlands\", \"Nederländerna\", \"Nederland\", \"31\", \".nl\", Continent.Europe),\n C(\"NZ\", \"NZL\", 554, \"New Zealand\", \"Nya Zeeland\", \"Aotearoa\", \"64\", \".nz\", Continent.Oceania),\n C(\"NI\", \"NIC\", 558, \"Nicaragua\", \"Nicaragua\", \"Nicaragua\", \"505\", \".ni\", Continent.NorthAmerica),\n C(\"NE\", \"NER\", 562, \"Niger\", \"Niger\", \"Niger\", \"227\", \".ne\", Continent.Africa),\n C(\"NG\", \"NGA\", 566, \"Nigeria\", \"Nigeria\", \"Nigeria\", \"234\", \".ng\", Continent.Africa),\n C(\n \"MK\",\n \"MKD\",\n 807,\n \"North Macedonia\",\n \"Nordmakedonien\",\n \"Северна Македонија\",\n \"389\",\n \".mk\",\n Continent.Europe,\n ),\n C(\"NO\", \"NOR\", 578, \"Norway\", \"Norge\", \"Norge\", \"47\", \".no\", Continent.Europe),\n C(\"OM\", \"OMN\", 512, \"Oman\", \"Oman\", \"عمان\", \"968\", \".om\", Continent.Asia),\n C(\"PK\", \"PAK\", 586, \"Pakistan\", \"Pakistan\", \"پاکستان\", \"92\", \".pk\", Continent.Asia),\n C(\"PW\", \"PLW\", 585, \"Palau\", \"Palau\", \"Palau\", \"680\", \".pw\", Continent.Oceania),\n C(\"PS\", \"PSE\", 275, \"Palestine\", \"Palestina\", \"فلسطين\", \"970\", \".ps\", Continent.Asia),\n C(\"PA\", \"PAN\", 591, \"Panama\", \"Panama\", \"Panamá\", \"507\", \".pa\", Continent.NorthAmerica),\n C(\n \"PG\",\n \"PNG\",\n 598,\n \"Papua New Guinea\",\n \"Papua Nya Guinea\",\n \"Papua Niugini\",\n \"675\",\n \".pg\",\n Continent.Oceania,\n ),\n C(\"PY\", \"PRY\", 600, \"Paraguay\", \"Paraguay\", \"Paraguay\", \"595\", \".py\", Continent.SouthAmerica),\n C(\"PE\", \"PER\", 604, \"Peru\", \"Peru\", \"Perú\", \"51\", \".pe\", Continent.SouthAmerica),\n C(\"PH\", \"PHL\", 608, \"Philippines\", \"Filippinerna\", \"Pilipinas\", \"63\", \".ph\", Continent.Asia),\n C(\"PL\", \"POL\", 616, \"Poland\", \"Polen\", \"Polska\", \"48\", \".pl\", Continent.Europe),\n C(\"PT\", \"PRT\", 620, \"Portugal\", \"Portugal\", \"Portugal\", \"351\", \".pt\", Continent.Europe),\n C(\n \"PR\",\n \"PRI\",\n 630,\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"1\",\n \".pr\",\n Continent.NorthAmerica,\n ),\n C(\"QA\", \"QAT\", 634, \"Qatar\", \"Qatar\", \"قطر\", \"974\", \".qa\", Continent.Asia),\n C(\"RO\", \"ROU\", 642, \"Romania\", \"Rumänien\", \"România\", \"40\", \".ro\", Continent.Europe),\n C(\"RU\", \"RUS\", 643, \"Russia\", \"Ryssland\", \"Россия\", \"7\", \".ru\", Continent.Europe),\n C(\"RW\", \"RWA\", 646, \"Rwanda\", \"Rwanda\", \"Rwanda\", \"250\", \".rw\", Continent.Africa),\n C(\n \"KN\",\n \"KNA\",\n 659,\n \"Saint Kitts and Nevis\",\n \"Saint Kitts och Nevis\",\n \"Saint Kitts and Nevis\",\n \"1\",\n \".kn\",\n Continent.NorthAmerica,\n ),\n C(\n \"LC\",\n \"LCA\",\n 662,\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"1\",\n \".lc\",\n Continent.NorthAmerica,\n ),\n C(\n \"VC\",\n \"VCT\",\n 670,\n \"Saint Vincent and the Grenadines\",\n \"Saint Vincent och Grenadinerna\",\n \"Saint Vincent and the Grenadines\",\n \"1\",\n \".vc\",\n Continent.NorthAmerica,\n ),\n C(\"WS\", \"WSM\", 882, \"Samoa\", \"Samoa\", \"Sāmoa\", \"685\", \".ws\", Continent.Oceania),\n C(\"SM\", \"SMR\", 674, \"San Marino\", \"San Marino\", \"San Marino\", \"378\", \".sm\", Continent.Europe),\n C(\n \"ST\",\n \"STP\",\n 678,\n \"São Tomé and Príncipe\",\n \"São Tomé och Príncipe\",\n \"São Tomé e Príncipe\",\n \"239\",\n \".st\",\n Continent.Africa,\n ),\n C(\"SA\", \"SAU\", 682, \"Saudi Arabia\", \"Saudiarabien\", \"السعودية\", \"966\", \".sa\", Continent.Asia),\n C(\"SN\", \"SEN\", 686, \"Senegal\", \"Senegal\", \"Sénégal\", \"221\", \".sn\", Continent.Africa),\n C(\"RS\", \"SRB\", 688, \"Serbia\", \"Serbien\", \"Србија\", \"381\", \".rs\", Continent.Europe),\n C(\"SC\", \"SYC\", 690, \"Seychelles\", \"Seychellerna\", \"Seychelles\", \"248\", \".sc\", Continent.Africa),\n C(\n \"SL\",\n \"SLE\",\n 694,\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"232\",\n \".sl\",\n Continent.Africa,\n ),\n C(\"SG\", \"SGP\", 702, \"Singapore\", \"Singapore\", \"Singapore\", \"65\", \".sg\", Continent.Asia),\n C(\"SK\", \"SVK\", 703, \"Slovakia\", \"Slovakien\", \"Slovensko\", \"421\", \".sk\", Continent.Europe),\n C(\"SI\", \"SVN\", 705, \"Slovenia\", \"Slovenien\", \"Slovenija\", \"386\", \".si\", Continent.Europe),\n C(\n \"SB\",\n \"SLB\",\n 90,\n \"Solomon Islands\",\n \"Salomonöarna\",\n \"Solomon Islands\",\n \"677\",\n \".sb\",\n Continent.Oceania,\n ),\n C(\"SO\", \"SOM\", 706, \"Somalia\", \"Somalia\", \"Soomaaliya\", \"252\", \".so\", Continent.Africa),\n C(\"ZA\", \"ZAF\", 710, \"South Africa\", \"Sydafrika\", \"Suid-Afrika\", \"27\", \".za\", Continent.Africa),\n C(\"SS\", \"SSD\", 728, \"South Sudan\", \"Sydsudan\", \"South Sudan\", \"211\", \".ss\", Continent.Africa),\n C(\"ES\", \"ESP\", 724, \"Spain\", \"Spanien\", \"España\", \"34\", \".es\", Continent.Europe),\n C(\"LK\", \"LKA\", 144, \"Sri Lanka\", \"Sri Lanka\", \"ශ්‍රී ලංකාව\", \"94\", \".lk\", Continent.Asia),\n C(\"SD\", \"SDN\", 729, \"Sudan\", \"Sudan\", \"السودان\", \"249\", \".sd\", Continent.Africa),\n C(\"SR\", \"SUR\", 740, \"Suriname\", \"Surinam\", \"Suriname\", \"597\", \".sr\", Continent.SouthAmerica),\n C(\"SE\", \"SWE\", 752, \"Sweden\", \"Sverige\", \"Sverige\", \"46\", \".se\", Continent.Europe),\n C(\"CH\", \"CHE\", 756, \"Switzerland\", \"Schweiz\", \"Schweiz\", \"41\", \".ch\", Continent.Europe),\n C(\"SY\", \"SYR\", 760, \"Syria\", \"Syrien\", \"سوريا\", \"963\", \".sy\", Continent.Asia),\n C(\"TW\", \"TWN\", 158, \"Taiwan\", \"Taiwan\", \"臺灣\", \"886\", \".tw\", Continent.Asia),\n C(\"TJ\", \"TJK\", 762, \"Tajikistan\", \"Tadzjikistan\", \"Тоҷикистон\", \"992\", \".tj\", Continent.Asia),\n C(\"TZ\", \"TZA\", 834, \"Tanzania\", \"Tanzania\", \"Tanzania\", \"255\", \".tz\", Continent.Africa),\n C(\"TH\", \"THA\", 764, \"Thailand\", \"Thailand\", \"ประเทศไทย\", \"66\", \".th\", Continent.Asia),\n C(\"TL\", \"TLS\", 626, \"Timor-Leste\", \"Östtimor\", \"Timor-Leste\", \"670\", \".tl\", Continent.Asia),\n C(\"TG\", \"TGO\", 768, \"Togo\", \"Togo\", \"Togo\", \"228\", \".tg\", Continent.Africa),\n C(\"TO\", \"TON\", 776, \"Tonga\", \"Tonga\", \"Tonga\", \"676\", \".to\", Continent.Oceania),\n C(\n \"TT\",\n \"TTO\",\n 780,\n \"Trinidad and Tobago\",\n \"Trinidad och Tobago\",\n \"Trinidad and Tobago\",\n \"1\",\n \".tt\",\n Continent.NorthAmerica,\n ),\n C(\"TN\", \"TUN\", 788, \"Tunisia\", \"Tunisien\", \"تونس\", \"216\", \".tn\", Continent.Africa),\n C(\"TR\", \"TUR\", 792, \"Turkey\", \"Turkiet\", \"Türkiye\", \"90\", \".tr\", Continent.Asia),\n C(\"TM\", \"TKM\", 795, \"Turkmenistan\", \"Turkmenistan\", \"Türkmenistan\", \"993\", \".tm\", Continent.Asia),\n C(\"TV\", \"TUV\", 798, \"Tuvalu\", \"Tuvalu\", \"Tuvalu\", \"688\", \".tv\", Continent.Oceania),\n C(\"UG\", \"UGA\", 800, \"Uganda\", \"Uganda\", \"Uganda\", \"256\", \".ug\", Continent.Africa),\n C(\"UA\", \"UKR\", 804, \"Ukraine\", \"Ukraina\", \"Україна\", \"380\", \".ua\", Continent.Europe),\n C(\n \"AE\",\n \"ARE\",\n 784,\n \"United Arab Emirates\",\n \"Förenade Arabemiraten\",\n \"الإمارات\",\n \"971\",\n \".ae\",\n Continent.Asia,\n ),\n C(\n \"GB\",\n \"GBR\",\n 826,\n \"United Kingdom\",\n \"Storbritannien\",\n \"United Kingdom\",\n \"44\",\n \".uk\",\n Continent.Europe,\n ),\n C(\n \"US\",\n \"USA\",\n 840,\n \"United States\",\n \"Förenta staterna\",\n \"United States\",\n \"1\",\n \".us\",\n Continent.NorthAmerica,\n ),\n C(\"UY\", \"URY\", 858, \"Uruguay\", \"Uruguay\", \"Uruguay\", \"598\", \".uy\", Continent.SouthAmerica),\n C(\"UZ\", \"UZB\", 860, \"Uzbekistan\", \"Uzbekistan\", \"Oʻzbekiston\", \"998\", \".uz\", Continent.Asia),\n C(\"VU\", \"VUT\", 548, \"Vanuatu\", \"Vanuatu\", \"Vanuatu\", \"678\", \".vu\", Continent.Oceania),\n C(\n \"VA\",\n \"VAT\",\n 336,\n \"Vatican City\",\n \"Vatikanstaten\",\n \"Città del Vaticano\",\n \"379\",\n \".va\",\n Continent.Europe,\n ),\n C(\"VE\", \"VEN\", 862, \"Venezuela\", \"Venezuela\", \"Venezuela\", \"58\", \".ve\", Continent.SouthAmerica),\n C(\"VN\", \"VNM\", 704, \"Vietnam\", \"Vietnam\", \"Việt Nam\", \"84\", \".vn\", Continent.Asia),\n C(\"YE\", \"YEM\", 887, \"Yemen\", \"Jemen\", \"اليمن\", \"967\", \".ye\", Continent.Asia),\n C(\"ZM\", \"ZMB\", 894, \"Zambia\", \"Zambia\", \"Zambia\", \"260\", \".zm\", Continent.Africa),\n C(\"ZW\", \"ZWE\", 716, \"Zimbabwe\", \"Zimbabwe\", \"Zimbabwe\", \"263\", \".zw\", Continent.Africa),\n C(\"AX\", \"ALA\", 248, \"Åland Islands\", \"Åland\", \"Åland\", \"358\", \".ax\", Continent.Europe),\n C(\"FO\", \"FRO\", 234, \"Faroe Islands\", \"Färöarna\", \"Føroyar\", \"298\", \".fo\", Continent.Europe),\n C(\"XK\", \"XKX\", 0, \"Kosovo\", \"Kosovo\", \"Kosova\", \"383\", \".xk\", Continent.Europe),\n];\n","/** Geographic coordinates (latitude, longitude) for each country, sourced from Wikidata P625. */\nexport const COUNTRY_COORDINATES: Readonly<Record<string, readonly [number, number]>> =\n Object.freeze({\n AF: [33.0, 65.0],\n AL: [41.0, 20.0],\n DZ: [28.0, 3.0],\n AS: [-14.27, -170.7],\n AD: [42.5, 1.5],\n AO: [-12.5, 18.5],\n AG: [17.05, -61.8],\n AR: [-34.0, -64.0],\n AM: [40.0, 45.0],\n AW: [12.5, -69.97],\n AU: [-27.0, 133.0],\n AT: [47.33, 13.33],\n AZ: [40.5, 47.5],\n BS: [24.25, -76.0],\n BH: [26.0, 50.55],\n BD: [24.0, 90.0],\n BB: [13.17, -59.53],\n BY: [53.0, 28.0],\n BE: [50.83, 4.0],\n BZ: [17.25, -88.75],\n BJ: [9.5, 2.25],\n BM: [32.33, -64.75],\n BT: [27.5, 90.5],\n BO: [-17.0, -65.0],\n BA: [44.0, 18.0],\n BW: [-22.0, 24.0],\n BR: [-10.0, -55.0],\n BN: [4.5, 114.67],\n BG: [43.0, 25.0],\n BF: [13.0, -2.0],\n BI: [-3.5, 30.0],\n CV: [16.0, -24.0],\n KH: [13.0, 105.0],\n CM: [6.0, 12.0],\n CA: [60.0, -95.0],\n CF: [7.0, 21.0],\n TD: [15.0, 19.0],\n CL: [-30.0, -71.0],\n CN: [35.0, 105.0],\n CO: [4.0, -72.0],\n KM: [-12.17, 44.25],\n CG: [-1.0, 15.0],\n CD: [0.0, 25.0],\n CR: [10.0, -84.0],\n CI: [8.0, -5.0],\n HR: [45.17, 15.5],\n CU: [21.5, -80.0],\n CW: [12.17, -68.98],\n CY: [35.0, 33.0],\n CZ: [49.75, 15.5],\n DK: [56.0, 10.0],\n DJ: [11.5, 43.0],\n DM: [15.42, -61.33],\n DO: [19.0, -70.67],\n EC: [-2.0, -77.5],\n EG: [27.0, 30.0],\n SV: [13.83, -88.92],\n GQ: [2.0, 10.0],\n ER: [15.0, 39.0],\n EE: [59.0, 26.0],\n SZ: [-26.5, 31.5],\n ET: [8.0, 38.0],\n FJ: [-18.0, 175.0],\n FI: [64.0, 26.0],\n FR: [46.0, 2.0],\n GA: [-1.0, 11.75],\n GM: [13.47, -16.57],\n GE: [42.0, 43.5],\n DE: [51.0, 9.0],\n GH: [8.0, -2.0],\n GI: [36.13, -5.35],\n GR: [39.0, 22.0],\n GL: [72.0, -40.0],\n GD: [12.12, -61.67],\n GU: [13.47, 144.78],\n GT: [15.5, -90.25],\n GG: [49.45, -2.54],\n GN: [11.0, -10.0],\n GW: [12.0, -15.0],\n GY: [5.0, -59.0],\n HT: [19.0, -72.42],\n HN: [15.0, -86.5],\n HK: [22.25, 114.17],\n HU: [47.0, 20.0],\n IS: [65.0, -18.0],\n IN: [20.0, 77.0],\n ID: [-5.0, 120.0],\n IR: [32.0, 53.0],\n IQ: [33.0, 44.0],\n IE: [53.0, -8.0],\n IM: [54.23, -4.55],\n IL: [31.5, 34.75],\n IT: [42.83, 12.83],\n JM: [18.25, -77.5],\n JP: [36.0, 138.0],\n JE: [49.21, -2.13],\n JO: [31.0, 36.0],\n KZ: [48.0, 68.0],\n KE: [1.0, 38.0],\n KI: [1.42, 173.0],\n KP: [40.0, 127.0],\n KR: [37.0, 127.5],\n KW: [29.34, 47.66],\n KG: [41.0, 75.0],\n LA: [18.0, 105.0],\n LV: [57.0, 25.0],\n LB: [33.83, 35.83],\n LS: [-29.5, 28.5],\n LR: [6.5, -9.5],\n LY: [25.0, 17.0],\n LI: [47.17, 9.53],\n LT: [56.0, 24.0],\n LU: [49.75, 6.17],\n MO: [22.17, 113.55],\n MG: [-20.0, 47.0],\n MW: [-13.5, 34.0],\n MY: [2.5, 112.5],\n MV: [3.25, 73.0],\n ML: [17.0, -4.0],\n MT: [35.83, 14.58],\n MH: [9.0, 168.0],\n MR: [20.0, -12.0],\n MU: [-20.28, 57.55],\n MX: [23.0, -102.0],\n FM: [6.92, 158.25],\n MD: [47.0, 29.0],\n MC: [43.73, 7.42],\n MN: [46.0, 105.0],\n ME: [42.0, 19.0],\n MA: [32.0, -5.0],\n MZ: [-18.25, 35.0],\n MM: [22.0, 98.0],\n NA: [-22.0, 17.0],\n NR: [-0.53, 166.92],\n NP: [28.0, 84.0],\n NL: [52.5, 5.75],\n NZ: [-41.0, 174.0],\n NI: [13.0, -85.0],\n NE: [16.0, 8.0],\n NG: [10.0, 8.0],\n MK: [41.83, 22.0],\n NO: [62.0, 10.0],\n OM: [21.0, 57.0],\n PK: [30.0, 70.0],\n PW: [7.5, 134.5],\n PS: [32.0, 35.25],\n PA: [9.0, -80.0],\n PG: [-6.0, 147.0],\n PY: [-23.0, -58.0],\n PE: [-10.0, -76.0],\n PH: [13.0, 122.0],\n PL: [52.0, 20.0],\n PT: [39.5, -8.0],\n PR: [18.25, -66.5],\n QA: [25.5, 51.25],\n RO: [46.0, 25.0],\n RU: [60.0, 100.0],\n RW: [-2.0, 30.0],\n KN: [17.33, -62.75],\n LC: [13.88, -61.13],\n VC: [13.25, -61.2],\n WS: [-13.58, -172.33],\n SM: [43.77, 12.42],\n ST: [1.0, 7.0],\n SA: [25.0, 45.0],\n SN: [14.0, -14.0],\n RS: [44.0, 21.0],\n SC: [-4.58, 55.67],\n SL: [8.5, -11.5],\n SG: [1.37, 103.8],\n SK: [48.67, 19.5],\n SI: [46.12, 14.82],\n SB: [-8.0, 159.0],\n SO: [10.0, 49.0],\n ZA: [-29.0, 24.0],\n SS: [8.0, 30.0],\n ES: [40.0, -4.0],\n LK: [7.0, 81.0],\n SD: [15.0, 30.0],\n SR: [4.0, -56.0],\n SE: [62.0, 15.0],\n CH: [47.0, 8.0],\n SY: [35.0, 38.0],\n TW: [23.5, 121.0],\n TJ: [39.0, 71.0],\n TZ: [-6.0, 35.0],\n TH: [15.0, 100.0],\n TL: [-8.55, 125.73],\n TG: [8.0, 1.17],\n TO: [-20.0, -175.0],\n TT: [11.0, -61.0],\n TN: [34.0, 9.0],\n TR: [39.0, 35.0],\n TM: [40.0, 60.0],\n TV: [-8.0, 178.0],\n UG: [1.0, 32.0],\n UA: [49.0, 32.0],\n AE: [24.0, 54.0],\n GB: [54.0, -2.0],\n US: [38.0, -97.0],\n UY: [-33.0, -56.0],\n UZ: [41.0, 64.0],\n VU: [-16.0, 167.0],\n VA: [41.9, 12.45],\n VE: [8.0, -66.0],\n VN: [16.0, 106.0],\n YE: [15.0, 48.0],\n ZM: [-15.0, 30.0],\n ZW: [-20.0, 30.0],\n AX: [60.12, 19.9],\n FO: [62.0, -7.0],\n XK: [42.67, 21.17],\n } as const);\n","import { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\ninterface RawCapital {\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst RAW: Readonly<Record<string, RawCapital>> = {\n AF: { en: \"Kabul\", sv: \"Kabul\", native: \"کابل\", lat: 34.53, lon: 69.17 },\n AL: { en: \"Tirana\", sv: \"Tirana\", native: \"Tiranë\", lat: 41.33, lon: 19.82 },\n DZ: { en: \"Algiers\", sv: \"Alger\", native: \"الجزائر\", lat: 36.75, lon: 3.04 },\n AD: {\n en: \"Andorra la Vella\",\n sv: \"Andorra la Vella\",\n native: \"Andorra la Vella\",\n lat: 42.51,\n lon: 1.52,\n },\n AO: { en: \"Luanda\", sv: \"Luanda\", native: \"Luanda\", lat: -8.84, lon: 13.23 },\n AG: { en: \"St. John's\", sv: \"Saint John's\", native: \"St. John's\", lat: 17.12, lon: -61.85 },\n AR: { en: \"Buenos Aires\", sv: \"Buenos Aires\", native: \"Buenos Aires\", lat: -34.61, lon: -58.38 },\n AM: { en: \"Yerevan\", sv: \"Jerevan\", native: \"Երևան\", lat: 40.18, lon: 44.51 },\n AU: { en: \"Canberra\", sv: \"Canberra\", native: \"Canberra\", lat: -35.28, lon: 149.13 },\n AT: { en: \"Vienna\", sv: \"Wien\", native: \"Wien\", lat: 48.21, lon: 16.37 },\n AZ: { en: \"Baku\", sv: \"Baku\", native: \"Bakı\", lat: 40.41, lon: 49.87 },\n BS: { en: \"Nassau\", sv: \"Nassau\", native: \"Nassau\", lat: 25.06, lon: -77.34 },\n BH: { en: \"Manama\", sv: \"Manama\", native: \"المنامة\", lat: 26.23, lon: 50.59 },\n BD: { en: \"Dhaka\", sv: \"Dhaka\", native: \"ঢাকা\", lat: 23.71, lon: 90.41 },\n BB: { en: \"Bridgetown\", sv: \"Bridgetown\", native: \"Bridgetown\", lat: 13.1, lon: -59.62 },\n BY: { en: \"Minsk\", sv: \"Minsk\", native: \"Мінск\", lat: 53.9, lon: 27.57 },\n BE: { en: \"Brussels\", sv: \"Bryssel\", native: \"Bruxelles\", lat: 50.85, lon: 4.35 },\n BZ: { en: \"Belmopan\", sv: \"Belmopan\", native: \"Belmopan\", lat: 17.25, lon: -88.77 },\n BJ: { en: \"Porto-Novo\", sv: \"Porto-Novo\", native: \"Porto-Novo\", lat: 6.5, lon: 2.6 },\n BT: { en: \"Thimphu\", sv: \"Thimphu\", native: \"ཐིམ་ཕུ\", lat: 27.47, lon: 89.64 },\n BO: { en: \"Sucre\", sv: \"Sucre\", native: \"Sucre\", lat: -19.04, lon: -65.26 },\n BA: { en: \"Sarajevo\", sv: \"Sarajevo\", native: \"Sarajevo\", lat: 43.86, lon: 18.41 },\n BW: { en: \"Gaborone\", sv: \"Gaborone\", native: \"Gaborone\", lat: -24.65, lon: 25.91 },\n BR: { en: \"Brasília\", sv: \"Brasília\", native: \"Brasília\", lat: -15.79, lon: -47.88 },\n BN: {\n en: \"Bandar Seri Begawan\",\n sv: \"Bandar Seri Begawan\",\n native: \"Bandar Seri Begawan\",\n lat: 4.94,\n lon: 114.95,\n },\n BG: { en: \"Sofia\", sv: \"Sofia\", native: \"София\", lat: 42.7, lon: 23.32 },\n BF: { en: \"Ouagadougou\", sv: \"Ouagadougou\", native: \"Ouagadougou\", lat: 12.37, lon: -1.52 },\n BI: { en: \"Gitega\", sv: \"Gitega\", native: \"Gitega\", lat: -3.43, lon: 29.93 },\n CV: { en: \"Praia\", sv: \"Praia\", native: \"Praia\", lat: 14.92, lon: -23.51 },\n KH: { en: \"Phnom Penh\", sv: \"Phnom Penh\", native: \"ភ្នំពេញ\", lat: 11.56, lon: 104.93 },\n CM: { en: \"Yaoundé\", sv: \"Yaoundé\", native: \"Yaoundé\", lat: 3.87, lon: 11.52 },\n CA: { en: \"Ottawa\", sv: \"Ottawa\", native: \"Ottawa\", lat: 45.42, lon: -75.7 },\n CF: { en: \"Bangui\", sv: \"Bangui\", native: \"Bangui\", lat: 4.37, lon: 18.59 },\n TD: { en: \"N'Djamena\", sv: \"N'Djamena\", native: \"N'Djamena\", lat: 12.11, lon: 15.05 },\n CL: { en: \"Santiago\", sv: \"Santiago\", native: \"Santiago\", lat: -33.45, lon: -70.67 },\n CN: { en: \"Beijing\", sv: \"Peking\", native: \"北京\", lat: 39.91, lon: 116.39 },\n CO: { en: \"Bogotá\", sv: \"Bogotá\", native: \"Bogotá\", lat: 4.71, lon: -74.07 },\n KM: { en: \"Moroni\", sv: \"Moroni\", native: \"Moroni\", lat: -11.7, lon: 43.26 },\n CG: { en: \"Brazzaville\", sv: \"Brazzaville\", native: \"Brazzaville\", lat: -4.27, lon: 15.28 },\n CD: { en: \"Kinshasa\", sv: \"Kinshasa\", native: \"Kinshasa\", lat: -4.32, lon: 15.31 },\n CR: { en: \"San José\", sv: \"San José\", native: \"San José\", lat: 9.93, lon: -84.08 },\n CI: { en: \"Yamoussoukro\", sv: \"Yamoussoukro\", native: \"Yamoussoukro\", lat: 6.82, lon: -5.28 },\n HR: { en: \"Zagreb\", sv: \"Zagreb\", native: \"Zagreb\", lat: 45.81, lon: 15.98 },\n CU: { en: \"Havana\", sv: \"Havanna\", native: \"La Habana\", lat: 23.13, lon: -82.38 },\n CY: { en: \"Nicosia\", sv: \"Nicosia\", native: \"Λευκωσία\", lat: 35.17, lon: 33.37 },\n CZ: { en: \"Prague\", sv: \"Prag\", native: \"Praha\", lat: 50.09, lon: 14.42 },\n DK: { en: \"Copenhagen\", sv: \"Köpenhamn\", native: \"København\", lat: 55.68, lon: 12.57 },\n DJ: { en: \"Djibouti\", sv: \"Djibouti\", native: \"Djibouti\", lat: 11.59, lon: 43.15 },\n DM: { en: \"Roseau\", sv: \"Roseau\", native: \"Roseau\", lat: 15.3, lon: -61.39 },\n DO: { en: \"Santo Domingo\", sv: \"Santo Domingo\", native: \"Santo Domingo\", lat: 18.47, lon: -69.9 },\n EC: { en: \"Quito\", sv: \"Quito\", native: \"Quito\", lat: -0.18, lon: -78.47 },\n EG: { en: \"Cairo\", sv: \"Kairo\", native: \"القاهرة\", lat: 30.04, lon: 31.24 },\n SV: { en: \"San Salvador\", sv: \"San Salvador\", native: \"San Salvador\", lat: 13.69, lon: -89.19 },\n GQ: { en: \"Malabo\", sv: \"Malabo\", native: \"Malabo\", lat: 3.75, lon: 8.78 },\n ER: { en: \"Asmara\", sv: \"Asmara\", native: \"ኣስመራ\", lat: 15.33, lon: 38.93 },\n EE: { en: \"Tallinn\", sv: \"Tallinn\", native: \"Tallinn\", lat: 59.44, lon: 24.75 },\n SZ: { en: \"Mbabane\", sv: \"Mbabane\", native: \"Mbabane\", lat: -26.32, lon: 31.13 },\n ET: { en: \"Addis Ababa\", sv: \"Addis Abeba\", native: \"አዲስ አበባ\", lat: 9.02, lon: 38.75 },\n FJ: { en: \"Suva\", sv: \"Suva\", native: \"Suva\", lat: -18.14, lon: 178.44 },\n FI: { en: \"Helsinki\", sv: \"Helsingfors\", native: \"Helsinki\", lat: 60.17, lon: 24.94 },\n FR: { en: \"Paris\", sv: \"Paris\", native: \"Paris\", lat: 48.86, lon: 2.35 },\n GA: { en: \"Libreville\", sv: \"Libreville\", native: \"Libreville\", lat: 0.39, lon: 9.45 },\n GM: { en: \"Banjul\", sv: \"Banjul\", native: \"Banjul\", lat: 13.45, lon: -16.58 },\n GE: { en: \"Tbilisi\", sv: \"Tbilisi\", native: \"თბილისი\", lat: 41.69, lon: 44.8 },\n DE: { en: \"Berlin\", sv: \"Berlin\", native: \"Berlin\", lat: 52.52, lon: 13.41 },\n GH: { en: \"Accra\", sv: \"Accra\", native: \"Accra\", lat: 5.56, lon: -0.19 },\n GR: { en: \"Athens\", sv: \"Aten\", native: \"Αθήνα\", lat: 37.98, lon: 23.73 },\n GD: { en: \"St. George's\", sv: \"Saint George's\", native: \"St. George's\", lat: 12.05, lon: -61.75 },\n GT: {\n en: \"Guatemala City\",\n sv: \"Guatemala City\",\n native: \"Ciudad de Guatemala\",\n lat: 14.63,\n lon: -90.51,\n },\n GN: { en: \"Conakry\", sv: \"Conakry\", native: \"Conakry\", lat: 9.54, lon: -13.68 },\n GW: { en: \"Bissau\", sv: \"Bissau\", native: \"Bissau\", lat: 11.86, lon: -15.6 },\n GY: { en: \"Georgetown\", sv: \"Georgetown\", native: \"Georgetown\", lat: 6.8, lon: -58.16 },\n HT: { en: \"Port-au-Prince\", sv: \"Port-au-Prince\", native: \"Pòtoprens\", lat: 18.54, lon: -72.34 },\n HN: { en: \"Tegucigalpa\", sv: \"Tegucigalpa\", native: \"Tegucigalpa\", lat: 14.1, lon: -87.22 },\n HK: { en: \"Hong Kong\", sv: \"Hongkong\", native: \"香港\", lat: 22.28, lon: 114.16 },\n HU: { en: \"Budapest\", sv: \"Budapest\", native: \"Budapest\", lat: 47.5, lon: 19.04 },\n IS: { en: \"Reykjavik\", sv: \"Reykjavik\", native: \"Reykjavík\", lat: 64.14, lon: -21.9 },\n IN: { en: \"New Delhi\", sv: \"New Delhi\", native: \"नई दिल्ली\", lat: 28.61, lon: 77.21 },\n ID: { en: \"Jakarta\", sv: \"Jakarta\", native: \"Jakarta\", lat: -6.21, lon: 106.85 },\n IR: { en: \"Tehran\", sv: \"Teheran\", native: \"تهران\", lat: 35.69, lon: 51.39 },\n IQ: { en: \"Baghdad\", sv: \"Bagdad\", native: \"بغداد\", lat: 33.34, lon: 44.4 },\n IE: { en: \"Dublin\", sv: \"Dublin\", native: \"Baile Átha Cliath\", lat: 53.35, lon: -6.26 },\n IL: { en: \"Jerusalem\", sv: \"Jerusalem\", native: \"ירושלים\", lat: 31.77, lon: 35.23 },\n IT: { en: \"Rome\", sv: \"Rom\", native: \"Roma\", lat: 41.9, lon: 12.5 },\n JM: { en: \"Kingston\", sv: \"Kingston\", native: \"Kingston\", lat: 18.0, lon: -76.79 },\n JP: { en: \"Tokyo\", sv: \"Tokyo\", native: \"東京\", lat: 35.68, lon: 139.69 },\n JO: { en: \"Amman\", sv: \"Amman\", native: \"عمّان\", lat: 31.95, lon: 35.93 },\n KZ: { en: \"Astana\", sv: \"Astana\", native: \"Астана\", lat: 51.17, lon: 71.43 },\n KE: { en: \"Nairobi\", sv: \"Nairobi\", native: \"Nairobi\", lat: -1.29, lon: 36.82 },\n KI: { en: \"Tarawa\", sv: \"Tarawa\", native: \"Tarawa\", lat: 1.45, lon: 173.0 },\n KP: { en: \"Pyongyang\", sv: \"Pyongyang\", native: \"평양\", lat: 39.02, lon: 125.75 },\n KR: { en: \"Seoul\", sv: \"Seoul\", native: \"서울\", lat: 37.57, lon: 126.98 },\n KW: { en: \"Kuwait City\", sv: \"Kuwait City\", native: \"مدينة الكويت\", lat: 29.37, lon: 47.98 },\n KG: { en: \"Bishkek\", sv: \"Bisjkek\", native: \"Бишкек\", lat: 42.87, lon: 74.59 },\n LA: { en: \"Vientiane\", sv: \"Vientiane\", native: \"ວຽງຈັນ\", lat: 17.97, lon: 102.63 },\n LV: { en: \"Riga\", sv: \"Riga\", native: \"Rīga\", lat: 56.95, lon: 24.11 },\n LB: { en: \"Beirut\", sv: \"Beirut\", native: \"بيروت\", lat: 33.89, lon: 35.5 },\n LS: { en: \"Maseru\", sv: \"Maseru\", native: \"Maseru\", lat: -29.31, lon: 27.48 },\n LR: { en: \"Monrovia\", sv: \"Monrovia\", native: \"Monrovia\", lat: 6.3, lon: -10.8 },\n LY: { en: \"Tripoli\", sv: \"Tripoli\", native: \"طرابلس\", lat: 32.9, lon: 13.18 },\n LI: { en: \"Vaduz\", sv: \"Vaduz\", native: \"Vaduz\", lat: 47.14, lon: 9.52 },\n LT: { en: \"Vilnius\", sv: \"Vilnius\", native: \"Vilnius\", lat: 54.69, lon: 25.28 },\n LU: { en: \"Luxembourg City\", sv: \"Luxemburg\", native: \"Lëtzebuerg\", lat: 49.61, lon: 6.13 },\n MO: { en: \"Macao\", sv: \"Macao\", native: \"澳門\", lat: 22.2, lon: 113.54 },\n MG: { en: \"Antananarivo\", sv: \"Antananarivo\", native: \"Antananarivo\", lat: -18.91, lon: 47.53 },\n MW: { en: \"Lilongwe\", sv: \"Lilongwe\", native: \"Lilongwe\", lat: -13.97, lon: 33.79 },\n MY: { en: \"Kuala Lumpur\", sv: \"Kuala Lumpur\", native: \"Kuala Lumpur\", lat: 3.14, lon: 101.69 },\n MV: { en: \"Malé\", sv: \"Malé\", native: \"މާލެ\", lat: 4.18, lon: 73.51 },\n ML: { en: \"Bamako\", sv: \"Bamako\", native: \"Bamako\", lat: 12.65, lon: -8.0 },\n MT: { en: \"Valletta\", sv: \"Valletta\", native: \"Valletta\", lat: 35.9, lon: 14.51 },\n MH: { en: \"Majuro\", sv: \"Majuro\", native: \"Majuro\", lat: 7.09, lon: 171.38 },\n MR: { en: \"Nouakchott\", sv: \"Nouakchott\", native: \"نواكشوط\", lat: 18.09, lon: -15.98 },\n MU: { en: \"Port Louis\", sv: \"Port Louis\", native: \"Port Louis\", lat: -20.16, lon: 57.5 },\n MX: { en: \"Mexico City\", sv: \"Mexico City\", native: \"Ciudad de México\", lat: 19.43, lon: -99.13 },\n FM: { en: \"Palikir\", sv: \"Palikir\", native: \"Palikir\", lat: 6.92, lon: 158.16 },\n MD: { en: \"Chișinău\", sv: \"Chișinău\", native: \"Chișinău\", lat: 47.01, lon: 28.86 },\n MC: { en: \"Monaco\", sv: \"Monaco\", native: \"Monaco\", lat: 43.73, lon: 7.42 },\n MN: { en: \"Ulaanbaatar\", sv: \"Ulaanbaatar\", native: \"Улаанбаатар\", lat: 47.91, lon: 106.91 },\n ME: { en: \"Podgorica\", sv: \"Podgorica\", native: \"Podgorica\", lat: 42.44, lon: 19.26 },\n MA: { en: \"Rabat\", sv: \"Rabat\", native: \"الرباط\", lat: 34.01, lon: -6.84 },\n MZ: { en: \"Maputo\", sv: \"Maputo\", native: \"Maputo\", lat: -25.97, lon: 32.57 },\n MM: { en: \"Naypyidaw\", sv: \"Naypyidaw\", native: \"နေပြည်တော်\", lat: 19.76, lon: 96.07 },\n NA: { en: \"Windhoek\", sv: \"Windhoek\", native: \"Windhoek\", lat: -22.57, lon: 17.08 },\n NR: { en: \"Yaren\", sv: \"Yaren\", native: \"Yaren\", lat: -0.55, lon: 166.93 },\n NP: { en: \"Kathmandu\", sv: \"Kathmandu\", native: \"काठमाडौं\", lat: 27.7, lon: 85.32 },\n NL: { en: \"Amsterdam\", sv: \"Amsterdam\", native: \"Amsterdam\", lat: 52.37, lon: 4.9 },\n NZ: { en: \"Wellington\", sv: \"Wellington\", native: \"Wellington\", lat: -41.29, lon: 174.78 },\n NI: { en: \"Managua\", sv: \"Managua\", native: \"Managua\", lat: 12.15, lon: -86.27 },\n NE: { en: \"Niamey\", sv: \"Niamey\", native: \"Niamey\", lat: 13.51, lon: 2.11 },\n NG: { en: \"Abuja\", sv: \"Abuja\", native: \"Abuja\", lat: 9.06, lon: 7.49 },\n MK: { en: \"Skopje\", sv: \"Skopje\", native: \"Скопје\", lat: 42.0, lon: 21.43 },\n NO: { en: \"Oslo\", sv: \"Oslo\", native: \"Oslo\", lat: 59.91, lon: 10.75 },\n OM: { en: \"Muscat\", sv: \"Muskat\", native: \"مسقط\", lat: 23.59, lon: 58.54 },\n PK: { en: \"Islamabad\", sv: \"Islamabad\", native: \"اسلام آباد\", lat: 33.69, lon: 73.04 },\n PW: { en: \"Ngerulmud\", sv: \"Ngerulmud\", native: \"Ngerulmud\", lat: 7.5, lon: 134.62 },\n PS: { en: \"Ramallah\", sv: \"Ramallah\", native: \"رام الله\", lat: 31.9, lon: 35.2 },\n PA: { en: \"Panama City\", sv: \"Panama City\", native: \"Ciudad de Panamá\", lat: 8.98, lon: -79.52 },\n PG: { en: \"Port Moresby\", sv: \"Port Moresby\", native: \"Port Moresby\", lat: -9.48, lon: 147.15 },\n PY: { en: \"Asunción\", sv: \"Asunción\", native: \"Asunción\", lat: -25.26, lon: -57.58 },\n PE: { en: \"Lima\", sv: \"Lima\", native: \"Lima\", lat: -12.05, lon: -77.04 },\n PH: { en: \"Manila\", sv: \"Manila\", native: \"Maynila\", lat: 14.6, lon: 120.98 },\n PL: { en: \"Warsaw\", sv: \"Warszawa\", native: \"Warszawa\", lat: 52.23, lon: 21.01 },\n PT: { en: \"Lisbon\", sv: \"Lissabon\", native: \"Lisboa\", lat: 38.72, lon: -9.14 },\n PR: { en: \"San Juan\", sv: \"San Juan\", native: \"San Juan\", lat: 18.47, lon: -66.11 },\n QA: { en: \"Doha\", sv: \"Doha\", native: \"الدوحة\", lat: 25.29, lon: 51.53 },\n RO: { en: \"Bucharest\", sv: \"Bukarest\", native: \"București\", lat: 44.43, lon: 26.1 },\n RU: { en: \"Moscow\", sv: \"Moskva\", native: \"Москва\", lat: 55.76, lon: 37.62 },\n RW: { en: \"Kigali\", sv: \"Kigali\", native: \"Kigali\", lat: -1.94, lon: 30.06 },\n KN: { en: \"Basseterre\", sv: \"Basseterre\", native: \"Basseterre\", lat: 17.3, lon: -62.72 },\n LC: { en: \"Castries\", sv: \"Castries\", native: \"Castries\", lat: 14.01, lon: -61.0 },\n VC: { en: \"Kingstown\", sv: \"Kingstown\", native: \"Kingstown\", lat: 13.15, lon: -61.22 },\n WS: { en: \"Apia\", sv: \"Apia\", native: \"Apia\", lat: -13.83, lon: -171.76 },\n SM: { en: \"San Marino\", sv: \"San Marino\", native: \"San Marino\", lat: 43.94, lon: 12.45 },\n ST: { en: \"São Tomé\", sv: \"São Tomé\", native: \"São Tomé\", lat: 0.34, lon: 6.73 },\n SA: { en: \"Riyadh\", sv: \"Riyadh\", native: \"الرياض\", lat: 24.69, lon: 46.72 },\n SN: { en: \"Dakar\", sv: \"Dakar\", native: \"Dakar\", lat: 14.69, lon: -17.44 },\n RS: { en: \"Belgrade\", sv: \"Belgrad\", native: \"Београд\", lat: 44.82, lon: 20.46 },\n SC: { en: \"Victoria\", sv: \"Victoria\", native: \"Victoria\", lat: -4.62, lon: 55.45 },\n SL: { en: \"Freetown\", sv: \"Freetown\", native: \"Freetown\", lat: 8.48, lon: -13.23 },\n SG: { en: \"Singapore\", sv: \"Singapore\", native: \"Singapore\", lat: 1.29, lon: 103.85 },\n SK: { en: \"Bratislava\", sv: \"Bratislava\", native: \"Bratislava\", lat: 48.14, lon: 17.11 },\n SI: { en: \"Ljubljana\", sv: \"Ljubljana\", native: \"Ljubljana\", lat: 46.05, lon: 14.51 },\n SB: { en: \"Honiara\", sv: \"Honiara\", native: \"Honiara\", lat: -9.43, lon: 159.96 },\n SO: { en: \"Mogadishu\", sv: \"Mogadishu\", native: \"Muqdisho\", lat: 2.05, lon: 45.32 },\n ZA: { en: \"Pretoria\", sv: \"Pretoria\", native: \"Pretoria\", lat: -25.75, lon: 28.19 },\n SS: { en: \"Juba\", sv: \"Juba\", native: \"Juba\", lat: 4.85, lon: 31.58 },\n ES: { en: \"Madrid\", sv: \"Madrid\", native: \"Madrid\", lat: 40.42, lon: -3.7 },\n LK: {\n en: \"Sri Jayawardenepura Kotte\",\n sv: \"Sri Jayawardenepura Kotte\",\n native: \"ශ්‍රී ජයවර්ධනපුර කෝට්ටේ\",\n lat: 6.89,\n lon: 79.92,\n },\n SD: { en: \"Khartoum\", sv: \"Khartoum\", native: \"الخرطوم\", lat: 15.59, lon: 32.53 },\n SR: { en: \"Paramaribo\", sv: \"Paramaribo\", native: \"Paramaribo\", lat: 5.83, lon: -55.17 },\n SE: { en: \"Stockholm\", sv: \"Stockholm\", native: \"Stockholm\", lat: 59.33, lon: 18.07 },\n CH: { en: \"Bern\", sv: \"Bern\", native: \"Bern\", lat: 46.95, lon: 7.45 },\n SY: { en: \"Damascus\", sv: \"Damaskus\", native: \"دمشق\", lat: 33.51, lon: 36.29 },\n TW: { en: \"Taipei\", sv: \"Taipei\", native: \"臺北\", lat: 25.03, lon: 121.57 },\n TJ: { en: \"Dushanbe\", sv: \"Dusjanbe\", native: \"Душанбе\", lat: 38.56, lon: 68.77 },\n TZ: { en: \"Dodoma\", sv: \"Dodoma\", native: \"Dodoma\", lat: -6.16, lon: 35.75 },\n TH: { en: \"Bangkok\", sv: \"Bangkok\", native: \"กรุงเทพมหานคร\", lat: 13.76, lon: 100.5 },\n TL: { en: \"Dili\", sv: \"Dili\", native: \"Dili\", lat: -8.56, lon: 125.57 },\n TG: { en: \"Lomé\", sv: \"Lomé\", native: \"Lomé\", lat: 6.14, lon: 1.21 },\n TO: { en: \"Nukuʻalofa\", sv: \"Nukuʻalofa\", native: \"Nukuʻalofa\", lat: -21.21, lon: -175.2 },\n TT: {\n en: \"Port of Spain\",\n sv: \"Port of Spain\",\n native: \"Port of Spain\",\n lat: 10.66,\n lon: -61.51,\n },\n TN: { en: \"Tunis\", sv: \"Tunis\", native: \"تونس\", lat: 36.81, lon: 10.17 },\n TR: { en: \"Ankara\", sv: \"Ankara\", native: \"Ankara\", lat: 39.93, lon: 32.86 },\n TM: { en: \"Ashgabat\", sv: \"Asjchabad\", native: \"Aşgabat\", lat: 37.95, lon: 58.38 },\n TV: { en: \"Funafuti\", sv: \"Funafuti\", native: \"Funafuti\", lat: -8.52, lon: 179.2 },\n UG: { en: \"Kampala\", sv: \"Kampala\", native: \"Kampala\", lat: 0.31, lon: 32.58 },\n UA: { en: \"Kyiv\", sv: \"Kiev\", native: \"Київ\", lat: 50.45, lon: 30.52 },\n AE: { en: \"Abu Dhabi\", sv: \"Abu Dhabi\", native: \"أبو ظبي\", lat: 24.45, lon: 54.65 },\n GB: { en: \"London\", sv: \"London\", native: \"London\", lat: 51.51, lon: -0.13 },\n US: {\n en: \"Washington, D.C.\",\n sv: \"Washington, D.C.\",\n native: \"Washington, D.C.\",\n lat: 38.9,\n lon: -77.04,\n },\n UY: { en: \"Montevideo\", sv: \"Montevideo\", native: \"Montevideo\", lat: -34.88, lon: -56.19 },\n UZ: { en: \"Tashkent\", sv: \"Tasjkent\", native: \"Toshkent\", lat: 41.3, lon: 69.28 },\n VU: { en: \"Port Vila\", sv: \"Port Vila\", native: \"Port Vila\", lat: -17.74, lon: 168.31 },\n VA: {\n en: \"Vatican City\",\n sv: \"Vatikanstaden\",\n native: \"Città del Vaticano\",\n lat: 41.9,\n lon: 12.45,\n },\n VE: { en: \"Caracas\", sv: \"Caracas\", native: \"Caracas\", lat: 10.49, lon: -66.9 },\n VN: { en: \"Hanoi\", sv: \"Hanoi\", native: \"Hà Nội\", lat: 21.03, lon: 105.85 },\n YE: { en: \"Sana'a\", sv: \"Sana'a\", native: \"صنعاء\", lat: 15.35, lon: 44.21 },\n ZM: { en: \"Lusaka\", sv: \"Lusaka\", native: \"Lusaka\", lat: -15.39, lon: 28.32 },\n ZW: { en: \"Harare\", sv: \"Harare\", native: \"Harare\", lat: -17.83, lon: 31.05 },\n AX: { en: \"Mariehamn\", sv: \"Mariehamn\", native: \"Mariehamn\", lat: 60.1, lon: 19.94 },\n FO: { en: \"Tórshavn\", sv: \"Torshamn\", native: \"Tórshavn\", lat: 62.01, lon: -6.77 },\n XK: { en: \"Pristina\", sv: \"Pristina\", native: \"Prishtinë\", lat: 42.66, lon: 21.17 },\n GI: { en: \"Gibraltar\", sv: \"Gibraltar\", native: \"Gibraltar\", lat: 36.14, lon: -5.35 },\n GL: { en: \"Nuuk\", sv: \"Nuuk\", native: \"Nuuk\", lat: 64.17, lon: -51.74 },\n GG: {\n en: \"St. Peter Port\",\n sv: \"Saint Peter Port\",\n native: \"St. Peter Port\",\n lat: 49.46,\n lon: -2.54,\n },\n IM: { en: \"Douglas\", sv: \"Douglas\", native: \"Douglas\", lat: 54.15, lon: -4.48 },\n JE: { en: \"St. Helier\", sv: \"Saint Helier\", native: \"St. Helier\", lat: 49.19, lon: -2.1 },\n};\n\n/** Returns the {@link CountryCapital} for the given alpha-2 code, or `null` if unknown. */\nexport function getCountryCapital(alpha2: string): CountryCapital | null {\n const r = RAW[alpha2];\n if (!r) return null;\n return new CountryCapital(r.en, r.sv, r.native, GeoCoordinate.create(r.lat, r.lon));\n}\n","/** EU/EEA/Schengen/Nordic/SEPA membership and currency overrides. */\n\nconst set = (codes: readonly string[]): ReadonlySet<string> => {\n const s = new Set<string>();\n for (const c of codes) s.add(c.toUpperCase());\n return s;\n};\n\nexport const EU_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n]);\n\nexport const EEA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n]);\n\nexport const SCHENGEN_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"CH\",\n]);\n\nexport const NORDIC_COUNTRIES: ReadonlySet<string> = set([\"DK\", \"FI\", \"IS\", \"NO\", \"SE\"]);\n\nexport const SEPA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"AL\",\n \"AD\",\n \"MD\",\n \"MC\",\n \"ME\",\n \"MK\",\n \"SM\",\n \"RS\",\n \"CH\",\n \"GB\",\n \"VA\",\n \"GG\",\n \"IM\",\n \"JE\",\n]);\n\n/** ISO 4217 currency codes per ISO 3166 country, with overrides for territories. */\nexport const COUNTRY_CURRENCIES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"AFN\"],\n AL: [\"ALL\"],\n DZ: [\"DZD\"],\n AS: [\"USD\"],\n AD: [\"EUR\"],\n AO: [\"AOA\"],\n AG: [\"XCD\"],\n AR: [\"ARS\"],\n AM: [\"AMD\"],\n AW: [\"AWG\"],\n AU: [\"AUD\"],\n AT: [\"EUR\"],\n AZ: [\"AZN\"],\n BS: [\"BSD\"],\n BH: [\"BHD\"],\n BD: [\"BDT\"],\n BB: [\"BBD\"],\n BY: [\"BYN\"],\n BE: [\"EUR\"],\n BZ: [\"BZD\"],\n BJ: [\"XOF\"],\n BM: [\"BMD\"],\n BT: [\"BTN\"],\n BO: [\"BOB\"],\n BA: [\"BAM\"],\n BW: [\"BWP\"],\n BR: [\"BRL\"],\n BN: [\"BND\"],\n BG: [\"BGN\"],\n BF: [\"XOF\"],\n BI: [\"BIF\"],\n CV: [\"CVE\"],\n KH: [\"KHR\"],\n CM: [\"XAF\"],\n CA: [\"CAD\"],\n CF: [\"XAF\"],\n TD: [\"XAF\"],\n CL: [\"CLP\"],\n CN: [\"CNY\"],\n CO: [\"COP\"],\n KM: [\"KMF\"],\n CG: [\"XAF\"],\n CD: [\"CDF\"],\n CR: [\"CRC\"],\n CI: [\"XOF\"],\n HR: [\"EUR\"],\n CU: [\"CUP\"],\n CW: [\"ANG\"],\n CY: [\"EUR\"],\n CZ: [\"CZK\"],\n DK: [\"DKK\"],\n DJ: [\"DJF\"],\n DM: [\"XCD\"],\n DO: [\"DOP\"],\n EC: [\"USD\"],\n EG: [\"EGP\"],\n SV: [\"USD\"],\n GQ: [\"XAF\"],\n ER: [\"ERN\"],\n EE: [\"EUR\"],\n SZ: [\"SZL\"],\n ET: [\"ETB\"],\n FJ: [\"FJD\"],\n FI: [\"EUR\"],\n FR: [\"EUR\"],\n GA: [\"XAF\"],\n GM: [\"GMD\"],\n GE: [\"GEL\"],\n DE: [\"EUR\"],\n GH: [\"GHS\"],\n GI: [\"GIP\"],\n GR: [\"EUR\"],\n GL: [\"DKK\"],\n GD: [\"XCD\"],\n GU: [\"USD\"],\n GT: [\"GTQ\"],\n GG: [\"GBP\"],\n GN: [\"GNF\"],\n GW: [\"XOF\"],\n GY: [\"GYD\"],\n HT: [\"HTG\"],\n HN: [\"HNL\"],\n HK: [\"HKD\"],\n HU: [\"HUF\"],\n IS: [\"ISK\"],\n IN: [\"INR\"],\n ID: [\"IDR\"],\n IR: [\"IRR\"],\n IQ: [\"IQD\"],\n IE: [\"EUR\"],\n IM: [\"GBP\"],\n IL: [\"ILS\"],\n IT: [\"EUR\"],\n JM: [\"JMD\"],\n JP: [\"JPY\"],\n JE: [\"GBP\"],\n JO: [\"JOD\"],\n KZ: [\"KZT\"],\n KE: [\"KES\"],\n KI: [\"AUD\"],\n KP: [\"KPW\"],\n KR: [\"KRW\"],\n KW: [\"KWD\"],\n KG: [\"KGS\"],\n LA: [\"LAK\"],\n LV: [\"EUR\"],\n LB: [\"LBP\"],\n LS: [\"LSL\"],\n LR: [\"LRD\"],\n LY: [\"LYD\"],\n LI: [\"CHF\"],\n LT: [\"EUR\"],\n LU: [\"EUR\"],\n MO: [\"MOP\"],\n MG: [\"MGA\"],\n MW: [\"MWK\"],\n MY: [\"MYR\"],\n MV: [\"MVR\"],\n ML: [\"XOF\"],\n MT: [\"EUR\"],\n MH: [\"USD\"],\n MR: [\"MRU\"],\n MU: [\"MUR\"],\n MX: [\"MXN\"],\n FM: [\"USD\"],\n MD: [\"MDL\"],\n MC: [\"EUR\"],\n MN: [\"MNT\"],\n ME: [\"EUR\"],\n MA: [\"MAD\"],\n MZ: [\"MZN\"],\n MM: [\"MMK\"],\n NA: [\"NAD\"],\n NR: [\"AUD\"],\n NP: [\"NPR\"],\n NL: [\"EUR\"],\n NZ: [\"NZD\"],\n NI: [\"NIO\"],\n NE: [\"XOF\"],\n NG: [\"NGN\"],\n MK: [\"MKD\"],\n NO: [\"NOK\"],\n OM: [\"OMR\"],\n PK: [\"PKR\"],\n PW: [\"USD\"],\n PS: [\"ILS\"],\n PA: [\"PAB\"],\n PG: [\"PGK\"],\n PY: [\"PYG\"],\n PE: [\"PEN\"],\n PH: [\"PHP\"],\n PL: [\"PLN\"],\n PT: [\"EUR\"],\n PR: [\"USD\"],\n QA: [\"QAR\"],\n RO: [\"RON\"],\n RU: [\"RUB\"],\n RW: [\"RWF\"],\n KN: [\"XCD\"],\n LC: [\"XCD\"],\n VC: [\"XCD\"],\n WS: [\"WST\"],\n SM: [\"EUR\"],\n ST: [\"STN\"],\n SA: [\"SAR\"],\n SN: [\"XOF\"],\n RS: [\"RSD\"],\n SC: [\"SCR\"],\n SL: [\"SLE\"],\n SG: [\"SGD\"],\n SK: [\"EUR\"],\n SI: [\"EUR\"],\n SB: [\"SBD\"],\n SO: [\"SOS\"],\n ZA: [\"ZAR\"],\n SS: [\"SSP\"],\n ES: [\"EUR\"],\n LK: [\"LKR\"],\n SD: [\"SDG\"],\n SR: [\"SRD\"],\n SE: [\"SEK\"],\n CH: [\"CHF\"],\n SY: [\"SYP\"],\n TW: [\"TWD\"],\n TJ: [\"TJS\"],\n TZ: [\"TZS\"],\n TH: [\"THB\"],\n TL: [\"USD\"],\n TG: [\"XOF\"],\n TO: [\"TOP\"],\n TT: [\"TTD\"],\n TN: [\"TND\"],\n TR: [\"TRY\"],\n TM: [\"TMT\"],\n TV: [\"AUD\"],\n UG: [\"UGX\"],\n UA: [\"UAH\"],\n AE: [\"AED\"],\n GB: [\"GBP\"],\n US: [\"USD\"],\n UY: [\"UYU\"],\n UZ: [\"UZS\"],\n VU: [\"VUV\"],\n VA: [\"EUR\"],\n VE: [\"VES\"],\n VN: [\"VND\"],\n YE: [\"YER\"],\n ZM: [\"ZMW\"],\n ZW: [\"ZWG\"],\n AX: [\"EUR\"],\n FO: [\"DKK\"],\n XK: [\"EUR\"],\n} as const);\n\n/** ISO 639-1 official language codes per country. */\nexport const COUNTRY_LANGUAGES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"ps\", \"fa\"],\n AL: [\"sq\"],\n DZ: [\"ar\"],\n AD: [\"ca\"],\n AO: [\"pt\"],\n AG: [\"en\"],\n AR: [\"es\"],\n AM: [\"hy\"],\n AU: [\"en\"],\n AT: [\"de\"],\n AZ: [\"az\"],\n BS: [\"en\"],\n BH: [\"ar\"],\n BD: [\"bn\"],\n BB: [\"en\"],\n BY: [\"be\", \"ru\"],\n BE: [\"nl\", \"fr\", \"de\"],\n BZ: [\"en\"],\n BJ: [\"fr\"],\n BT: [\"dz\"],\n BO: [\"es\", \"qu\", \"ay\"],\n BA: [\"bs\", \"hr\", \"sr\"],\n BW: [\"en\", \"tn\"],\n BR: [\"pt\"],\n BN: [\"ms\"],\n BG: [\"bg\"],\n BF: [\"fr\"],\n BI: [\"rn\", \"fr\"],\n CV: [\"pt\"],\n KH: [\"km\"],\n CM: [\"fr\", \"en\"],\n CA: [\"en\", \"fr\"],\n CF: [\"fr\", \"sg\"],\n TD: [\"fr\", \"ar\"],\n CL: [\"es\"],\n CN: [\"zh\"],\n CO: [\"es\"],\n KM: [\"ar\", \"fr\"],\n CG: [\"fr\"],\n CD: [\"fr\"],\n CR: [\"es\"],\n CI: [\"fr\"],\n HR: [\"hr\"],\n CU: [\"es\"],\n CY: [\"el\", \"tr\"],\n CZ: [\"cs\"],\n DK: [\"da\"],\n DJ: [\"fr\", \"ar\"],\n DM: [\"en\"],\n DO: [\"es\"],\n EC: [\"es\"],\n EG: [\"ar\"],\n SV: [\"es\"],\n GQ: [\"es\", \"fr\", \"pt\"],\n ER: [\"ti\", \"ar\", \"en\"],\n EE: [\"et\"],\n SZ: [\"en\", \"ss\"],\n ET: [\"am\"],\n FJ: [\"en\", \"fj\"],\n FI: [\"fi\", \"sv\"],\n FR: [\"fr\"],\n GA: [\"fr\"],\n GM: [\"en\"],\n GE: [\"ka\"],\n DE: [\"de\"],\n GH: [\"en\"],\n GR: [\"el\"],\n GD: [\"en\"],\n GT: [\"es\"],\n GN: [\"fr\"],\n GW: [\"pt\"],\n GY: [\"en\"],\n HT: [\"ht\", \"fr\"],\n HN: [\"es\"],\n HU: [\"hu\"],\n IS: [\"is\"],\n IN: [\"hi\", \"en\"],\n ID: [\"id\"],\n IR: [\"fa\"],\n IQ: [\"ar\", \"ku\"],\n IE: [\"en\", \"ga\"],\n IL: [\"he\", \"ar\"],\n IT: [\"it\"],\n JM: [\"en\"],\n JP: [\"ja\"],\n JO: [\"ar\"],\n KZ: [\"kk\", \"ru\"],\n KE: [\"en\", \"sw\"],\n KI: [\"en\"],\n KP: [\"ko\"],\n KR: [\"ko\"],\n KW: [\"ar\"],\n KG: [\"ky\", \"ru\"],\n LA: [\"lo\"],\n LV: [\"lv\"],\n LB: [\"ar\", \"fr\"],\n LS: [\"en\", \"st\"],\n LR: [\"en\"],\n LY: [\"ar\"],\n LI: [\"de\"],\n LT: [\"lt\"],\n LU: [\"lb\", \"fr\", \"de\"],\n MG: [\"mg\", \"fr\"],\n MW: [\"en\", \"ny\"],\n MY: [\"ms\"],\n MV: [\"dv\"],\n ML: [\"fr\"],\n MT: [\"mt\", \"en\"],\n MH: [\"en\", \"mh\"],\n MR: [\"ar\"],\n MU: [\"en\"],\n MX: [\"es\"],\n MD: [\"ro\"],\n MC: [\"fr\"],\n MN: [\"mn\"],\n ME: [\"sr\"],\n MA: [\"ar\"],\n MZ: [\"pt\"],\n MM: [\"my\"],\n NA: [\"en\"],\n NR: [\"en\", \"na\"],\n NP: [\"ne\"],\n NL: [\"nl\"],\n NZ: [\"en\", \"mi\"],\n NI: [\"es\"],\n NE: [\"fr\"],\n NG: [\"en\"],\n MK: [\"mk\"],\n NO: [\"no\", \"nb\", \"nn\"],\n OM: [\"ar\"],\n PK: [\"ur\", \"en\"],\n PW: [\"en\"],\n PA: [\"es\"],\n PG: [\"en\"],\n PY: [\"es\", \"gn\"],\n PE: [\"es\", \"qu\"],\n PH: [\"tl\", \"en\"],\n PL: [\"pl\"],\n PT: [\"pt\"],\n QA: [\"ar\"],\n RO: [\"ro\"],\n RU: [\"ru\"],\n RW: [\"rw\", \"fr\", \"en\"],\n KN: [\"en\"],\n LC: [\"en\"],\n VC: [\"en\"],\n WS: [\"sm\", \"en\"],\n SM: [\"it\"],\n ST: [\"pt\"],\n SA: [\"ar\"],\n SN: [\"fr\"],\n RS: [\"sr\"],\n SC: [\"en\", \"fr\"],\n SL: [\"en\"],\n SG: [\"en\", \"ms\", \"zh\", \"ta\"],\n SK: [\"sk\"],\n SI: [\"sl\"],\n SB: [\"en\"],\n SO: [\"so\", \"ar\"],\n ZA: [\"en\", \"af\", \"zu\"],\n SS: [\"en\"],\n ES: [\"es\"],\n LK: [\"si\", \"ta\"],\n SD: [\"ar\", \"en\"],\n SR: [\"nl\"],\n SE: [\"sv\"],\n CH: [\"de\", \"fr\", \"it\", \"rm\"],\n SY: [\"ar\"],\n TW: [\"zh\"],\n TJ: [\"tg\"],\n TZ: [\"sw\", \"en\"],\n TH: [\"th\"],\n TL: [\"pt\"],\n TG: [\"fr\"],\n TO: [\"en\", \"to\"],\n TT: [\"en\"],\n TN: [\"ar\"],\n TR: [\"tr\"],\n TM: [\"tk\"],\n TV: [\"en\"],\n UG: [\"en\", \"sw\"],\n UA: [\"uk\"],\n AE: [\"ar\"],\n GB: [\"en\"],\n US: [\"en\"],\n UY: [\"es\"],\n UZ: [\"uz\"],\n VU: [\"en\", \"fr\", \"bi\"],\n VA: [\"it\", \"la\"],\n VE: [\"es\"],\n VN: [\"vi\"],\n YE: [\"ar\"],\n ZM: [\"en\"],\n ZW: [\"en\", \"sn\", \"nd\"],\n AS: [\"en\", \"sm\"],\n AW: [\"nl\"],\n BM: [\"en\"],\n CW: [\"nl\"],\n FO: [\"fo\", \"da\"],\n GI: [\"en\"],\n GL: [\"kl\", \"da\"],\n GG: [\"en\"],\n GU: [\"en\"],\n HK: [\"zh\", \"en\"],\n IM: [\"en\"],\n JE: [\"en\"],\n XK: [\"sq\", \"sr\"],\n MO: [\"zh\", \"pt\"],\n PR: [\"es\", \"en\"],\n} as const);\n\n/** Aliases for Country.tryParse — common alternative names not in the canonical list. */\nexport const COUNTRY_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n USA: \"US\",\n UK: \"GB\",\n Holland: \"NL\",\n \"Czech Republic\": \"CZ\",\n \"Ivory Coast\": \"CI\",\n Burma: \"MM\",\n Swaziland: \"SZ\",\n Persia: \"IR\",\n \"Great Britain\": \"GB\",\n England: \"GB\",\n UAE: \"AE\",\n \"South Korea\": \"KR\",\n \"North Korea\": \"KP\",\n \"Republic of Ireland\": \"IE\",\n Suisse: \"CH\",\n Svizzera: \"CH\",\n Belgique: \"BE\",\n Noreg: \"NO\",\n Vitryssland: \"BY\",\n});\n\n/**\n * Country alpha-2 codes that own each shared phone calling code (`+1` is shared\n * by US, Canada, Caribbean countries; `+44` by UK, Guernsey, Isle of Man,\n * Jersey; `+7` by Russia and Kazakhstan). The first entry is the primary.\n */\nexport const PRIMARY_BY_CALLING_CODE: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"44\": \"GB\",\n \"7\": \"RU\",\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Currency } from \"../finance/currency.js\";\nimport { Continent } from \"./continent.js\";\nimport { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { Language } from \"./language.js\";\nimport { COUNTRY_ROWS, type CountryRow } from \"./country-data.js\";\nimport { COUNTRY_COORDINATES } from \"./country-coordinates.js\";\nimport { getCountryCapital } from \"./country-capitals.js\";\nimport {\n COUNTRY_ALIASES,\n COUNTRY_CURRENCIES,\n COUNTRY_LANGUAGES,\n EEA_COUNTRIES,\n EU_COUNTRIES,\n NORDIC_COUNTRIES,\n PRIMARY_BY_CALLING_CODE,\n SCHENGEN_COUNTRIES,\n SEPA_COUNTRIES,\n} from \"./country-metadata.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A neighboring country with its distance from a reference point (kilometers). */\nexport interface CountryDistance {\n readonly country: Country;\n readonly distanceKilometers: number;\n}\n\n/**\n * A country identified by its English name, Swedish name, local name (endonym),\n * or ISO 3166-1 codes. Each country exposes its phone calling code, ccTLD,\n * continent, European classifications (EU, EEA, Schengen, Nordics, SEPA), and\n * currency metadata. Parsing accepts English/Swedish/local names, alpha-2 and\n * alpha-3 codes, and common aliases (USA, UK, Holland, etc.).\n */\nexport class Country {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Country\",\n localizedName: \"Land\",\n emoji: \"\\u{1F30D}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-3166-country-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_3166-1\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://www.iana.org/domains/root/db\",\n \"https://www.wikidata.org/wiki/Property:P625\",\n \"https://www.wikidata.org/wiki/Property:P36\",\n \"https://www.wikidata.org/wiki/Property:P47\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly numericCode: number;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly callingCode: string;\n readonly topLevelDomain: string;\n readonly continent: Continent;\n readonly currencyCodes: readonly string[];\n readonly languageCodes: readonly string[];\n\n private constructor(row: CountryRow) {\n this.alpha2Code = row.alpha2;\n this.alpha3Code = row.alpha3;\n this.numericCode = row.numeric;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.nativeName = row.native;\n this.callingCode = row.callingCode;\n this.topLevelDomain = row.tld;\n this.continent = row.continent;\n this.currencyCodes = COUNTRY_CURRENCIES[row.alpha2] ?? [];\n this.languageCodes = COUNTRY_LANGUAGES[row.alpha2] ?? [];\n }\n\n /** The canonical value of this country: its ISO 3166-1 alpha-2 code. */\n get value(): string {\n return this.alpha2Code;\n }\n\n /** Display name in the current culture (Swedish or English). */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n /** Culture-independent display form. Always the English name. */\n get formatted(): string {\n return this.englishName;\n }\n\n /** Geographic coordinate of the country (centroid, from Wikidata P625). */\n get coordinate(): GeoCoordinate {\n const c = COUNTRY_COORDINATES[this.alpha2Code];\n if (!c) throw new Error(`No coordinate for country ${this.alpha2Code}.`);\n return GeoCoordinate.create(c[0], c[1]);\n }\n\n /** Approximate latitude (WGS 84) of the country centroid. */\n get latitude(): number {\n return this.coordinate.latitude;\n }\n\n /** Approximate longitude (WGS 84) of the country centroid. */\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n /** Capital city, or `null` for entries without a capital (e.g. Antarctica). */\n get capital(): CountryCapital | null {\n return getCountryCapital(this.alpha2Code);\n }\n\n get isInEuropeanUnion(): boolean {\n return EU_COUNTRIES.has(this.alpha2Code);\n }\n get isInEea(): boolean {\n return EEA_COUNTRIES.has(this.alpha2Code);\n }\n get isInSchengen(): boolean {\n return SCHENGEN_COUNTRIES.has(this.alpha2Code);\n }\n get isInNordics(): boolean {\n return NORDIC_COUNTRIES.has(this.alpha2Code);\n }\n get isInSepa(): boolean {\n return SEPA_COUNTRIES.has(this.alpha2Code);\n }\n\n /** True when the euro is among the country's legal tenders. */\n get usesEuro(): boolean {\n return this.currencyCodes.includes(\"EUR\");\n }\n\n /** Primary ISO 4217 currency code, or `null` when unknown. */\n get currencyCode(): string | null {\n return this.currencyCodes[0] ?? null;\n }\n\n /**\n * Primary legal-tender currency, or `null` when unknown. Countries with\n * several legal tenders (Cuba, Panama, Namibia) return the first; use\n * {@link currencies} for the full list.\n */\n get currency(): Currency | null {\n const code = this.currencyCode;\n return code == null ? null : Currency.tryParse(code);\n }\n\n /** All recognized currencies for this country, in priority order. */\n get currencies(): readonly Currency[] {\n return Object.freeze(\n this.currencyCodes\n .map((code) => Currency.tryParse(code))\n .filter((c): c is Currency => c !== null),\n );\n }\n\n /**\n * Primary official language, or `null` when unknown. Countries with several\n * official languages (Belgium, Switzerland) return the most widely spoken;\n * use {@link officialLanguages} for the full list.\n */\n get primaryLanguage(): Language | null {\n const code = this.languageCodes[0];\n return code == null ? null : Language.tryParse(code);\n }\n\n /** All official languages of the country, in priority order. */\n get officialLanguages(): readonly Language[] {\n return Object.freeze(\n this.languageCodes\n .map((code) => Language.tryParse(code))\n .filter((l): l is Language => l !== null),\n );\n }\n\n static tryParse(input: string | null | undefined): Country | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const direct = lookupCi(sanitized);\n if (direct) return direct;\n\n if (sanitized.length > 4 && sanitized.slice(0, 4).toLowerCase() === \"the \") {\n const without = sanitized.slice(4);\n const stripped = lookupCi(without);\n if (stripped) return stripped;\n }\n return null;\n }\n\n static parse(input: string): Country {\n const r = Country.tryParse(input);\n if (r === null) throw new Error(\"Unknown country.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Country.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Country.normalize(input) === input;\n }\n\n /** Look up a country by its phone calling code. Primary owner wins for shared codes. */\n static tryFindByCallingCode(callingCode: string | null | undefined): Country | null {\n if (callingCode == null) return null;\n const trimmed = callingCode.trim();\n if (trimmed.length === 0) return null;\n return BY_CALLING_CODE.get(trimmed) ?? null;\n }\n\n /** All known countries. */\n static get all(): readonly Country[] {\n return ALL_COUNTRIES;\n }\n\n /**\n * Returns countries within `radiusKm` of this country, ordered by distance.\n */\n findNeighbors(radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n return Country.findNeighbors(this.coordinate, radiusKm).filter((d) => d.country !== this);\n }\n\n /** Returns countries within `radiusKm` of `coordinate`, ordered by distance. */\n static findNeighbors(coordinate: GeoCoordinate, radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: CountryDistance[] = [];\n for (const c of ALL_COUNTRIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, c.coordinate);\n if (dist <= radiusKm) out.push({ country: c, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n /**\n * Scans unstructured text for country names (4+ chars, word-bounded). Low confidence\n * because country names can occur in non-geographic contexts.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Country>[] {\n if (!text) return [];\n const out: TextCandidate<Country>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const country = Country.tryParse(m[0]);\n if (!country) continue;\n out.push(\n new TextCandidate<Country>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Country\",\n category: TextCandidateCategory.Geography,\n normalizedForm: country.toNormalizedString(),\n formattedForm: country.toString(),\n maskedForm: country.localizedName,\n confidence: TextMatchConfidence.Low,\n value: country,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Country | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n compareTo(other: Country | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n static get Sweden(): Country {\n return getByAlpha2(\"SE\");\n }\n static get Norway(): Country {\n return getByAlpha2(\"NO\");\n }\n static get Finland(): Country {\n return getByAlpha2(\"FI\");\n }\n static get Denmark(): Country {\n return getByAlpha2(\"DK\");\n }\n static get Iceland(): Country {\n return getByAlpha2(\"IS\");\n }\n static get Germany(): Country {\n return getByAlpha2(\"DE\");\n }\n static get Poland(): Country {\n return getByAlpha2(\"PL\");\n }\n static get Estonia(): Country {\n return getByAlpha2(\"EE\");\n }\n static get Lithuania(): Country {\n return getByAlpha2(\"LT\");\n }\n static get Latvia(): Country {\n return getByAlpha2(\"LV\");\n }\n static get Romania(): Country {\n return getByAlpha2(\"RO\");\n }\n static get Bulgaria(): Country {\n return getByAlpha2(\"BG\");\n }\n static get CzechRepublic(): Country {\n return getByAlpha2(\"CZ\");\n }\n static get Spain(): Country {\n return getByAlpha2(\"ES\");\n }\n static get Netherlands(): Country {\n return getByAlpha2(\"NL\");\n }\n static get Greece(): Country {\n return getByAlpha2(\"GR\");\n }\n static get Italy(): Country {\n return getByAlpha2(\"IT\");\n }\n static get Slovenia(): Country {\n return getByAlpha2(\"SI\");\n }\n static get Croatia(): Country {\n return getByAlpha2(\"HR\");\n }\n static get Portugal(): Country {\n return getByAlpha2(\"PT\");\n }\n static get Hungary(): Country {\n return getByAlpha2(\"HU\");\n }\n static get France(): Country {\n return getByAlpha2(\"FR\");\n }\n static get Slovakia(): Country {\n return getByAlpha2(\"SK\");\n }\n static get Belgium(): Country {\n return getByAlpha2(\"BE\");\n }\n static get UnitedKingdom(): Country {\n return getByAlpha2(\"GB\");\n }\n static get Austria(): Country {\n return getByAlpha2(\"AT\");\n }\n static get Cyprus(): Country {\n return getByAlpha2(\"CY\");\n }\n static get Switzerland(): Country {\n return getByAlpha2(\"CH\");\n }\n static get Ireland(): Country {\n return getByAlpha2(\"IE\");\n }\n static get Luxembourg(): Country {\n return getByAlpha2(\"LU\");\n }\n static get Malta(): Country {\n return getByAlpha2(\"MT\");\n }\n static get Liechtenstein(): Country {\n return getByAlpha2(\"LI\");\n }\n\n /** @internal */\n static _fromRow(row: CountryRow): Country {\n return new Country(row);\n }\n}\n\nconst ALL_COUNTRIES: readonly Country[] = COUNTRY_ROWS.map((r) => Country._fromRow(r));\n\nconst BY_ALPHA2 = new Map<string, Country>();\nconst BY_NAME = new Map<string, Country>();\nconst BY_CALLING_CODE = new Map<string, Country>();\n\nfor (const c of ALL_COUNTRIES) {\n BY_ALPHA2.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha3Code.toUpperCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n if (!BY_NAME.has(c.localizedName.toLowerCase())) BY_NAME.set(c.localizedName.toLowerCase(), c);\n if (\n c.nativeName.toLowerCase() !== c.englishName.toLowerCase() &&\n !BY_NAME.has(c.nativeName.toLowerCase())\n ) {\n BY_NAME.set(c.nativeName.toLowerCase(), c);\n }\n if (!BY_CALLING_CODE.has(c.callingCode)) BY_CALLING_CODE.set(c.callingCode, c);\n}\n\nfor (const [aliasOrCode, alpha2] of Object.entries(COUNTRY_ALIASES)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_NAME.set(aliasOrCode.toLowerCase(), target);\n}\n\nfor (const [code, alpha2] of Object.entries(PRIMARY_BY_CALLING_CODE)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_CALLING_CODE.set(code, target);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= 4)\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n\nfunction getByAlpha2(code: string): Country {\n const c = BY_ALPHA2.get(code.toUpperCase());\n if (!c) throw new Error(`Unknown country code ${code}.`);\n return c;\n}\n\nfunction lookupCi(input: string): Country | null {\n const upper = input.toUpperCase();\n const a2 = BY_ALPHA2.get(upper);\n if (a2) return a2;\n const lower = input.toLowerCase();\n return BY_NAME.get(lower) ?? BY_NAME.get(upper) ?? null;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A Swedish county (`län`), keyed by SCB's 2-digit county code. */\nexport class SwedishCounty {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"County\",\n localizedName: \"Län\",\n emoji: \"\\u{1F3DB}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/\",\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/counties-and-municipalities-in-numerical-order/\",\n ]),\n });\n\n readonly code: string;\n readonly localizedName: string;\n readonly englishName: string;\n readonly coordinate: GeoCoordinate;\n\n private constructor(code: string, localized: string, english: string, coord: GeoCoordinate) {\n this.code = code;\n this.localizedName = localized;\n this.englishName = english;\n this.coordinate = coord;\n }\n\n get latitude(): number {\n return this.coordinate.latitude;\n }\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): SwedishCounty | null {\n if (input == null) return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(trimmed);\n if (digits.length === 2 && BY_CODE.has(digits)) return BY_CODE.get(digits)!;\n\n return BY_NAME.get(trimmed.toLowerCase()) ?? null;\n }\n\n static parse(input: string): SwedishCounty {\n const r = SwedishCounty.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish county.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCounty.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishCounty.tryParse(input);\n if (r) return r.localizedName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishCounty.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCounty.normalize(input) === input;\n }\n\n /** All 21 Swedish counties. */\n static get all(): readonly SwedishCounty[] {\n return ALL_COUNTIES;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCounty>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCounty>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const county = SwedishCounty.tryParse(m[0]);\n if (!county) continue;\n out.push(\n new TextCandidate<SwedishCounty>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCounty\",\n category: TextCandidateCategory.Geography,\n normalizedForm: county.toNormalizedString(),\n formattedForm: county.toString(),\n maskedForm: county.localizedName,\n confidence: TextMatchConfidence.Low,\n value: county,\n }),\n );\n }\n return out;\n }\n\n /** Distance in kilometers between two counties (by county seat). */\n static distanceKilometers(a: SwedishCounty, b: SwedishCounty): number {\n return GeoCoordinate.distanceKilometers(a.coordinate, b.coordinate);\n }\n\n distanceKilometersTo(other: SwedishCounty | GeoCoordinate): number {\n const target = other instanceof SwedishCounty ? other.coordinate : other;\n return GeoCoordinate.distanceKilometers(this.coordinate, target);\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toLocalString(): string {\n return this.localizedName;\n }\n\n equals(other: SwedishCounty | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: SwedishCounty | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n /** @internal */\n static _new(code: string, sv: string, en: string, c: GeoCoordinate): SwedishCounty {\n return new SwedishCounty(code, sv, en, c);\n }\n}\n\ninterface CountyDef {\n readonly code: string;\n readonly sv: string;\n readonly en: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst COUNTY_DEFS: readonly CountyDef[] = [\n { code: \"01\", sv: \"Stockholms län\", en: \"Stockholm County\", lat: 59.3275, lon: 18.054719 },\n { code: \"03\", sv: \"Uppsala län\", en: \"Uppsala County\", lat: 59.866667, lon: 17.633333 },\n {\n code: \"04\",\n sv: \"Södermanlands län\",\n en: \"Södermanland County\",\n lat: 58.752778,\n lon: 17.008611,\n },\n { code: \"05\", sv: \"Östergötlands län\", en: \"Östergötland County\", lat: 58.4, lon: 15.616667 },\n { code: \"06\", sv: \"Jönköpings län\", en: \"Jönköping County\", lat: 57.783333, lon: 14.2 },\n { code: \"07\", sv: \"Kronobergs län\", en: \"Kronoberg County\", lat: 56.883333, lon: 14.8 },\n { code: \"08\", sv: \"Kalmar län\", en: \"Kalmar County\", lat: 56.666667, lon: 16.366667 },\n { code: \"09\", sv: \"Gotlands län\", en: \"Gotland County\", lat: 57.615278, lon: 18.280556 },\n { code: \"10\", sv: \"Blekinge län\", en: \"Blekinge County\", lat: 56.183333, lon: 15.65 },\n { code: \"12\", sv: \"Skåne län\", en: \"Skåne County\", lat: 55.565, lon: 13.018611 },\n { code: \"13\", sv: \"Hallands län\", en: \"Halland County\", lat: 56.666667, lon: 12.85 },\n {\n code: \"14\",\n sv: \"Västra Götalands län\",\n en: \"Västra Götaland County\",\n lat: 57.7,\n lon: 11.933333,\n },\n { code: \"17\", sv: \"Värmlands län\", en: \"Värmland County\", lat: 59.383333, lon: 13.533333 },\n { code: \"18\", sv: \"Örebro län\", en: \"Örebro County\", lat: 59.273889, lon: 15.213333 },\n { code: \"19\", sv: \"Västmanlands län\", en: \"Västmanland County\", lat: 59.616667, lon: 16.533333 },\n { code: \"20\", sv: \"Dalarnas län\", en: \"Dalarna County\", lat: 60.6, lon: 15.633333 },\n { code: \"21\", sv: \"Gävleborgs län\", en: \"Gävleborg County\", lat: 60.666667, lon: 17.166667 },\n {\n code: \"22\",\n sv: \"Västernorrlands län\",\n en: \"Västernorrland County\",\n lat: 62.633333,\n lon: 17.933333,\n },\n { code: \"23\", sv: \"Jämtlands län\", en: \"Jämtland County\", lat: 63.183333, lon: 14.666667 },\n { code: \"24\", sv: \"Västerbottens län\", en: \"Västerbotten County\", lat: 63.833333, lon: 20.25 },\n { code: \"25\", sv: \"Norrbottens län\", en: \"Norrbotten County\", lat: 65.584444, lon: 22.153889 },\n];\n\nconst ALL_COUNTIES: readonly SwedishCounty[] = COUNTY_DEFS.map((d) =>\n SwedishCounty._new(d.code, d.sv, d.en, GeoCoordinate.create(d.lat, d.lon)),\n);\n\nconst BY_CODE = new Map<string, SwedishCounty>();\nconst BY_NAME = new Map<string, SwedishCounty>();\n\nfor (const c of ALL_COUNTIES) {\n BY_CODE.set(c.code, c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n\n const sv = c.localizedName;\n if (sv.endsWith(\" län\")) {\n const baseSv = sv.slice(0, -4);\n if (!BY_NAME.has(baseSv.toLowerCase())) BY_NAME.set(baseSv.toLowerCase(), c);\n addGenitive(baseSv, c);\n }\n const en = c.englishName;\n if (en.endsWith(\" County\")) {\n const baseEn = en.slice(0, -7);\n if (!BY_NAME.has(baseEn.toLowerCase())) BY_NAME.set(baseEn.toLowerCase(), c);\n addGenitive(baseEn, c);\n }\n}\n\nfunction addGenitive(name: string, county: SwedishCounty): void {\n if (name.endsWith(\"s\") || name.endsWith(\"S\")) return;\n const key = (name + \"s\").toLowerCase();\n if (!BY_NAME.has(key)) BY_NAME.set(key, county);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .sort((a, b) => b.length - a.length)\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n","// Swedish municipality (kommun) data — code, name, county code, type, etc.\n// Originally generated from the .NET source; now maintained by hand in this repo.\n\nexport interface MunicipalityRow {\n readonly code: string;\n readonly name: string;\n readonly englishName?: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nexport const MUNICIPALITY_ROWS: readonly MunicipalityRow[] = [\n { code: \"0114\", name: \"Upplands Väsby\", lat: 59.516667, lon: 17.9 },\n { code: \"0115\", name: \"Vallentuna\", lat: 59.583333, lon: 18.2 },\n { code: \"0117\", name: \"Österåker\", lat: 59.5, lon: 18.45 },\n { code: \"0120\", name: \"Värmdö\", lat: 59.316667, lon: 18.566667 },\n { code: \"0123\", name: \"Järfälla\", lat: 59.433333, lon: 17.833333 },\n { code: \"0125\", name: \"Ekerö\", lat: 59.35, lon: 17.683333 },\n { code: \"0126\", name: \"Huddinge\", lat: 59.233333, lon: 17.983333 },\n { code: \"0127\", name: \"Botkyrka\", lat: 59.2, lon: 17.833333 },\n { code: \"0128\", name: \"Salem\", lat: 59.233333, lon: 17.683333 },\n { code: \"0136\", name: \"Haninge\", lat: 59.166667, lon: 18.133333 },\n { code: \"0138\", name: \"Tyresö\", lat: 59.233333, lon: 18.216667 },\n { code: \"0139\", name: \"Upplands-Bro\", lat: 59.533333, lon: 17.666667 },\n { code: \"0140\", name: \"Nykvarn\", lat: 59.183333, lon: 17.4 },\n { code: \"0160\", name: \"Täby\", lat: 59.4439, lon: 18.06872 },\n { code: \"0162\", name: \"Danderyd\", lat: 59.4, lon: 18.083333 },\n { code: \"0163\", name: \"Sollentuna\", lat: 59.45, lon: 17.916667 },\n { code: \"0180\", name: \"Stockholm\", lat: 59.3275, lon: 18.054719 },\n { code: \"0181\", name: \"Södertälje\", lat: 59.1, lon: 17.516667 },\n { code: \"0182\", name: \"Nacka\", lat: 59.316667, lon: 18.166667 },\n { code: \"0183\", name: \"Sundbyberg\", lat: 59.363333, lon: 17.965556 },\n { code: \"0184\", name: \"Solna\", lat: 59.366667, lon: 18.016667 },\n { code: \"0186\", name: \"Lidingö\", lat: 59.36303, lon: 18.15096 },\n { code: \"0187\", name: \"Vaxholm\", lat: 59.4, lon: 18.283333 },\n { code: \"0188\", name: \"Norrtälje\", lat: 59.766667, lon: 18.7 },\n { code: \"0191\", name: \"Sigtuna\", lat: 59.633333, lon: 17.883333 },\n { code: \"0192\", name: \"Nynäshamn\", lat: 58.933333, lon: 17.883333 },\n { code: \"0305\", name: \"Håbo\", lat: 59.567778, lon: 17.529722 },\n { code: \"0319\", name: \"Älvkarleby\", lat: 60.624444, lon: 17.416111 },\n { code: \"0330\", name: \"Knivsta\", lat: 59.716667, lon: 17.8 },\n { code: \"0331\", name: \"Heby\", lat: 59.933333, lon: 16.883333 },\n { code: \"0360\", name: \"Tierp\", lat: 60.344444, lon: 17.513056 },\n { code: \"0380\", name: \"Uppsala\", lat: 59.866667, lon: 17.633333 },\n { code: \"0381\", name: \"Enköping\", lat: 59.635556, lon: 17.076389 },\n { code: \"0382\", name: \"Östhammar\", lat: 60.258889, lon: 18.373611 },\n { code: \"0428\", name: \"Vingåker\", lat: 59.033333, lon: 15.866667 },\n { code: \"0461\", name: \"Gnesta\", lat: 59.0475, lon: 17.312222 },\n { code: \"0480\", name: \"Nyköping\", lat: 58.752778, lon: 17.008611 },\n { code: \"0481\", name: \"Oxelösund\", lat: 58.666667, lon: 17.116667 },\n { code: \"0482\", name: \"Flen\", lat: 59.058333, lon: 16.588889 },\n { code: \"0483\", name: \"Katrineholm\", lat: 58.995556, lon: 16.206111 },\n { code: \"0484\", name: \"Eskilstuna\", lat: 59.370556, lon: 16.512778 },\n { code: \"0486\", name: \"Strängnäs\", lat: 59.376944, lon: 17.035278 },\n { code: \"0488\", name: \"Trosa\", lat: 58.893889, lon: 17.552222 },\n { code: \"0509\", name: \"Ödeshög\", lat: 58.230833, lon: 14.652778 },\n { code: \"0512\", name: \"Ydre\", lat: 57.827222, lon: 15.273889 },\n { code: \"0513\", name: \"Kinda\", lat: 57.989167, lon: 15.627222 },\n { code: \"0560\", name: \"Boxholm\", lat: 58.196389, lon: 15.051944 },\n { code: \"0561\", name: \"Åtvidaberg\", lat: 58.201667, lon: 15.998056 },\n { code: \"0562\", name: \"Finspång\", lat: 58.709167, lon: 15.786944 },\n { code: \"0563\", name: \"Valdemarsvik\", lat: 58.205556, lon: 16.601944 },\n { code: \"0580\", name: \"Linköping\", lat: 58.4, lon: 15.616667 },\n { code: \"0581\", name: \"Norrköping\", lat: 58.591944, lon: 16.185556 },\n { code: \"0582\", name: \"Söderköping\", lat: 58.480278, lon: 16.3225 },\n { code: \"0583\", name: \"Motala\", lat: 58.536389, lon: 15.0375 },\n { code: \"0584\", name: \"Vadstena\", lat: 58.448333, lon: 14.889722 },\n { code: \"0586\", name: \"Mjölby\", lat: 58.325, lon: 15.130556 },\n { code: \"0604\", name: \"Aneby\", lat: 57.833333, lon: 14.8 },\n { code: \"0617\", name: \"Gnosjö\", lat: 57.366667, lon: 13.733333 },\n { code: \"0642\", name: \"Mullsjö\", lat: 57.916667, lon: 13.883333 },\n { code: \"0643\", name: \"Habo\", lat: 57.916667, lon: 14.066667 },\n { code: \"0662\", name: \"Gislaved\", lat: 57.3, lon: 13.533333 },\n { code: \"0665\", name: \"Vaggeryd\", lat: 57.5, lon: 14.116667 },\n { code: \"0680\", name: \"Jönköping\", lat: 57.783333, lon: 14.2 },\n { code: \"0682\", name: \"Nässjö\", lat: 57.65, lon: 14.683333 },\n { code: \"0683\", name: \"Värnamo\", lat: 57.183333, lon: 14.033333 },\n { code: \"0684\", name: \"Sävsjö\", lat: 57.4, lon: 14.666667 },\n { code: \"0685\", name: \"Vetlanda\", lat: 57.433333, lon: 15.066667 },\n { code: \"0686\", name: \"Eksjö\", lat: 57.666667, lon: 14.966667 },\n { code: \"0687\", name: \"Tranås\", lat: 58.033333, lon: 14.966667 },\n { code: \"0760\", name: \"Uppvidinge\", lat: 57.166667, lon: 15.333333 },\n { code: \"0761\", name: \"Lessebo\", lat: 56.75, lon: 15.266667 },\n { code: \"0763\", name: \"Tingsryd\", lat: 56.533333, lon: 14.983333 },\n { code: \"0764\", name: \"Alvesta\", lat: 56.9, lon: 14.55 },\n { code: \"0765\", name: \"Älmhult\", lat: 56.55, lon: 14.133333 },\n { code: \"0767\", name: \"Markaryd\", lat: 56.466667, lon: 13.6 },\n { code: \"0780\", name: \"Växjö\", lat: 56.883333, lon: 14.8 },\n { code: \"0781\", name: \"Ljungby\", lat: 56.833333, lon: 13.933333 },\n { code: \"0821\", name: \"Högsby\", lat: 57.166667, lon: 16.033333 },\n { code: \"0834\", name: \"Torsås\", lat: 56.4, lon: 16 },\n { code: \"0840\", name: \"Mörbylånga\", lat: 56.516667, lon: 16.383333 },\n { code: \"0860\", name: \"Hultsfred\", lat: 57.483333, lon: 15.833333 },\n { code: \"0861\", name: \"Mönsterås\", lat: 57.033333, lon: 16.45 },\n { code: \"0862\", name: \"Emmaboda\", lat: 56.616667, lon: 15.55 },\n { code: \"0880\", name: \"Kalmar\", lat: 56.666667, lon: 16.366667 },\n { code: \"0881\", name: \"Nybro\", lat: 56.733333, lon: 15.9 },\n { code: \"0882\", name: \"Oskarshamn\", lat: 57.266667, lon: 16.45 },\n { code: \"0883\", name: \"Västervik\", lat: 57.75, lon: 16.633333 },\n { code: \"0884\", name: \"Vimmerby\", lat: 57.666667, lon: 15.85 },\n { code: \"0885\", name: \"Borgholm\", lat: 56.878056, lon: 16.661667 },\n { code: \"0980\", name: \"Gotland\", lat: 57.615278, lon: 18.280556 },\n { code: \"1060\", name: \"Olofström\", lat: 56.266667, lon: 14.533333 },\n { code: \"1080\", name: \"Karlskrona\", lat: 56.183333, lon: 15.65 },\n { code: \"1081\", name: \"Ronneby\", lat: 56.2, lon: 15.283333 },\n { code: \"1082\", name: \"Karlshamn\", lat: 56.166667, lon: 14.85 },\n { code: \"1083\", name: \"Sölvesborg\", lat: 56.05, lon: 14.583333 },\n { code: \"1214\", name: \"Svalöv\", lat: 55.916667, lon: 13.116667 },\n { code: \"1230\", name: \"Staffanstorp\", lat: 55.633333, lon: 13.2 },\n { code: \"1231\", name: \"Burlöv\", lat: 55.633333, lon: 13.066667 },\n { code: \"1233\", name: \"Vellinge\", lat: 55.466667, lon: 13.016667 },\n { code: \"1256\", name: \"Östra Göinge\", lat: 56.25, lon: 14.066667 },\n { code: \"1257\", name: \"Örkelljunga\", lat: 56.283333, lon: 13.283333 },\n { code: \"1260\", name: \"Bjuv\", lat: 56.083333, lon: 12.916667 },\n { code: \"1261\", name: \"Kävlinge\", lat: 55.8, lon: 13.116667 },\n { code: \"1262\", name: \"Lomma\", lat: 55.666667, lon: 13.083333 },\n { code: \"1263\", name: \"Svedala\", lat: 55.5, lon: 13.233333 },\n { code: \"1264\", name: \"Skurup\", lat: 55.483333, lon: 13.5 },\n { code: \"1265\", name: \"Sjöbo\", lat: 55.633333, lon: 13.7 },\n { code: \"1266\", name: \"Hörby\", lat: 55.85, lon: 13.65 },\n { code: \"1267\", name: \"Höör\", lat: 55.933333, lon: 13.55 },\n { code: \"1270\", name: \"Tomelilla\", lat: 55.55, lon: 13.95 },\n { code: \"1272\", name: \"Bromölla\", lat: 56.05, lon: 14.466667 },\n { code: \"1273\", name: \"Osby\", lat: 56.366667, lon: 13.983333 },\n { code: \"1275\", name: \"Perstorp\", lat: 56.133333, lon: 13.383333 },\n { code: \"1276\", name: \"Klippan\", lat: 56.133333, lon: 13.133333 },\n { code: \"1277\", name: \"Åstorp\", lat: 56.133333, lon: 12.95 },\n { code: \"1278\", name: \"Båstad\", lat: 56.416667, lon: 12.866667 },\n { code: \"1280\", name: \"Malmö\", lat: 55.565, lon: 13.018611 },\n { code: \"1281\", name: \"Lund\", lat: 55.7, lon: 13.2 },\n { code: \"1282\", name: \"Landskrona\", lat: 55.866667, lon: 12.85 },\n { code: \"1283\", name: \"Helsingborg\", lat: 56.05, lon: 12.716667 },\n { code: \"1284\", name: \"Höganäs\", lat: 56.2, lon: 12.566667 },\n { code: \"1285\", name: \"Eslöv\", lat: 55.833333, lon: 13.3 },\n { code: \"1286\", name: \"Ystad\", lat: 55.416667, lon: 13.833333 },\n { code: \"1287\", name: \"Trelleborg\", lat: 55.366667, lon: 13.166667 },\n { code: \"1290\", name: \"Kristianstad\", lat: 56.033333, lon: 14.15 },\n { code: \"1291\", name: \"Simrishamn\", lat: 55.55, lon: 14.35 },\n { code: \"1292\", name: \"Ängelholm\", lat: 56.25, lon: 12.85 },\n { code: \"1293\", name: \"Hässleholm\", lat: 56.166667, lon: 13.766667 },\n { code: \"1315\", name: \"Hylte\", lat: 57, lon: 13.25 },\n { code: \"1380\", name: \"Halmstad\", lat: 56.666667, lon: 12.85 },\n { code: \"1381\", name: \"Laholm\", lat: 56.516667, lon: 13.033333 },\n { code: \"1382\", name: \"Falkenberg\", lat: 56.916667, lon: 12.5 },\n { code: \"1383\", name: \"Varberg\", lat: 57.1, lon: 12.25 },\n { code: \"1384\", name: \"Kungsbacka\", lat: 57.483333, lon: 12.066667 },\n { code: \"1401\", name: \"Härryda\", lat: 57.666667, lon: 12.116667 },\n { code: \"1402\", name: \"Partille\", lat: 57.733333, lon: 12.1 },\n { code: \"1407\", name: \"Öckerö\", lat: 57.711111, lon: 11.647222 },\n { code: \"1415\", name: \"Stenungsund\", lat: 58.083333, lon: 11.816667 },\n { code: \"1419\", name: \"Tjörn\", lat: 58, lon: 11.55 },\n { code: \"1421\", name: \"Orust\", lat: 58.233333, lon: 11.683333 },\n { code: \"1427\", name: \"Sotenäs\", lat: 58.366667, lon: 11.25 },\n { code: \"1430\", name: \"Munkedal\", lat: 58.483333, lon: 11.683333 },\n { code: \"1435\", name: \"Tanum\", lat: 58.716667, lon: 11.316667 },\n { code: \"1438\", name: \"Dals-Ed\", lat: 58.916667, lon: 11.916667 },\n { code: \"1439\", name: \"Färgelanda\", lat: 58.566667, lon: 11.983333 },\n { code: \"1440\", name: \"Ale\", lat: 57.925, lon: 12.086944 },\n { code: \"1441\", name: \"Lerum\", lat: 57.766667, lon: 12.3 },\n { code: \"1442\", name: \"Vårgårda\", lat: 58.033333, lon: 12.8 },\n { code: \"1443\", name: \"Bollebygd\", lat: 57.666667, lon: 12.566667 },\n { code: \"1444\", name: \"Grästorp\", lat: 58.333333, lon: 12.666667 },\n { code: \"1445\", name: \"Essunga\", lat: 58.183333, lon: 12.716667 },\n { code: \"1446\", name: \"Karlsborg\", lat: 58.533333, lon: 14.516667 },\n { code: \"1447\", name: \"Gullspång\", lat: 58.983333, lon: 14.116667 },\n { code: \"1452\", name: \"Tranemo\", lat: 57.483333, lon: 13.35 },\n { code: \"1460\", name: \"Bengtsfors\", lat: 59.033333, lon: 12.216667 },\n { code: \"1461\", name: \"Mellerud\", lat: 58.7, lon: 12.466667 },\n { code: \"1462\", name: \"Lilla Edet\", lat: 58.133333, lon: 12.133333 },\n { code: \"1463\", name: \"Mark\", lat: 57.516667, lon: 12.683333 },\n { code: \"1465\", name: \"Svenljunga\", lat: 57.5, lon: 13.116667 },\n { code: \"1466\", name: \"Herrljunga\", lat: 58.083333, lon: 13.033333 },\n { code: \"1470\", name: \"Vara\", lat: 58.266667, lon: 12.95 },\n { code: \"1471\", name: \"Götene\", lat: 58.533333, lon: 13.483333 },\n { code: \"1472\", name: \"Tibro\", lat: 58.416667, lon: 14.166667 },\n { code: \"1473\", name: \"Töreboda\", lat: 58.716667, lon: 14.133333 },\n { code: \"1480\", name: \"Göteborg\", englishName: \"Gothenburg\", lat: 57.7, lon: 11.933333 },\n { code: \"1481\", name: \"Mölndal\", lat: 57.654167, lon: 12.019167 },\n { code: \"1482\", name: \"Kungälv\", lat: 57.866667, lon: 11.966667 },\n { code: \"1484\", name: \"Lysekil\", lat: 58.283333, lon: 11.433333 },\n { code: \"1485\", name: \"Uddevalla\", lat: 58.35, lon: 11.916667 },\n { code: \"1486\", name: \"Strömstad\", lat: 58.933333, lon: 11.166667 },\n { code: \"1487\", name: \"Vänersborg\", lat: 58.383333, lon: 12.316667 },\n { code: \"1488\", name: \"Trollhättan\", lat: 58.283333, lon: 12.283333 },\n { code: \"1489\", name: \"Alingsås\", lat: 57.933333, lon: 12.533333 },\n { code: \"1490\", name: \"Borås\", lat: 57.716667, lon: 12.933333 },\n { code: \"1491\", name: \"Ulricehamn\", lat: 57.791667, lon: 13.412778 },\n { code: \"1492\", name: \"Åmål\", lat: 59.05, lon: 12.7 },\n { code: \"1493\", name: \"Mariestad\", lat: 58.7, lon: 13.816667 },\n { code: \"1494\", name: \"Lidköping\", lat: 58.5, lon: 13.183333 },\n { code: \"1495\", name: \"Skara\", lat: 58.383333, lon: 13.433333 },\n { code: \"1496\", name: \"Skövde\", lat: 58.383333, lon: 13.85 },\n { code: \"1497\", name: \"Hjo\", lat: 58.3, lon: 14.283333 },\n { code: \"1498\", name: \"Tidaholm\", lat: 58.183333, lon: 13.95 },\n { code: \"1499\", name: \"Falköping\", lat: 58.166667, lon: 13.55 },\n { code: \"1715\", name: \"Kil\", lat: 59.5, lon: 13.316389 },\n { code: \"1730\", name: \"Eda\", lat: 59.883333, lon: 12.283333 },\n { code: \"1737\", name: \"Torsby\", lat: 60.133333, lon: 13 },\n { code: \"1760\", name: \"Storfors\", lat: 59.533333, lon: 14.266667 },\n { code: \"1761\", name: \"Hammarö\", lat: 59.333333, lon: 13.433333 },\n { code: \"1762\", name: \"Munkfors\", lat: 59.833333, lon: 13.533333 },\n { code: \"1763\", name: \"Forshaga\", lat: 59.533333, lon: 13.466667 },\n { code: \"1764\", name: \"Grums\", lat: 59.351667, lon: 13.111389 },\n { code: \"1765\", name: \"Årjäng\", lat: 59.383333, lon: 12.133333 },\n { code: \"1766\", name: \"Sunne\", lat: 59.833333, lon: 13.133333 },\n { code: \"1780\", name: \"Karlstad\", lat: 59.383333, lon: 13.533333 },\n { code: \"1781\", name: \"Kristinehamn\", lat: 59.3, lon: 14.116667 },\n { code: \"1782\", name: \"Filipstad\", lat: 59.716667, lon: 14.166667 },\n { code: \"1783\", name: \"Hagfors\", lat: 60.033333, lon: 13.65 },\n { code: \"1784\", name: \"Arvika\", lat: 59.65, lon: 12.583333 },\n { code: \"1785\", name: \"Säffle\", lat: 59.133333, lon: 12.933333 },\n { code: \"1814\", name: \"Lekeberg\", lat: 59.166667, lon: 14.866667 },\n { code: \"1860\", name: \"Laxå\", lat: 58.988611, lon: 14.6175 },\n { code: \"1861\", name: \"Hallsberg\", lat: 59.066667, lon: 15.116667 },\n { code: \"1862\", name: \"Degerfors\", lat: 59.233333, lon: 14.433333 },\n { code: \"1863\", name: \"Hällefors\", lat: 59.766667, lon: 14.516667 },\n { code: \"1864\", name: \"Ljusnarsberg\", lat: 59.866667, lon: 14.983333 },\n { code: \"1880\", name: \"Örebro\", lat: 59.273889, lon: 15.213333 },\n { code: \"1881\", name: \"Kumla\", lat: 59.116667, lon: 15.133333 },\n { code: \"1882\", name: \"Askersund\", lat: 58.883333, lon: 14.9 },\n { code: \"1883\", name: \"Karlskoga\", lat: 59.325, lon: 14.525 },\n { code: \"1884\", name: \"Nora\", lat: 59.516667, lon: 15.033333 },\n { code: \"1885\", name: \"Lindesberg\", lat: 59.583333, lon: 15.25 },\n { code: \"1904\", name: \"Skinnskatteberg\", lat: 59.833333, lon: 15.683333 },\n { code: \"1907\", name: \"Surahammar\", lat: 59.716667, lon: 16.216667 },\n { code: \"1960\", name: \"Kungsör\", lat: 59.416667, lon: 16.083333 },\n { code: \"1961\", name: \"Hallstahammar\", lat: 59.616667, lon: 16.25 },\n { code: \"1962\", name: \"Norberg\", lat: 60.083333, lon: 15.95 },\n { code: \"1980\", name: \"Västerås\", lat: 59.616667, lon: 16.533333 },\n { code: \"1981\", name: \"Sala\", lat: 59.920417, lon: 16.606111 },\n { code: \"1982\", name: \"Fagersta\", lat: 60, lon: 15.816667 },\n { code: \"1983\", name: \"Köping\", lat: 59.513056, lon: 15.998611 },\n { code: \"1984\", name: \"Arboga\", lat: 59.4, lon: 15.833333 },\n { code: \"2021\", name: \"Vansbro\", lat: 60.516667, lon: 14.216667 },\n { code: \"2023\", name: \"Malung-Sälen\", lat: 60.683333, lon: 13.733333 },\n { code: \"2026\", name: \"Gagnef\", lat: 60.55, lon: 15.133333 },\n { code: \"2029\", name: \"Leksand\", lat: 60.733333, lon: 15 },\n { code: \"2031\", name: \"Rättvik\", lat: 60.883333, lon: 15.133333 },\n { code: \"2034\", name: \"Orsa\", lat: 61.116667, lon: 14.616667 },\n { code: \"2039\", name: \"Älvdalen\", lat: 61.233333, lon: 14.033333 },\n { code: \"2061\", name: \"Smedjebacken\", lat: 60.133333, lon: 15.416667 },\n { code: \"2062\", name: \"Mora\", lat: 61.016667, lon: 14.533333 },\n { code: \"2080\", name: \"Falun\", lat: 60.6, lon: 15.633333 },\n { code: \"2081\", name: \"Borlänge\", lat: 60.482778, lon: 15.436389 },\n { code: \"2082\", name: \"Säter\", lat: 60.35, lon: 15.75 },\n { code: \"2083\", name: \"Hedemora\", lat: 60.283333, lon: 15.983333 },\n { code: \"2084\", name: \"Avesta\", lat: 60.145556, lon: 16.168333 },\n { code: \"2085\", name: \"Ludvika\", lat: 60.133333, lon: 15.183333 },\n { code: \"2101\", name: \"Ockelbo\", lat: 60.883333, lon: 16.716667 },\n { code: \"2104\", name: \"Hofors\", lat: 60.55, lon: 16.283333 },\n { code: \"2121\", name: \"Ovanåker\", lat: 61.383333, lon: 15.816667 },\n { code: \"2132\", name: \"Nordanstig\", lat: 61.983333, lon: 17.066667 },\n { code: \"2161\", name: \"Ljusdal\", lat: 61.833333, lon: 16.083333 },\n { code: \"2180\", name: \"Gävle\", lat: 60.666667, lon: 17.166667 },\n { code: \"2181\", name: \"Sandviken\", lat: 60.616667, lon: 16.783333 },\n { code: \"2182\", name: \"Söderhamn\", lat: 61.3, lon: 17.083333 },\n { code: \"2183\", name: \"Bollnäs\", lat: 61.35, lon: 16.4 },\n { code: \"2184\", name: \"Hudiksvall\", lat: 61.733333, lon: 17.116667 },\n { code: \"2260\", name: \"Ånge\", lat: 62.516667, lon: 15.616667 },\n { code: \"2262\", name: \"Timrå\", lat: 62.5, lon: 17.333333 },\n { code: \"2280\", name: \"Härnösand\", lat: 62.633333, lon: 17.933333 },\n { code: \"2281\", name: \"Sundsvall\", lat: 62.4, lon: 17.316667 },\n { code: \"2282\", name: \"Kramfors\", lat: 62.932167, lon: 17.777167 },\n { code: \"2283\", name: \"Sollefteå\", lat: 63.166667, lon: 17.266667 },\n { code: \"2284\", name: \"Örnsköldsvik\", lat: 63.283333, lon: 18.733333 },\n { code: \"2303\", name: \"Ragunda\", lat: 63.1, lon: 16.35 },\n { code: \"2305\", name: \"Bräcke\", lat: 62.75, lon: 15.416667 },\n { code: \"2309\", name: \"Krokom\", lat: 63.316667, lon: 14.5 },\n { code: \"2313\", name: \"Strömsund\", lat: 63.85, lon: 15.583333 },\n { code: \"2321\", name: \"Åre\", lat: 63.35, lon: 13.466667 },\n { code: \"2326\", name: \"Berg\", lat: 62.766667, lon: 14.45 },\n { code: \"2361\", name: \"Härjedalen\", lat: 62.033333, lon: 14.35 },\n { code: \"2380\", name: \"Östersund\", lat: 63.183333, lon: 14.666667 },\n { code: \"2401\", name: \"Nordmaling\", lat: 63.566667, lon: 19.5 },\n { code: \"2403\", name: \"Bjurholm\", lat: 63.916667, lon: 19.216667 },\n { code: \"2404\", name: \"Vindeln\", lat: 64.2, lon: 19.716667 },\n { code: \"2409\", name: \"Robertsfors\", lat: 64.192014, lon: 20.849513 },\n { code: \"2417\", name: \"Norsjö\", lat: 64.916667, lon: 19.483333 },\n { code: \"2418\", name: \"Malå\", lat: 65.183333, lon: 18.75 },\n { code: \"2421\", name: \"Storuman\", lat: 65.1, lon: 17.1 },\n { code: \"2422\", name: \"Sorsele\", lat: 65.533333, lon: 17.533333 },\n { code: \"2425\", name: \"Dorotea\", lat: 64.266667, lon: 16.416667 },\n { code: \"2460\", name: \"Vännäs\", lat: 63.916667, lon: 19.75 },\n { code: \"2462\", name: \"Vilhelmina\", lat: 64.616667, lon: 16.65 },\n { code: \"2463\", name: \"Åsele\", lat: 64.15, lon: 17.35 },\n { code: \"2480\", name: \"Umeå\", lat: 63.833333, lon: 20.25 },\n { code: \"2481\", name: \"Lycksele\", lat: 64.6, lon: 18.666667 },\n { code: \"2482\", name: \"Skellefteå\", lat: 64.75, lon: 20.95 },\n { code: \"2505\", name: \"Arvidsjaur\", lat: 65.583333, lon: 19.116667 },\n { code: \"2506\", name: \"Arjeplog\", lat: 66.033333, lon: 17.95 },\n { code: \"2510\", name: \"Jokkmokk\", lat: 66.616667, lon: 19.833333 },\n { code: \"2513\", name: \"Överkalix\", lat: 66.35, lon: 22.883333 },\n { code: \"2514\", name: \"Kalix\", lat: 65.85, lon: 23.166667 },\n { code: \"2518\", name: \"Övertorneå\", lat: 66.383333, lon: 23.666667 },\n { code: \"2521\", name: \"Pajala\", lat: 67.183333, lon: 23.366667 },\n { code: \"2523\", name: \"Gällivare\", lat: 67.133333, lon: 20.65 },\n { code: \"2560\", name: \"Älvsbyn\", lat: 65.683333, lon: 21.016667 },\n { code: \"2580\", name: \"Luleå\", lat: 65.584444, lon: 22.153889 },\n { code: \"2581\", name: \"Piteå\", lat: 65.333333, lon: 21.5 },\n { code: \"2582\", name: \"Boden\", lat: 65.833333, lon: 21.716667 },\n { code: \"2583\", name: \"Haparanda\", lat: 65.833333, lon: 24.133333 },\n { code: \"2584\", name: \"Kiruna\", lat: 67.854722, lon: 20.222778 },\n];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { SwedishCounty } from \"./swedish-county.js\";\nimport { MUNICIPALITY_ROWS } from \"./swedish-municipality-data.js\";\n\nconst MAX_INPUT_LENGTH = 100;\nconst MIN_SCAN_NAME_LENGTH = 4;\n\nexport interface MunicipalityDistance {\n readonly municipality: SwedishMunicipality;\n readonly distanceKilometers: number;\n}\n\n/** A Swedish municipality (`kommun`), keyed by SCB's 4-digit municipality code. */\nexport class SwedishMunicipality {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Municipality\",\n localizedName: \"Kommun\",\n emoji: \"\\u{1F3D8}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/counties-and-municipalities-in-numerical-order/\",\n ]),\n });\n\n readonly code: string;\n readonly localizedName: string;\n readonly englishName: string;\n readonly county: SwedishCounty;\n readonly coordinate: GeoCoordinate;\n\n private constructor(\n code: string,\n localized: string,\n english: string,\n county: SwedishCounty,\n coord: GeoCoordinate,\n ) {\n this.code = code;\n this.localizedName = localized;\n this.englishName = english;\n this.county = county;\n this.coordinate = coord;\n }\n\n get countyCode(): string {\n return this.county.code;\n }\n get latitude(): number {\n return this.coordinate.latitude;\n }\n get longitude(): number {\n return this.coordinate.longitude;\n }\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): SwedishMunicipality | null {\n if (input == null) return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(trimmed);\n if (digits.length === 4 && BY_CODE.has(digits)) return BY_CODE.get(digits)!;\n\n return BY_NAME.get(trimmed.toLowerCase()) ?? null;\n }\n\n static parse(input: string): SwedishMunicipality {\n const r = SwedishMunicipality.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish municipality.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishMunicipality.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishMunicipality.tryParse(input);\n if (r) return r.localizedName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishMunicipality.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishMunicipality.normalize(input) === input;\n }\n\n /** All 290 Swedish municipalities, ordered by code. */\n static get all(): readonly SwedishMunicipality[] {\n return ALL_MUNICIPALITIES;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishMunicipality>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishMunicipality>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const municipality = SwedishMunicipality.tryParse(m[0]);\n if (!municipality) continue;\n out.push(\n new TextCandidate<SwedishMunicipality>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishMunicipality\",\n category: TextCandidateCategory.Geography,\n normalizedForm: municipality.toNormalizedString(),\n formattedForm: municipality.toString(),\n maskedForm: municipality.localizedName,\n confidence: TextMatchConfidence.Low,\n value: municipality,\n }),\n );\n }\n return out;\n }\n\n static distanceKilometers(a: SwedishMunicipality, b: SwedishMunicipality): number {\n return GeoCoordinate.distanceKilometers(a.coordinate, b.coordinate);\n }\n\n distanceKilometersTo(other: SwedishMunicipality | GeoCoordinate): number {\n const target = other instanceof SwedishMunicipality ? other.coordinate : other;\n return GeoCoordinate.distanceKilometers(this.coordinate, target);\n }\n\n findNeighbors(radiusKm: number): readonly MunicipalityDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: MunicipalityDistance[] = [];\n for (const m of ALL_MUNICIPALITIES) {\n if (m === this) continue;\n const dist = GeoCoordinate.distanceKilometers(this.coordinate, m.coordinate);\n if (dist <= radiusKm) out.push({ municipality: m, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n static findNeighbors(\n coordinate: GeoCoordinate,\n radiusKm: number,\n ): readonly MunicipalityDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: MunicipalityDistance[] = [];\n for (const m of ALL_MUNICIPALITIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, m.coordinate);\n if (dist <= radiusKm) out.push({ municipality: m, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toLocalString(): string {\n return this.localizedName;\n }\n\n equals(other: SwedishMunicipality | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: SwedishMunicipality | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n /** @internal */\n static _new(\n code: string,\n sv: string,\n en: string,\n county: SwedishCounty,\n coord: GeoCoordinate,\n ): SwedishMunicipality {\n return new SwedishMunicipality(code, sv, en, county, coord);\n }\n}\n\nconst ALL_MUNICIPALITIES: readonly SwedishMunicipality[] = MUNICIPALITY_ROWS.map((r) => {\n const county = SwedishCounty.parse(r.code.slice(0, 2));\n const coord = GeoCoordinate.create(r.lat, r.lon);\n return SwedishMunicipality._new(r.code, r.name, r.englishName ?? r.name, county, coord);\n})\n .slice()\n .sort((a, b) => a.code.localeCompare(b.code));\n\nconst BY_CODE = new Map<string, SwedishMunicipality>();\nconst BY_NAME = new Map<string, SwedishMunicipality>();\n\nfor (const m of ALL_MUNICIPALITIES) {\n BY_CODE.set(m.code, m);\n BY_NAME.set(m.localizedName.toLowerCase(), m);\n if (m.englishName.toLowerCase() !== m.localizedName.toLowerCase()) {\n BY_NAME.set(m.englishName.toLowerCase(), m);\n }\n addGenitive(m.localizedName, m);\n if (m.englishName.toLowerCase() !== m.localizedName.toLowerCase()) {\n addGenitive(m.englishName, m);\n }\n}\n\nfunction addGenitive(name: string, m: SwedishMunicipality): void {\n if (name.endsWith(\"s\") || name.endsWith(\"S\")) return;\n const key = (name + \"s\").toLowerCase();\n if (!BY_NAME.has(key)) BY_NAME.set(key, m);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= MIN_SCAN_NAME_LENGTH)\n .sort((a, b) => b.length - a.length)\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n // Unicode-aware word boundaries: \\b in JS is ASCII-only even with /u, so\n // we use look-around on Unicode letters/digits to mimic .NET's \\b behaviour.\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\nconst NAME_PATTERN =\n /^(?:[\\p{L}\\p{M}]{2,}|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\n/**\n * The postal city (`postort`) is the locality associated with a postal code.\n * Normalization applies Swedish-aware title casing.\n */\nexport class AddressCity {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"City\",\n localizedName: \"Postort\",\n emoji: \"\\u{1F3D9}\\uFE0F\",\n sources: Object.freeze([\"https://www.postnord.se/\"]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): AddressCity | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = collapseWhitespace(input);\n if (cleaned.length === 0 || cleaned.length > MAX_INPUT_LENGTH) return null;\n const capitalized = capitalizeEachWord(cleaned);\n if ([...capitalized].some(isDisallowed)) return null;\n if (!NAME_PATTERN.test(capitalized)) return null;\n return new AddressCity(capitalized);\n }\n\n static parse(input: string): AddressCity {\n const r = AddressCity.tryParse(input);\n if (r === null) throw new Error(\"Invalid city name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressCity.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressCity.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressCity.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressCity.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: AddressCity | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressCity | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input\n .split(\" \")\n .filter(Boolean)\n .map((w) => capitalizeHyphenated(w))\n .join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n\nfunction isDisallowed(c: string): boolean {\n return /[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\p{Cn}]/u.test(c);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\nconst ADDRESS_PATTERN = /^[\\p{L}0-9\\s,.:'/-]+$/u;\nconst CARE_OF = /^c[/.]o\\.?\\s+/i;\nconst APARTMENT = /[,\\s]+(?:lgh\\.?|lägenhet|apt\\.?)\\s*(\\d+\\w*)\\s*$/iu;\nconst BOX = /^(?:p\\.?o\\.?\\s*)?box\\s+(\\d{1,7})\\s*$/i;\nconst STREET_NUMBER = /^(.*?)\\s+(\\d+[A-ZÅÄÖ]*)$/u;\n\n/**\n * A street address (`gatuadress`). Extracts care-of (c/o), apartment number\n * (lgh/apt), and post box (Box) when present.\n */\nexport class AddressStreet {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Street Address\",\n localizedName: \"Gatuadress\",\n emoji: \"\\u{1F6E3}\\uFE0F\",\n sources: Object.freeze([\"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: string;\n readonly streetName: string | null;\n readonly streetNumber: string | null;\n readonly apartmentNumber: string | null;\n readonly careOf: string | null;\n readonly postBox: string | null;\n\n private constructor(\n street: string,\n streetName: string | null,\n streetNumber: string | null,\n apartmentNumber: string | null,\n careOf: string | null,\n postBox: string | null,\n ) {\n this.street = street;\n this.streetName = streetName;\n this.streetNumber = streetNumber;\n this.apartmentNumber = apartmentNumber;\n this.careOf = careOf;\n this.postBox = postBox;\n }\n\n get isPostBox(): boolean {\n return this.postBox !== null;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { city?: string | null; zipCode?: string | null },\n ): AddressStreet | null {\n if (input == null || input.trim() === \"\") return null;\n\n let text = collapseWhitespace(input);\n if (text.length === 0 || text.length > MAX_INPUT_LENGTH) return null;\n\n let careOf: string | null = null;\n const co = text.match(CARE_OF);\n if (co) {\n const after = text.slice(co[0].length);\n const comma = after.indexOf(\",\");\n if (comma >= 0) {\n careOf = after.slice(0, comma).trim();\n text = after.slice(comma + 1).trim();\n } else {\n careOf = after.trim();\n text = \"\";\n }\n if (careOf.trim() === \"\") careOf = null;\n }\n\n if (text.trim() !== \"\") {\n const boxText = collapseWhitespace(text.replace(/,/g, \" \"));\n const boxMatch = boxText.match(BOX);\n if (boxMatch) {\n const postBox = boxMatch[1]!;\n return new AddressStreet(`Box ${postBox}`, null, null, null, careOf, postBox);\n }\n }\n\n if (text.trim() === \"\") {\n if (careOf !== null) {\n return new AddressStreet(`c/o ${careOf}`, null, null, null, careOf, null);\n }\n return null;\n }\n\n let apartment: string | null = null;\n const apt = text.match(APARTMENT);\n if (apt) {\n apartment = apt[1]!;\n text = text.slice(0, apt.index!).trim();\n }\n\n const normalized = normalizeStreet(text, options?.city ?? null, options?.zipCode ?? null);\n if (!validateStreet(normalized)) return null;\n\n let streetName: string | null = null;\n let streetNumber: string | null = null;\n const num = normalized.match(STREET_NUMBER);\n if (num) {\n streetName = num[1]!;\n streetNumber = num[2]!;\n }\n\n return new AddressStreet(normalized, streetName, streetNumber, apartment, careOf, null);\n }\n\n static parse(input: string): AddressStreet {\n const r = AddressStreet.tryParse(input);\n if (r === null) throw new Error(\"Invalid street address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressStreet.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressStreet.tryParse(input);\n if (r) return r.street;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressStreet.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressStreet.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.street;\n }\n toString(): string {\n return this.street;\n }\n\n equals(other: AddressStreet | null | undefined): boolean {\n return other != null && this.street === other.street;\n }\n compareTo(other: AddressStreet | null | undefined): number {\n if (other == null) return 1;\n return this.street < other.street ? -1 : this.street > other.street ? 1 : 0;\n }\n}\n\nfunction normalizeStreet(input: string, city: string | null, zip: string | null): string {\n let cleaned = collapseWhitespace(input);\n if (cleaned === \"\") return \"\";\n cleaned = collapseWhitespace(cleaned.replace(/,/g, \" \"));\n cleaned = cleaned.replace(/(\\p{L})(\\d+\\p{L}*)$/u, \"$1 $2\");\n cleaned = collapseWhitespace(cleaned);\n let stripped = removeTrailingCityAndZip(cleaned, city, zip);\n if (shouldSentenceCase(stripped)) stripped = toSentenceCase(stripped);\n stripped = uppercaseHouseNumberSuffixes(stripped);\n return stripped;\n}\n\nfunction validateStreet(addr: string): boolean {\n if (!addr || addr.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(addr)) return false;\n if (addr !== addr.trim()) return false;\n if (addr.includes(\" \")) return false;\n if (addr.length < 5 || addr.length > 50) return false;\n if (/[\\p{Cn}]/u.test(addr)) return false;\n return ADDRESS_PATTERN.test(addr);\n}\n\nfunction shouldSentenceCase(input: string): boolean {\n if (!input || input.trim() === \"\") return false;\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return false;\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(PrimitivesDefaults.culture));\n let firstLetterIndex = -1;\n for (let i = 0; i < input.length; i++) {\n if (/\\p{L}/u.test(input[i]!)) {\n firstLetterIndex = i;\n break;\n }\n }\n if (firstLetterIndex === -1) return allUpper;\n const startsWithUpper =\n input[firstLetterIndex] ===\n input[firstLetterIndex]!.toLocaleUpperCase(PrimitivesDefaults.culture);\n return allUpper || !startsWithUpper;\n}\n\nfunction toSentenceCase(input: string): string {\n if (!input || input.trim() === \"\") return \"\";\n const culture = PrimitivesDefaults.culture;\n const lowered = input.toLocaleLowerCase(culture);\n let out = lowered;\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n out = lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n break;\n }\n }\n return uppercaseHouseNumberSuffixes(out);\n}\n\nfunction uppercaseHouseNumberSuffixes(input: string): string {\n return input.replace(\n /(\\d+)(\\p{L}+)(?=[^\\p{L}\\d]|$)/gu,\n (_, d: string, s: string) => d + s.toLocaleUpperCase(PrimitivesDefaults.culture),\n );\n}\n\nfunction removeTrailingCityAndZip(street: string, city: string | null, zip: string | null): string {\n const cityNorm = city == null ? \"\" : collapseWhitespace(city);\n const zipNorm = zip == null ? \"\" : collapseWhitespace(zip);\n const cityU = cityNorm.toUpperCase();\n const zipU = zipNorm.toUpperCase();\n const zipNoSpaceU = zipNorm.replace(/ /g, \"\").toUpperCase();\n const orig = collapseWhitespace(street.replace(/,/g, \" \"));\n const upper = orig.toUpperCase();\n\n const has = (s: string) => s.length > 0;\n const removeTail = (s: string, tail: number) =>\n tail <= 0 || tail > s.length ? s : collapseWhitespace(s.slice(0, s.length - tail));\n\n if (has(cityU) && has(zipU) && upper.endsWith(` ${zipU} ${cityU}`))\n return removeTail(orig, (zipU + \" \" + cityU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU} ${cityU}`))\n return removeTail(orig, (zipNoSpaceU + \" \" + cityU).length);\n if (has(cityU) && has(zipU) && upper.endsWith(` ${cityU} ${zipU}`))\n return removeTail(orig, (cityU + \" \" + zipU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${cityU} ${zipNoSpaceU}`))\n return removeTail(orig, (cityU + \" \" + zipNoSpaceU).length);\n if (has(cityU) && upper.endsWith(` ${cityU}`)) return removeTail(orig, cityU.length);\n if (has(zipU) && upper.endsWith(` ${zipU}`)) return removeTail(orig, zipU.length);\n if (has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU}`))\n return removeTail(orig, zipNoSpaceU.length);\n return orig;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SWEDISH_DIGITS = /^\\d{5}$/;\nconst INTERNATIONAL =\n /^(?:[0-9]{3}|[0-9]{4}|[0-9]{3}\\s?[0-9]{2}|[0-9]{6}|[0-9]{7}|[0-9]{4}\\s?[A-Z]{2}|[A-Z]{3}\\s?[0-9]{4}|980[0-9]{2}|(?:[A-Z][0-9]|[A-Z][0-9][A-Z]|[A-Z]{2}[0-9]|[A-Z]{2}[0-9][A-Z])\\s?[0-9][A-Z]{2}|[A-Z0-9]{7}|[A-Z]{2}[0-9]{3}|LT-?[0-9]{5}|LV-?[0-9]{4}|MD-?[0-9]{4}|DK[-\\s]?[0-9]{4})$/;\n\nconst SCAN = /(?<!\\d)\\d{3}\\s?\\d{2}(?!\\d)/g;\n\n/**\n * A postal code (`postnummer`). Swedish 5-digit codes (formatted `NNN NN`) and\n * many international formats (Danish `DK-9000`, Dutch `1012 AB`, British `W1A 1AB`)\n * are accepted.\n */\nexport class AddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Zip Code\",\n localizedName: \"Postnummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly country: Country | null;\n\n private constructor(value: string, formatted: string, country: Country | null) {\n this.value = value;\n this.formatted = formatted;\n this.country = country;\n }\n\n get isSwedish(): boolean {\n return this.country?.alpha2Code === \"SE\";\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): AddressZipCode | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const country = options?.country ?? null;\n const effectiveCountry = country?.alpha2Code ?? PrimitivesDefaults.countryAlpha2Code;\n\n if (country?.alpha2Code === \"SE\") return AddressZipCode.tryParseSwedish(sanitized);\n\n if (country) {\n const intl = AddressZipCode.tryParseInternational(sanitized, country);\n if (intl) return intl;\n return null;\n }\n\n if (effectiveCountry === \"SE\") {\n return (\n AddressZipCode.tryParseSwedish(sanitized) ?? AddressZipCode.tryParseInternational(sanitized)\n );\n }\n return (\n AddressZipCode.tryParseInternational(sanitized) ?? AddressZipCode.tryParseSwedish(sanitized)\n );\n }\n\n static parse(input: string, options?: { country?: Country | null }): AddressZipCode {\n const r = AddressZipCode.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid zip code.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): boolean {\n return AddressZipCode.tryParse(input, options) !== null;\n }\n\n /** Parse as a Swedish 5-digit postal code only. */\n static tryParseSwedish(input: string | null | undefined): AddressZipCode | null {\n if (input == null) return null;\n let cleaned = input.toString();\n for (let i = 0; i < cleaned.length; i++) {\n if (/\\p{L}/u.test(cleaned[i]!)) {\n cleaned = cleaned.slice(0, i).trimEnd();\n break;\n }\n }\n if (cleaned.length === 0) return null;\n const digits = keepDigits(cleaned);\n if (!SWEDISH_DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n return new AddressZipCode(digits, formatted, Country.Sweden);\n }\n\n /** Parse as a non-Swedish international postal code. */\n static tryParseInternational(\n input: string | null | undefined,\n country: Country | null = null,\n ): AddressZipCode | null {\n if (input == null) return null;\n const trimmed = input.toString();\n if (trimmed.length === 0) return null;\n if (/[\\p{Cc}]/u.test(trimmed)) return null;\n if (![...trimmed].every((c) => /[\\p{L}\\p{N}]/u.test(c) || /\\s/.test(c) || c === \"-\")) {\n return null;\n }\n const normalized = normalizeInternational(trimmed);\n if (!normalized) return null;\n if (!INTERNATIONAL.test(normalized)) return null;\n const resolved = country ?? inferCountryFromPrefix(normalized);\n return new AddressZipCode(normalized, normalized, resolved);\n }\n\n static format(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressZipCode.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<AddressZipCode>[] {\n if (!text) return [];\n const out: TextCandidate<AddressZipCode>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const zip = AddressZipCode.tryParseSwedish(m[0]);\n if (!zip) continue;\n out.push(\n new TextCandidate<AddressZipCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"AddressZipCode\",\n category: TextCandidateCategory.Contact,\n normalizedForm: zip.toNormalizedString(),\n formattedForm: zip.toString(),\n maskedForm: maskZip(zip),\n confidence: TextMatchConfidence.Low,\n value: zip,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n equals(other: AddressZipCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressZipCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction normalizeInternational(input: string): string {\n let cleaned = input.trim().toUpperCase().replace(/\\s+/g, \"\");\n const digits = keepDigits(cleaned);\n if (cleaned.startsWith(\"DK\") && digits.length === 4) return `DK-${digits}`;\n if (cleaned.startsWith(\"LV\") && digits.length === 4) return `LV-${digits}`;\n if (cleaned.startsWith(\"MD\") && digits.length === 4) return `MD-${digits}`;\n if (cleaned.startsWith(\"AD\") && digits.length === 3) return `AD${digits}`;\n cleaned = cleaned.replace(/[^A-Z0-9-]/g, \"\");\n if (/^\\d+-\\d+$/.test(cleaned)) return cleaned.replace(/-/g, \"\");\n return cleaned;\n}\n\nfunction inferCountryFromPrefix(normalized: string): Country | null {\n if (normalized.startsWith(\"DK-\")) return Country.Denmark;\n if (normalized.startsWith(\"LV-\")) return Country.Latvia;\n if (normalized.startsWith(\"MD-\")) return Country.tryParse(\"MD\");\n if (normalized.startsWith(\"AD\") && normalized.length === 5 && /^\\d+$/.test(normalized.slice(2))) {\n return Country.tryParse(\"AD\");\n }\n return null;\n}\n\n/** Internal masking for zip codes used in scan results. */\nexport function maskZip(zip: AddressZipCode): string {\n const f = zip.formatted;\n return f.replace(/\\d/g, \"*\");\n}\n","import type { Country } from \"../geography/index.js\";\nimport type { Address } from \"./address.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\n\n/**\n * A country-specific address implementation, registered by the module that\n * defines it.\n *\n * `Address` lives below the country-specific address types in the import graph,\n * so it cannot reference them directly. Each implementation registers itself on\n * module load instead, mirroring the static registry the .NET `Address` type\n * builds at type-initialization time.\n *\n * Registration happens in `registerDefaultCountryAddresses()`, which every\n * package entry point calls via `contact/index.ts`. Code inside this package\n * that deep-imports `address.ts` alone will only see the countries it\n * registered itself.\n */\nexport interface CountryAddressRegistration {\n readonly country: Country;\n readonly tryWrap: (address: Address) => ICountryAddress | null;\n readonly formatZip: (value: string) => string | null;\n}\n\nconst registry = new Map<string, CountryAddressRegistration>();\n\n/** Registration order determines the order of `Address.supportedCountryAddressTypes`. */\nexport function registerCountryAddress(registration: CountryAddressRegistration): void {\n registry.set(registration.country.alpha2Code.toUpperCase(), registration);\n}\n\nexport function getCountryAddressRegistration(\n alpha2Code: string,\n): CountryAddressRegistration | null {\n return registry.get(alpha2Code.toUpperCase()) ?? null;\n}\n\nexport function getRegisteredCountryAddressCountries(): readonly Country[] {\n return Object.freeze([...registry.values()].map((r) => r.country));\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\nimport {\n getCountryAddressRegistration,\n getRegisteredCountryAddressCountries,\n} from \"./country-address-registry.js\";\n\nconst MAX_INPUT_LENGTH = 1000;\n\n/** A complete address combining street, zip, city and country. */\nexport class Address {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Address\",\n localizedName: \"Adress\",\n emoji: \"\\u{1F3E0}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://www.lantmateriet.se/\",\n \"https://www.iso.org/iso-3166-country-codes.html\",\n ]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: AddressZipCode | null;\n readonly city: AddressCity | null;\n readonly country: Country | null;\n\n constructor(\n street: AddressStreet,\n zipCode: AddressZipCode | null = null,\n city: AddressCity | null = null,\n country: Country | null = null,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.country = country;\n }\n\n get careOf(): string | null {\n return this.street.careOf;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n static tryParse(input: string | null | undefined): Address | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): Address | null;\n static tryParse(arg: unknown): Address | null {\n if (typeof arg === \"object\" && arg !== null) {\n const p = arg as {\n street?: string | null;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n };\n const cityM = p.city != null && p.city.trim() !== \"\" ? AddressCity.tryParse(p.city) : null;\n const zipM =\n p.zipCode != null && p.zipCode.trim() !== \"\" ? AddressZipCode.tryParse(p.zipCode) : null;\n const countryM =\n p.country != null && p.country.trim() !== \"\" ? Country.tryParse(p.country) : null;\n if (p.zipCode != null && p.zipCode.trim() !== \"\" && zipM === null) return null;\n if (p.city != null && p.city.trim() !== \"\" && cityM === null) return null;\n if (p.country != null && p.country.trim() !== \"\" && countryM === null) return null;\n const streetM = AddressStreet.tryParse(p.street, {\n city: cityM?.value ?? null,\n zipCode: zipM?.formatted ?? zipM?.value ?? null,\n });\n if (streetM === null) return null;\n return new Address(streetM, zipM, cityM, countryM);\n }\n\n const input = arg as string | null | undefined;\n if (input == null || input.trim() === \"\") return null;\n const trimmed = input.trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const segments = splitSegments(trimmed);\n if (segments.length === 0) return null;\n\n let country: Country | null = null;\n country = consumeCountry(segments, country);\n\n let zipCode: AddressZipCode | null = null;\n let city: AddressCity | null = null;\n if (segments.length > 0) {\n const r = consumeZipAndCity(segments);\n if (r) {\n zipCode = r.zipCode;\n city = r.city;\n }\n }\n\n let streetText = segments.join(\", \");\n if (zipCode === null || city === null) {\n const ext = extractTrailingZipCity(streetText);\n if (ext) {\n streetText = ext.street;\n zipCode = zipCode ?? ext.zipCode;\n city = city ?? ext.city;\n }\n }\n\n if (streetText.trim() === \"\") return null;\n const street = AddressStreet.tryParse(streetText, {\n city: city?.value ?? null,\n zipCode: zipCode?.formatted ?? zipCode?.value ?? null,\n });\n if (street === null) return null;\n return new Address(street, zipCode, city, country);\n }\n\n static parse(input: string): Address {\n const r = Address.tryParse(input);\n if (r === null) throw new Error(\"Invalid address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Address.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Address.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish-style addresses.\n *\n * Results are heuristic candidates and can include false positives. Zip-code\n * anchored matches receive medium confidence, while street-only matches\n * receive low confidence.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Address>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<Address>[] = [];\n const covered: Array<[number, number]> = [];\n\n collectAddressMatches(\n text,\n ZIP_ANCHORED_SCAN_PATTERN,\n TextMatchConfidence.Medium,\n results,\n covered,\n );\n collectAddressMatches(\n text,\n STREET_ONLY_SCAN_PATTERN,\n TextMatchConfidence.Low,\n results,\n covered,\n );\n\n return results.sort((a, b) => a.startIndex - b.startIndex);\n }\n\n toNormalizedString(): string {\n const parts: string[] = [this.buildStreetLine()];\n if (this.zipCode) parts.push(this.zipCode.value);\n if (this.city) parts.push(this.city.value);\n if (this.country) parts.push(this.country.alpha2Code);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const useEnglish = !PrimitivesDefaults.useLocalizedDisplayNames;\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) lines.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n lines.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return lines.join(\"\\n\");\n }\n\n toDisplayString(): string {\n return this.buildSingleLine(!PrimitivesDefaults.useLocalizedDisplayNames);\n }\n toEnglishString(): string {\n return this.buildSingleLine(true);\n }\n toNativeString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && !isSweden(this.country)) parts.push(this.country.nativeName);\n return parts.join(\", \");\n }\n\n toString(): string {\n return this.toDisplayString();\n }\n\n toDomesticString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) parts.push(locality);\n return parts.join(\", \");\n }\n\n /**\n * Multi-line form without the country line, using the country's own zip-code\n * formatting when a country-specific address type is registered.\n */\n toDomesticMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) lines.push(locality);\n return lines.join(\"\\n\");\n }\n\n /**\n * Wraps this address in its country-specific type when the country is known\n * and an implementation is registered, otherwise `null`.\n */\n asCountryAddress(): ICountryAddress | null {\n if (this.country === null) return null;\n return getCountryAddressRegistration(this.country.alpha2Code)?.tryWrap(this) ?? null;\n }\n\n /** Countries that have a dedicated country-specific address type. */\n static get supportedCountryAddressTypes(): readonly Country[] {\n return getRegisteredCountryAddressCountries();\n }\n\n private buildStreetLine(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n return parts.join(\", \");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n private buildLocalityLine(): string | null {\n let s = \"\";\n if (this.zipCode) s += this.zipCode.formatted;\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private buildDomesticLocalityLine(): string | null {\n let s = this.countryFormattedZip() ?? this.zipCode?.formatted ?? \"\";\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private countryFormattedZip(): string | null {\n if (this.zipCode === null || this.country === null) return null;\n return (\n getCountryAddressRegistration(this.country.alpha2Code)?.formatZip(this.zipCode.value) ?? null\n );\n }\n\n private buildSingleLine(useEnglish: boolean): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n parts.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return parts.join(\", \");\n }\n}\n\nfunction isSweden(c: Country): boolean {\n return c.alpha2Code.toUpperCase() === \"SE\";\n}\n\nconst STREET_SUFFIX_PATTERN = String.raw`(?:gatan|gata|vägen|väg|allén|allé|torget|torg|platsen|plats|stigen|stig|gränden|gränd|gången|gång|leden|led|backen|backe|kajen|kaj|bron|plan|stråket|terrassen|ringen|parken|hamnen)`;\n\nconst STREET_NAME_PATTERN =\n String.raw`(?:[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]+\\s+)*[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]*` +\n STREET_SUFFIX_PATTERN;\n\nconst ZIP_ANCHORED_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>(?:c\\/o\\s+[\\p{L}\\p{M} .'-]+,\\s*)?` +\n STREET_NAME_PATTERN +\n String.raw`\\s+\\d{1,4}[\\p{L}]?,?\\s+\\d{3}\\s?\\d{2}\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+(?:\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+)*(?:,\\s*(?:SE|Sverige|Sweden))?)`,\n \"gu\",\n);\n\nconst STREET_ONLY_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>` + STREET_NAME_PATTERN + String.raw`\\s+\\d{1,4}[\\p{L}]?)`,\n \"gu\",\n);\n\nfunction collectAddressMatches(\n text: string,\n pattern: RegExp,\n confidence: TextMatchConfidence,\n results: TextCandidate<Address>[],\n covered: Array<[number, number]>,\n): void {\n pattern.lastIndex = 0;\n for (const match of text.matchAll(pattern)) {\n const candidateText = match.groups?.candidate ?? match[0];\n const startIndex = match.index ?? 0;\n const endIndex = startIndex + candidateText.length;\n if (covered.some(([start, end]) => startIndex < end && start < endIndex)) continue;\n\n const value = Address.tryParse(candidateText);\n if (!value) continue;\n\n covered.push([startIndex, endIndex]);\n results.push(\n new TextCandidate({\n startIndex,\n length: candidateText.length,\n originalText: candidateText,\n typeName: \"Address\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskAddressForScan(value),\n confidence,\n value,\n }),\n );\n }\n}\n\nfunction maskAddressForScan(address: Address): string {\n return address.toString().replace(/\\d/g, \"*\");\n}\n\nfunction splitSegments(input: string): string[] {\n return input\n .replace(/\\r/g, \"\\n\")\n .split(/[\\n,]/)\n .map((s) => collapseWhitespace(s))\n .filter((s) => s !== \"\");\n}\n\nfunction consumeCountry(segments: string[], current: Country | null): Country | null {\n if (segments.length === 0 || current !== null) return current;\n const last = segments[segments.length - 1]!;\n const direct = Country.tryParse(last);\n if (direct) {\n segments.pop();\n return direct;\n }\n const tokens = last.split(\" \").filter((t) => t !== \"\");\n for (let n = Math.min(5, tokens.length); n >= 1; n--) {\n const suffix = tokens.slice(tokens.length - n).join(\" \");\n const parsed = Country.tryParse(suffix);\n if (!parsed) continue;\n const prefix = tokens.slice(0, tokens.length - n).join(\" \");\n if (prefix.trim() === \"\") segments.pop();\n else segments[segments.length - 1] = prefix;\n return parsed;\n }\n return current;\n}\n\nfunction consumeZipAndCity(\n segments: string[],\n): { zipCode: AddressZipCode; city: AddressCity } | null {\n if (segments.length === 0) return null;\n const last = segments[segments.length - 1]!;\n const r = parseZipAndCity(last);\n if (!r) return null;\n segments.pop();\n return r;\n}\n\nfunction parseZipAndCity(input: string): { zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const zip = tokens.slice(0, n).join(\" \");\n const city = tokens.slice(n).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n const c = AddressCity.tryParse(city);\n if (z && c) return { zipCode: z, city: c };\n }\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const cityP = tokens.slice(0, tokens.length - n).join(\" \");\n const zipS = tokens.slice(tokens.length - n).join(\" \");\n const z = AddressZipCode.tryParse(zipS);\n const c = AddressCity.tryParse(cityP);\n if (z && c) return { zipCode: z, city: c };\n }\n return null;\n}\n\nfunction extractTrailingZipCity(\n input: string,\n): { street: string; zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 3) return null;\n for (let zipStart = tokens.length - 2; zipStart >= 1; zipStart--) {\n for (let zipCount = 1; zipCount <= Math.min(3, tokens.length - zipStart - 1); zipCount++) {\n const zip = tokens.slice(zipStart, zipStart + zipCount).join(\" \");\n const city = tokens.slice(zipStart + zipCount).join(\" \");\n const street = tokens.slice(0, zipStart).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n if (!z) continue;\n const c = AddressCity.tryParse(city);\n if (!c) continue;\n if (street.trim() === \"\") continue;\n return { street, zipCode: z, city: c };\n }\n }\n return null;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\n\nconst CODE_TO_COUNTRY: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"7\": \"RU\",\n \"20\": \"EG\",\n \"27\": \"ZA\",\n \"30\": \"GR\",\n \"31\": \"NL\",\n \"32\": \"BE\",\n \"33\": \"FR\",\n \"34\": \"ES\",\n \"36\": \"HU\",\n \"39\": \"IT\",\n \"40\": \"RO\",\n \"41\": \"CH\",\n \"43\": \"AT\",\n \"44\": \"GB\",\n \"45\": \"DK\",\n \"46\": \"SE\",\n \"47\": \"NO\",\n \"48\": \"PL\",\n \"49\": \"DE\",\n \"51\": \"PE\",\n \"52\": \"MX\",\n \"53\": \"CU\",\n \"54\": \"AR\",\n \"55\": \"BR\",\n \"56\": \"CL\",\n \"57\": \"CO\",\n \"58\": \"VE\",\n \"60\": \"MY\",\n \"61\": \"AU\",\n \"62\": \"ID\",\n \"63\": \"PH\",\n \"64\": \"NZ\",\n \"65\": \"SG\",\n \"66\": \"TH\",\n \"81\": \"JP\",\n \"82\": \"KR\",\n \"84\": \"VN\",\n \"86\": \"CN\",\n \"90\": \"TR\",\n \"91\": \"IN\",\n \"92\": \"PK\",\n \"93\": \"AF\",\n \"94\": \"LK\",\n \"95\": \"MM\",\n \"98\": \"IR\",\n \"211\": \"SS\",\n \"212\": \"MA\",\n \"213\": \"DZ\",\n \"216\": \"TN\",\n \"218\": \"LY\",\n \"220\": \"GM\",\n \"221\": \"SN\",\n \"222\": \"MR\",\n \"223\": \"ML\",\n \"224\": \"GN\",\n \"225\": \"CI\",\n \"226\": \"BF\",\n \"227\": \"NE\",\n \"228\": \"TG\",\n \"229\": \"BJ\",\n \"230\": \"MU\",\n \"231\": \"LR\",\n \"232\": \"SL\",\n \"233\": \"GH\",\n \"234\": \"NG\",\n \"235\": \"TD\",\n \"236\": \"CF\",\n \"237\": \"CM\",\n \"238\": \"CV\",\n \"239\": \"ST\",\n \"240\": \"GQ\",\n \"241\": \"GA\",\n \"242\": \"CG\",\n \"243\": \"CD\",\n \"244\": \"AO\",\n \"245\": \"GW\",\n \"248\": \"SC\",\n \"249\": \"SD\",\n \"250\": \"RW\",\n \"251\": \"ET\",\n \"252\": \"SO\",\n \"253\": \"DJ\",\n \"254\": \"KE\",\n \"255\": \"TZ\",\n \"256\": \"UG\",\n \"257\": \"BI\",\n \"258\": \"MZ\",\n \"260\": \"ZM\",\n \"261\": \"MG\",\n \"263\": \"ZW\",\n \"264\": \"NA\",\n \"265\": \"MW\",\n \"266\": \"LS\",\n \"267\": \"BW\",\n \"268\": \"SZ\",\n \"269\": \"KM\",\n \"291\": \"ER\",\n \"297\": \"AW\",\n \"298\": \"FO\",\n \"299\": \"GL\",\n \"350\": \"GI\",\n \"351\": \"PT\",\n \"352\": \"LU\",\n \"353\": \"IE\",\n \"354\": \"IS\",\n \"355\": \"AL\",\n \"356\": \"MT\",\n \"357\": \"CY\",\n \"358\": \"FI\",\n \"359\": \"BG\",\n \"370\": \"LT\",\n \"371\": \"LV\",\n \"372\": \"EE\",\n \"373\": \"MD\",\n \"374\": \"AM\",\n \"375\": \"BY\",\n \"376\": \"AD\",\n \"377\": \"MC\",\n \"378\": \"SM\",\n \"379\": \"VA\",\n \"380\": \"UA\",\n \"381\": \"RS\",\n \"382\": \"ME\",\n \"383\": \"XK\",\n \"385\": \"HR\",\n \"386\": \"SI\",\n \"387\": \"BA\",\n \"389\": \"MK\",\n \"420\": \"CZ\",\n \"421\": \"SK\",\n \"423\": \"LI\",\n \"501\": \"BZ\",\n \"502\": \"GT\",\n \"503\": \"SV\",\n \"504\": \"HN\",\n \"505\": \"NI\",\n \"506\": \"CR\",\n \"507\": \"PA\",\n \"509\": \"HT\",\n \"591\": \"BO\",\n \"592\": \"GY\",\n \"593\": \"EC\",\n \"595\": \"PY\",\n \"597\": \"SR\",\n \"598\": \"UY\",\n \"599\": \"CW\",\n \"670\": \"TL\",\n \"673\": \"BN\",\n \"674\": \"NR\",\n \"675\": \"PG\",\n \"676\": \"TO\",\n \"677\": \"SB\",\n \"678\": \"VU\",\n \"679\": \"FJ\",\n \"680\": \"PW\",\n \"685\": \"WS\",\n \"686\": \"KI\",\n \"688\": \"TV\",\n \"691\": \"FM\",\n \"692\": \"MH\",\n \"850\": \"KP\",\n \"852\": \"HK\",\n \"853\": \"MO\",\n \"855\": \"KH\",\n \"856\": \"LA\",\n \"880\": \"BD\",\n \"886\": \"TW\",\n \"960\": \"MV\",\n \"961\": \"LB\",\n \"962\": \"JO\",\n \"963\": \"SY\",\n \"964\": \"IQ\",\n \"965\": \"KW\",\n \"966\": \"SA\",\n \"967\": \"YE\",\n \"968\": \"OM\",\n \"970\": \"PS\",\n \"971\": \"AE\",\n \"972\": \"IL\",\n \"973\": \"BH\",\n \"974\": \"QA\",\n \"975\": \"BT\",\n \"976\": \"MN\",\n \"977\": \"NP\",\n \"992\": \"TJ\",\n \"993\": \"TM\",\n \"994\": \"AZ\",\n \"995\": \"GE\",\n \"996\": \"KG\",\n \"998\": \"UZ\",\n});\n\n/** A phone country calling code (`landsnummer`) e.g. `+46` for Sweden. */\nexport class PhoneCallingCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Calling Code\",\n localizedName: \"Landsnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/List_of_country_calling_codes\",\n ]),\n });\n\n readonly value: string;\n readonly countryCode: string | null;\n\n private constructor(value: string, countryCode: string | null) {\n this.value = value;\n this.countryCode = countryCode;\n }\n\n /** @internal */\n static _new(value: string, countryCode: string | null): PhoneCallingCode {\n return new PhoneCallingCode(value, countryCode);\n }\n\n /** @internal */\n static fromResolvedDigits(digits: string): PhoneCallingCode {\n return new PhoneCallingCode(digits, CODE_TO_COUNTRY[digits] ?? null);\n }\n\n static tryParse(input: string | null | undefined): PhoneCallingCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = extractDigits(input.trim());\n if (digits === null) return null;\n const country = CODE_TO_COUNTRY[digits];\n if (country == null) return null;\n return new PhoneCallingCode(digits, country);\n }\n\n static parse(input: string): PhoneCallingCode {\n const r = PhoneCallingCode.tryParse(input);\n if (r === null) throw new Error(\"Unknown phone calling code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PhoneCallingCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneCallingCode.normalize(input) === input;\n }\n\n static get all(): readonly PhoneCallingCode[] {\n return ALL;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return `+${this.value}`;\n }\n\n equals(other: PhoneCallingCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PhoneCallingCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n\n /** Sweden (+46). */\n static get Sweden(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+46\");\n }\n /** Norway (+47). */\n static get Norway(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+47\");\n }\n /** Finland (+358). */\n static get Finland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+358\");\n }\n /** Denmark (+45). */\n static get Denmark(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+45\");\n }\n /** Germany (+49). */\n static get Germany(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+49\");\n }\n /** Poland (+48). */\n static get Poland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+48\");\n }\n /** Estonia (+372). */\n static get Estonia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+372\");\n }\n /** Lithuania (+370). */\n static get Lithuania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+370\");\n }\n /** Romania (+40). */\n static get Romania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+40\");\n }\n /** Bulgaria (+359). */\n static get Bulgaria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+359\");\n }\n /** Latvia (+371). */\n static get Latvia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+371\");\n }\n /** Czech Republic (+420). */\n static get CzechRepublic(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+420\");\n }\n /** Spain (+34). */\n static get Spain(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+34\");\n }\n /** Netherlands (+31). */\n static get Netherlands(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+31\");\n }\n /** Greece (+30). */\n static get Greece(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+30\");\n }\n /** Italy (+39). */\n static get Italy(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+39\");\n }\n /** Slovenia (+386). */\n static get Slovenia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+386\");\n }\n /** Croatia (+385). */\n static get Croatia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+385\");\n }\n /** Portugal (+351). */\n static get Portugal(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+351\");\n }\n /** Hungary (+36). */\n static get Hungary(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+36\");\n }\n /** France (+33). */\n static get France(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+33\");\n }\n /** Slovakia (+421). */\n static get Slovakia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+421\");\n }\n /** Belgium (+32). */\n static get Belgium(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+32\");\n }\n /** United Kingdom (+44). */\n static get UnitedKingdom(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+44\");\n }\n /** Austria (+43). */\n static get Austria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+43\");\n }\n /** Cyprus (+357). */\n static get Cyprus(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+357\");\n }\n /** Iceland (+354). */\n static get Iceland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+354\");\n }\n /** Switzerland (+41). */\n static get Switzerland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+41\");\n }\n /** Ireland (+353). */\n static get Ireland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+353\");\n }\n /** Luxembourg (+352). */\n static get Luxembourg(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+352\");\n }\n /** Malta (+356). */\n static get Malta(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+356\");\n }\n /** Liechtenstein (+423). */\n static get Liechtenstein(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+423\");\n }\n /** United States (+1). */\n static get UnitedStates(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+1\");\n }\n /** Russia (+7). */\n static get Russia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+7\");\n }\n}\n\nconst ALL: readonly PhoneCallingCode[] = Object.entries(CODE_TO_COUNTRY).map(([code, cc]) =>\n PhoneCallingCode._new(code, cc),\n);\n\nfunction extractDigits(input: string): string | null {\n if (input.startsWith(\"+\")) return input.slice(1);\n if (input.startsWith(\"00\") && input.length > 2) return input.slice(2);\n if (input.length >= 1 && input.length <= 3 && /^\\d+$/.test(input)) return input;\n return null;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\nimport { PhoneCallingCode } from \"./phone-calling-code.js\";\n\nconst MAX_INPUT_LENGTH = 50;\nconst URI_PREFIXES = [\"callto:\", \"tel:\", \"sms:\", \"call:\"];\n\nconst TWO_DIGIT_CODES = new Set([\n \"20\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"36\",\n \"39\",\n \"40\",\n \"41\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"49\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"81\",\n \"82\",\n \"84\",\n \"86\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n]);\n\nconst LEADING_ZERO_SIGNIFICANT = new Set([\"39\"]);\n\nconst SCAN =\n /(?:(?:\\+|00)\\d{1,3}[\\s-]\\(?\\d{1,4}\\)?[\\s-]?\\d[\\d\\s-]{5,12}\\d)|(?:(?:\\+|00)\\d{7,15})|(?:0\\d{1,3}[\\s-]?\\d[\\d\\s-]{5,10}\\d)/g;\n\n/**\n * A phone number (`telefonnummer`). Stored normalized as `00` + country code +\n * subscriber digits (e.g. `0046701740633`). Use {@link toE164String} for the\n * `+`-prefixed E.164 form.\n */\nexport class PhoneNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Phone Number\",\n localizedName: \"Telefonnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://pts.se/\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/E.164\",\n ]),\n });\n\n readonly digits: string;\n readonly countryCallingCode: PhoneCallingCode;\n readonly country: Country | null;\n readonly isSwedish: boolean;\n readonly isMobile: boolean;\n\n private constructor(digits: string, isSwedish: boolean, isMobile: boolean) {\n this.digits = digits;\n this.isSwedish = isSwedish;\n this.isMobile = isMobile;\n this.countryCallingCode = PhoneCallingCode.fromResolvedDigits(resolveCallingCode(digits));\n this.country = Country.tryFindByCallingCode(this.countryCallingCode.value);\n }\n\n get isSwedishTestPhoneNumber(): boolean {\n if (!this.isSwedish) return false;\n const local = this.digits.slice(4);\n return (\n isInPtsRange(local, \"7017406\", 5, 99) ||\n isInPtsRange(local, \"3139006\", 0, 99) ||\n isInPtsRange(local, \"4062804\", 0, 99) ||\n isInPtsRange(local, \"8465004\", 0, 99) ||\n isInPtsRange(local, \"9803192\", 0, 99)\n );\n }\n\n get formatted(): string {\n return this.isSwedish ? this.toLocalString() : this.toDisplayInternationalString();\n }\n\n static tryParse(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const dcc = resolveDefaultCallingCode(defaultCallingCode);\n if (!dcc) return null;\n\n let cleaned = sanitizeInput(input).trim();\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n\n for (const prefix of URI_PREFIXES) {\n if (cleaned.toLowerCase().startsWith(prefix)) {\n cleaned = cleaned.slice(prefix.length).trimStart();\n break;\n }\n }\n\n const hasPlus = cleaned.startsWith(\"+\");\n const withOAs0 = cleaned.replace(/O/g, \"0\");\n const digitsOnly = withOAs0.replace(/[^\\d]/g, \"\");\n if (digitsOnly === \"\") return null;\n\n let e164: string;\n if (hasPlus) {\n if (digitsOnly.length < 7 || digitsOnly.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(digitsOnly);\n } else if (digitsOnly.startsWith(\"00\")) {\n const cn = digitsOnly.slice(2);\n if (cn.length < 7 || cn.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(cn);\n } else if (digitsOnly.startsWith(dcc) && digitsOnly.length >= dcc.length + 7) {\n const subscriber = digitsOnly.slice(dcc.length);\n e164 = dcc + stripSingleTrunkZero(dcc, subscriber);\n } else if (digitsOnly.startsWith(\"0\")) {\n const subscriber = stripSingleTrunkZero(dcc, digitsOnly);\n const total = dcc.length + subscriber.length;\n if (total < 7 || total > 15) return null;\n e164 = dcc + subscriber;\n } else if (dcc === \"46\" && digitsOnly.length === 9 && digitsOnly.startsWith(\"7\")) {\n e164 = \"46\" + digitsOnly;\n } else {\n return null;\n }\n\n if (e164.length < 7 || e164.length > 15) return null;\n const isSwedish = e164.startsWith(\"46\");\n if (isSwedish) {\n const local = e164.slice(2);\n if (local.length < 7 || local.length > 9) return null;\n }\n const isMobile = isSwedish && e164.slice(2).startsWith(\"7\");\n return new PhoneNumber(\"00\" + e164, isSwedish, isMobile);\n }\n\n static parse(\n input: string,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber {\n const r = PhoneNumber.tryParse(input, defaultCallingCode);\n if (r === null) throw new Error(\"Invalid phone number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): boolean {\n return PhoneNumber.tryParse(input, defaultCallingCode) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const dcc =\n resolveDefaultCallingCode(options?.defaultCallingCode) ??\n PrimitivesDefaults.defaultCallingCode;\n const r = PhoneNumber.tryParse(input, dcc);\n if (r) {\n return r.countryCallingCode.value === dcc\n ? r.toLocalString()\n : r.toDisplayInternationalString();\n }\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const r = PhoneNumber.tryParse(input, options?.defaultCallingCode);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneNumber.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<PhoneNumber>[] {\n if (!text) return [];\n const out: TextCandidate<PhoneNumber>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const phone = PhoneNumber.tryParse(m[0]);\n if (!phone) continue;\n out.push(\n new TextCandidate<PhoneNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"PhoneNumber\",\n category: TextCandidateCategory.Contact,\n normalizedForm: phone.toNormalizedString(),\n formattedForm: phone.toString(),\n maskedForm: maskPhoneNumber(phone),\n confidence: TextMatchConfidence.Medium,\n value: phone,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toLocalString(defaultCallingCode?: PhoneCallingCode | Country): string {\n if (defaultCallingCode) {\n const dcc =\n defaultCallingCode instanceof PhoneCallingCode\n ? defaultCallingCode.value\n : defaultCallingCode.callingCode;\n return this.countryCallingCode.value === dcc\n ? this.toLocalString()\n : this.toDisplayInternationalString();\n }\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n if (this.isSwedish) return formatSwedishLocal(\"0\" + subscriber);\n return \"0\" + subscriber;\n }\n\n toE164String(): string {\n return \"+\" + this.digits.slice(2);\n }\n toInternationalString(): string {\n return this.toE164String();\n }\n\n toDisplayInternationalString(): string {\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n return (\n \"+\" +\n this.countryCallingCode.value +\n \" \" +\n formatInternationalSubscriberDigits(this.countryCallingCode.value, subscriber)\n );\n }\n\n toString(): string {\n return this.formatted;\n }\n\n equals(other: PhoneNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: PhoneNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Mask a phone number, keeping country code and last 4 digits visible. */\nexport function maskPhoneNumber(p: PhoneNumber): string {\n const f = p.toE164String();\n if (f.length <= 5) return f.replace(/\\d/g, \"*\");\n const cc = \"+\" + p.countryCallingCode.value;\n const subscriber = f.slice(cc.length);\n if (subscriber.length <= 4) return cc + \"*\".repeat(subscriber.length);\n return cc + \"*\".repeat(subscriber.length - 4) + subscriber.slice(-4);\n}\n\nfunction resolveDefaultCallingCode(\n d: string | PhoneCallingCode | Country | null | undefined,\n): string | null {\n if (d == null) return PrimitivesDefaults.defaultCallingCode;\n if (typeof d === \"string\") return d;\n if (d instanceof PhoneCallingCode) return d.value;\n return d.callingCode;\n}\n\nfunction resolveCallingCode(digits: string): string {\n return resolveCallingCodeFromE164(digits.slice(2));\n}\n\nfunction resolveCallingCodeFromE164(e164: string): string {\n if (e164.length === 0) return \"\";\n if (e164[0] === \"1\" || e164[0] === \"7\") return e164.slice(0, 1);\n if (e164.length >= 2 && TWO_DIGIT_CODES.has(e164.slice(0, 2))) return e164.slice(0, 2);\n return e164.length >= 3 ? e164.slice(0, 3) : e164;\n}\n\nfunction stripTrunkZeroAfterCallingCode(e164: string): string {\n const cc = resolveCallingCodeFromE164(e164);\n if (cc.length === 0 || cc.length >= e164.length) return e164;\n const subscriber = e164.slice(cc.length);\n return cc + stripSingleTrunkZero(cc, subscriber);\n}\n\nfunction stripSingleTrunkZero(callingCode: string, subscriber: string): string {\n if (subscriber.length === 0 || subscriber[0] !== \"0\") return subscriber;\n if (LEADING_ZERO_SIGNIFICANT.has(callingCode)) return subscriber;\n return subscriber.slice(1);\n}\n\nfunction isInPtsRange(local: string, prefix: string, from: number, to: number): boolean {\n if (!local.startsWith(prefix)) return false;\n const suffix = local.slice(prefix.length);\n if (suffix.length !== 2) return false;\n const n = parseInt(suffix, 10);\n return Number.isFinite(n) && n >= from && n <= to;\n}\n\nfunction formatInternationalSubscriberDigits(callingCode: string, digits: string): string {\n if (callingCode === \"1\" && digits.length === 10) {\n return `${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6, 10)}`;\n }\n switch (digits.length) {\n case 7:\n return `${digits.slice(0, 3)} ${digits.slice(3, 5)} ${digits.slice(5, 7)}`;\n case 8:\n return `${digits.slice(0, 2)} ${digits.slice(2, 4)} ${digits.slice(4, 6)} ${digits.slice(6, 8)}`;\n case 9:\n return `${digits.slice(0, 2)} ${digits.slice(2, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n case 10:\n return `${digits.slice(0, 2)} ${digits.slice(2, 6)} ${digits.slice(6, 10)}`;\n case 11:\n return `${digits.slice(0, 3)} ${digits.slice(3, 7)} ${digits.slice(7, 11)}`;\n default:\n return digits;\n }\n}\n\nfunction formatSwedishLocal(number: string): string {\n const digits = number.replace(/^0+/, \"\");\n if (digits.length === 9) {\n return `0${digits.slice(0, 3)}-${digits.slice(3, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n }\n if (digits.length === 7) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 6)}`;\n }\n if (digits.length === 8) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 7)}`;\n }\n return number;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\n\nconst DIGITS = /^\\d{5}$/;\n\n/** A Swedish postal code (`postnummer`) — strictly 5 digits, formatted `NNN NN`. */\nexport class SwedishAddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Zip Code\",\n localizedName: \"Svenskt postnummer\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n\n get country(): Country {\n return Country.Sweden;\n }\n\n private constructor(value: string, formatted: string, zipCode: AddressZipCode) {\n this.value = value;\n this.formatted = formatted;\n this.zipCode = zipCode;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddressZipCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = [...input].filter((c) => c >= \"0\" && c <= \"9\").join(\"\");\n if (!DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n const az = AddressZipCode.tryParse(formatted, { country: Country.Sweden });\n if (az === null) return null;\n return new SwedishAddressZipCode(digits, formatted, az);\n }\n\n static parse(input: string): SwedishAddressZipCode {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish zip code. Expected 5-digit format (NNN NN).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddressZipCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddressZipCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport type { ICountryAddressZipCode } from \"./country-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\n/** A Swedish address — street + 5-digit zip + city, all within Sweden. */\nexport class SwedishAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Address\",\n localizedName: \"Svensk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\"https://www.postnord.se/\", \"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: SwedishAddressZipCode;\n readonly city: AddressCity;\n readonly address: Address;\n\n get country(): Country {\n return Country.Sweden;\n }\n /** The zip code as the country-agnostic {@link ICountryAddressZipCode} view. */\n get countryZipCode(): ICountryAddressZipCode {\n return this.zipCode;\n }\n get careOf(): string | null {\n return this.street.careOf;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n private constructor(\n street: AddressStreet,\n zipCode: SwedishAddressZipCode,\n city: AddressCity,\n address: Address,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.address = address;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddress | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): SwedishAddress | null;\n static tryParse(arg: unknown): SwedishAddress | null {\n const address =\n typeof arg === \"object\" && arg !== null\n ? Address.tryParse(arg as never)\n : Address.tryParse(arg as string | null | undefined);\n if (address === null) return null;\n return SwedishAddress.tryWrap(address);\n }\n\n static parse(input: string): SwedishAddress {\n const r = SwedishAddress.tryParse(input);\n if (r === null) {\n throw new Error(\n \"Invalid Swedish address. Requires street, 5-digit zip code, and city within Sweden.\",\n );\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddress.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddress.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish addresses.\n *\n * Results are heuristic candidates and can include false positives. Only\n * address candidates with a Swedish zip code and city are returned.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishAddress>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<SwedishAddress>[] = [];\n\n for (const candidate of Address.findCandidatesInText(text)) {\n const value = SwedishAddress.tryWrap(candidate.value);\n if (!value) continue;\n results.push(\n new TextCandidate({\n startIndex: candidate.startIndex,\n length: candidate.length,\n originalText: candidate.originalText,\n typeName: \"SwedishAddress\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: candidate.maskedForm,\n confidence: candidate.confidence,\n value,\n }),\n );\n }\n\n return results;\n }\n\n toNormalizedString(): string {\n return this.address.toNormalizedString();\n }\n\n toString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n parts.push(`${this.zipCode.formatted} ${this.city.value}`);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n lines.push(`${this.zipCode.formatted} ${this.city.value}`);\n return lines.join(\"\\n\");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n /** Wraps an already-parsed {@link Address}. Used by the country-address registry. */\n static tryWrap(address: Address): SwedishAddress | null {\n if (address.country && address.country.alpha2Code.toUpperCase() !== \"SE\") return null;\n if (address.zipCode === null || !address.zipCode.isSwedish) return null;\n if (address.city === null) return null;\n const swedishZip = SwedishAddressZipCode.tryParse(address.zipCode.value);\n if (swedishZip === null) return null;\n const withCountry =\n address.country !== null\n ? address\n : new Address(address.street, address.zipCode, address.city, Country.Sweden);\n return new SwedishAddress(address.street, swedishZip, address.city, withCountry);\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** A 9-digit D-U-N-S number. */\nexport class DunsNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"D-U-N-S Number\",\n localizedName: \"D-U-N-S-nummer\",\n emoji: \"\\u{1F522}\",\n sources: Object.freeze([\n \"https://www.dnb.com/duns.html\",\n \"https://en.wikipedia.org/wiki/Data_Universal_Numbering_System\",\n ]),\n });\n\n readonly digits: string;\n private constructor(digits: string) {\n this.digits = digits;\n }\n\n static tryParse(input: string | null | undefined): DunsNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH || digits.length !== 9) return null;\n return new DunsNumber(digits);\n }\n\n static parse(input: string): DunsNumber {\n const r = DunsNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid D-U-N-S number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return DunsNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = DunsNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return DunsNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && DunsNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n toString(): string {\n return this.digits;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<DunsNumber>[] {\n if (!text) return [];\n const out: TextCandidate<DunsNumber>[] = [];\n const re = /(?<!\\d)\\d{9}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = DunsNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<DunsNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"DunsNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskDunsNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: DunsNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: DunsNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Masks all digits of a D-U-N-S number. */\nexport function maskDunsNumber(d: DunsNumber): string {\n return \"*\".repeat(d.digits.length);\n}\n","/**\n * Validates a standard Luhn (mod 10) checksum.\n * Checks the entire string: the last digit is assumed to be the control digit.\n *\n * Equivalent of `Buildi.Primitives.Luhn.IsValid` (internal in .NET).\n */\nexport function luhnIsValid(digits: string): boolean {\n if (!digits) return false;\n\n let sum = 0;\n const len = digits.length;\n for (let i = 0; i < len; i++) {\n const code = digits.charCodeAt(i);\n if (code < 0x30 || code > 0x39) return false;\n let d = code - 0x30;\n if ((len - i) % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n","/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n","/**\n * Shared helpers for organization-number / VAT validation. Internal to the\n * `organization/` namespace.\n */\n\n/** Validates ISO 17442 / ISO 7064 Mod-97 checksum (used by LEI and IBAN). */\nexport function isValidIso7064Mod97(input: string): boolean {\n if (!input) return false;\n let s = \"\";\n for (const c of input) {\n if (c >= \"0\" && c <= \"9\") s += c;\n else if (c >= \"A\" && c <= \"Z\") s += String(c.charCodeAt(0) - 55);\n else if (c >= \"a\" && c <= \"z\") s += String(c.charCodeAt(0) - 87);\n else return false;\n }\n // Compute s % 97 using running modulo to avoid BigInt overhead.\n let mod = 0;\n for (let i = 0; i < s.length; i++) {\n mod = (mod * 10 + (s.charCodeAt(i) - 0x30)) % 97;\n }\n return mod === 1;\n}\n\n/** Removes spaces, dashes and non-breaking spaces. */\nexport function cleanSeparators(input: string): string {\n if (!input) return \"\";\n let out = \"\";\n for (const c of input) {\n if (c !== \" \" && c !== \"-\" && c !== \"\\u00A0\") out += c;\n }\n return out;\n}\n\n/** Trims and uppercases, removing a trailing `(PUBL)` suffix. */\nexport function cleanName(name: string | null | undefined): string {\n if (name == null || name.trim() === \"\") return \"\";\n let s = name.trim().toUpperCase();\n if (s.endsWith(\"(PUBL)\")) s = s.slice(0, -6).trim();\n return s;\n}\n\nexport function nameContains(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.indexOf(n) >= 0) return true;\n return false;\n}\n\nexport function nameContainsStandalone(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) {\n if (haystack === n) return true;\n if (haystack.startsWith(n + \" \")) return true;\n if (haystack.endsWith(\" \" + n)) return true;\n if (haystack.indexOf(\" \" + n + \" \") >= 0) return true;\n }\n return false;\n}\n\nexport function nameEndsWith(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.endsWith(n)) return true;\n return false;\n}\n","/**\n * Provides the current date/time for date-dependent primitives such as\n * `SwedishPersonalIdentityNumber` (century derivation), `PersonAge`, and\n * coordination numbers.\n *\n * The .NET equivalent is `IBudiTimeProvider`. JS doesn't have an idiomatic\n * \"ambient clock\" abstraction, so date-dependent functions accept an optional\n * `Clock` parameter and fall back to {@link systemClock} when absent.\n */\nexport interface Clock {\n /** Returns the current date/time. */\n now(): Date;\n}\n\n/** A {@link Clock} backed by `new Date()`. */\nexport const systemClock: Clock = {\n now: () => new Date(),\n};\n\n/**\n * Creates a {@link Clock} that always returns the same {@link Date} instance\n * (the date object is cloned on each `now()` call so callers can't mutate it).\n */\nexport function fixedClock(date: Date): Clock {\n const ms = date.getTime();\n return { now: () => new Date(ms) };\n}\n","/**\n * Local parser for Swedish personnummer and samordningsnummer.\n *\n * Replaces the .NET dependency on ActiveLogin.Identity with an in-house\n * implementation that supports the same input shapes:\n *\n * - 12 digits: `199908072391`\n * - 10 digits: `9908072391` (century inferred)\n * - Separator forms: `YYMMDD-NNNC` or `YYYYMMDD-NNNC`. The separator may be\n * `-` (standard) or `+` (used when the person is 100 years or older;\n * only valid when the input was given in 10-digit form).\n *\n * For coordination numbers (`samordningsnummer`) the day-of-month is shifted\n * by 60 (i.e. real day = day - 60), so valid days for coordination numbers\n * are 61-91 (or 60 when day-of-month is unknown).\n */\n\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\n\nconst defaultClock: Clock = systemClock;\n\nexport type PinKind = \"personal\" | \"coordination\";\n\nexport interface ParsedPin {\n kind: PinKind;\n /** Full 4-digit year. */\n year: number;\n /** 1-12. */\n month: number;\n /**\n * For personal numbers: 1-31. For coordination numbers: realDay (1-31) or\n * `0` when the day-of-month is unknown (raw day was 60).\n */\n realDay: number;\n /** Three-digit individual number. */\n individual: string;\n /** Single check digit. */\n checkDigit: string;\n /** Whether the input had a `+` separator (indicates 100+ years old at parse time). */\n hadPlusSeparator: boolean;\n}\n\nconst TWELVE = /^(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN = /^(\\d{2})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN_WITH_SEP = /^(\\d{2})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\nconst TWELVE_WITH_SEP = /^(\\d{4})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\n\nexport function parsePin(input: string, clock: Clock = defaultClock): ParsedPin | null {\n if (!input) return null;\n const cleaned = input.trim();\n if (cleaned.length === 0) return null;\n\n let year: number, month: number, day: number;\n let individual: string, check: string;\n let hadPlus = false;\n let isTwelve = false;\n\n let m = TWELVE.exec(cleaned);\n if (m) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n isTwelve = true;\n } else if ((m = TEN.exec(cleaned))) {\n const yy = +m[1]!;\n year = inferCenturyForTenDigit(yy, false, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n } else if ((m = TEN_WITH_SEP.exec(cleaned))) {\n const yy = +m[1]!;\n hadPlus = m[4] === \"+\";\n year = inferCenturyForTenDigit(yy, hadPlus, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n } else if ((m = TWELVE_WITH_SEP.exec(cleaned))) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n if (m[4] === \"+\") return null;\n } else {\n return null;\n }\n\n if (month < 1 || month > 12) return null;\n\n const isCoordination = day >= 60 && day <= 91;\n let realDay: number;\n let kind: PinKind;\n if (isCoordination) {\n kind = \"coordination\";\n realDay = day === 60 ? 0 : day - 60;\n if (realDay !== 0 && !isValidDay(year, month, realDay)) return null;\n } else {\n kind = \"personal\";\n if (!isValidDay(year, month, day)) return null;\n realDay = day;\n }\n\n const luhnInput =\n String(year % 100).padStart(2, \"0\") +\n String(month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n individual +\n check;\n if (!luhnIsValid(luhnInput)) return null;\n\n // 12-digit form must use a 4-digit year that matches the inferred century.\n if (isTwelve && (year < 1800 || year > 2200)) return null;\n\n return {\n kind,\n year,\n month,\n realDay,\n individual,\n checkDigit: check,\n hadPlusSeparator: hadPlus,\n };\n}\n\nfunction isValidDay(year: number, month: number, day: number): boolean {\n if (day < 1) return false;\n const dim = daysInMonth(year, month);\n return day <= dim;\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n return leap ? 29 : 28;\n }\n if ([4, 6, 9, 11].includes(month)) return 30;\n return 31;\n}\n\nfunction inferCenturyForTenDigit(yy: number, plusSeparator: boolean, clock: Clock): number {\n const now = clock.now();\n const currentYear = now.getUTCFullYear();\n const currentCentury = Math.floor(currentYear / 100);\n const candidate = currentCentury * 100 + yy;\n let year = candidate;\n if (year > currentYear) year -= 100;\n if (plusSeparator) year -= 100;\n return year;\n}\n\n/** Build the canonical 12-digit form. */\nexport function pinTo12Digit(p: ParsedPin): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n return (\n String(p.year).padStart(4, \"0\") +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n p.individual +\n p.checkDigit\n );\n}\n\n/** Build the canonical 10-digit display form (`YYMMDD-NNNC` or `YYMMDD+NNNC`). */\nexport function pinTo10Digit(p: ParsedPin, clock: Clock = defaultClock): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n const yy = String(p.year % 100).padStart(2, \"0\");\n const sep = ageInYears(p, clock) >= 100 ? \"+\" : \"-\";\n return (\n yy +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n sep +\n p.individual +\n p.checkDigit\n );\n}\n\nfunction ageInYears(p: ParsedPin, clock: Clock): number {\n if (p.kind === \"coordination\" && p.realDay === 0) return 0;\n const now = clock.now();\n const day = p.kind === \"coordination\" ? p.realDay : p.realDay;\n const birth = new Date(Date.UTC(p.year, p.month - 1, day || 1));\n const ms = now.getTime() - birth.getTime();\n return Math.floor(ms / (365.25 * 24 * 3600 * 1000));\n}\n\n/** Estimate gender. The third digit of the individual portion is even for female, odd for male. */\nexport function pinGender(p: ParsedPin): \"female\" | \"male\" {\n const d = parseInt(p.individual.charAt(p.individual.length - 1), 10);\n return d % 2 === 0 ? \"female\" : \"male\";\n}\n\n/** Best-effort date of birth (`null` if coordination day is unknown). */\nexport function pinDateOfBirth(p: ParsedPin): Date | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return new Date(Date.UTC(p.year, p.month - 1, p.realDay));\n}\n\n/** Age in whole years (`null` if coordination day is unknown). */\nexport function pinAgeInYears(p: ParsedPin, clock: Clock = defaultClock): number | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return ageInYears(p, clock);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Personal Identity Number (`personnummer`). */\nexport class SwedishPersonalIdentityNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Personal Identity Number\",\n localizedName: \"Personnummer\",\n emoji: \"\\u{1FAAA}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\",\n \"https://sv.wikipedia.org/wiki/Personnummer_i_Sverige\",\n \"https://en.wikipedia.org/wiki/Luhn_algorithm\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get dateOfBirthHint(): Date {\n const d = pinDateOfBirth(this._pin);\n if (d === null) throw new Error(\"Date of birth is unknown.\");\n return d;\n }\n get ageHint(): number {\n const a = pinAgeInYears(this._pin, this._clock);\n if (a === null) throw new Error(\"Age is unknown.\");\n return a;\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishPersonalIdentityNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"personal\") return null;\n return new SwedishPersonalIdentityNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishPersonalIdentityNumber {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish personal identity number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPersonalIdentityNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPersonalIdentityNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"personal\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid personal identity number format.\",\n \"Ogiltigt format för personnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(\n text: string,\n ): readonly TextCandidate<SwedishPersonalIdentityNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPersonalIdentityNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const pin = SwedishPersonalIdentityNumber.tryParse(m[0]);\n if (!pin) continue;\n out.push(\n new TextCandidate<SwedishPersonalIdentityNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPersonalIdentityNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: pin.toNormalizedString(),\n formattedForm: pin.toString(),\n maskedForm: maskPersonalIdentityNumber(pin),\n confidence: TextMatchConfidence.High,\n value: pin,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPersonalIdentityNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPersonalIdentityNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a personal identity number, e.g. `990807-2391` -> `990807-****`. */\nexport function maskPersonalIdentityNumber(\n p: SwedishPersonalIdentityNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = p.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Coordination Number (`samordningsnummer`). */\nexport class SwedishCoordinationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Coordination Number\",\n localizedName: \"Samordningsnummer\",\n emoji: \"\\u{1F194}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/samordningsnummer.4.5c281c7015abecc2e201130b.html\",\n \"https://sv.wikipedia.org/wiki/Samordningsnummer\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get realDay(): number {\n return this._pin.realDay;\n }\n get dateOfBirthHint(): Date | null {\n return pinDateOfBirth(this._pin);\n }\n get ageHint(): number | null {\n return pinAgeInYears(this._pin, this._clock);\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishCoordinationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"coordination\") return null;\n return new SwedishCoordinationNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishCoordinationNumber {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish coordination number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCoordinationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCoordinationNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"coordination\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid coordination number format.\",\n \"Ogiltigt format för samordningsnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCoordinationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCoordinationNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const cn = SwedishCoordinationNumber.tryParse(m[0]);\n if (!cn) continue;\n out.push(\n new TextCandidate<SwedishCoordinationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCoordinationNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: cn.toNormalizedString(),\n formattedForm: cn.toString(),\n maskedForm: maskCoordinationNumber(cn),\n confidence: TextMatchConfidence.High,\n value: cn,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishCoordinationNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishCoordinationNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a coordination number, e.g. `680164-2395` -> `680164-****`. */\nexport function maskCoordinationNumber(\n c: SwedishCoordinationNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = c.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { nameContains, nameContainsStandalone } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 300;\n\n/** Pattern matching strict Swedish company-name characters (Bolagsverket). */\nconst COMPANY_NAME_PATTERN = /^[\\p{L}\\d\\s\\-'&.,/:()+]+$/u;\n\nconst ORG_SUFFIX_TOKENS: readonly string[] = [\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"];\nconst ORG_SUFFIX_PHRASES: readonly string[] = [\n \" EK.FÖR.\",\n \" EK FÖR\",\n \" EKONOMISK FÖRENING\",\n \" IDEELL FÖRENING\",\n \" SAMFÄLLIGHETSFÖRENING\",\n \" RIKSFÖRBUND\",\n];\nconst ORG_PREFIXES: readonly string[] = [\"STIFTELSEN \", \"BRF \", \"HSB \"];\nconst ORG_KEYWORDS: readonly string[] = [\n \" KOMMUN\",\n \" REGION\",\n \" LANDSTING\",\n \" MYNDIGHET\",\n \" STIFTELSE\",\n \" FÖRENING\",\n];\n\nconst KNOWN_ABBREVIATIONS = new Set([\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"]);\n\nconst KNOWN_GOVERNMENT_AGENCIES: ReadonlySet<string> = new Set([\n \"SKATTEVERKET\",\n \"TULLVERKET\",\n \"KRONOFOGDEN\",\n \"STATISTISKA CENTRALBYRÅN\",\n \"KRIMINALVÅRDEN\",\n \"MIGRATIONSVERKET\",\n \"DOMSTOLSVERKET\",\n \"BROTTSFÖREBYGGANDE RÅDET\",\n \"FÖRSÄKRINGSKASSAN\",\n \"SOCIALSTYRELSEN\",\n \"SKOLVERKET\",\n \"CENTRALA STUDIESTÖDSNÄMNDEN\",\n \"UNIVERSITETS- OCH HÖGSKOLERÅDET\",\n \"BOLAGSVERKET\",\n \"TRAFIKVERKET\",\n \"TRANSPORTSTYRELSEN\",\n \"TILLVÄXTVERKET\",\n \"PATENT- OCH REGISTRERINGSVERKET\",\n \"ARBETSFÖRMEDLINGEN\",\n \"ARBETSMILJÖVERKET\",\n \"NATURVÅRDSVERKET\",\n \"FÖRSVARSMAKTEN\",\n \"POST- OCH TELESTYRELSEN\",\n \"SJÖFARTSVERKET\",\n \"RIKSBANKEN\",\n \"RIKSREVISIONEN\",\n \"RIKSGÄLDEN\",\n \"RIKSGÄLDSKONTORET\",\n \"EKONOMISTYRNINGSVERKET\",\n \"JORDBRUKSVERKET\",\n \"LIVSMEDELSVERKET\",\n \"LANTMÄTERIET\",\n \"BOVERKET\",\n \"KONSUMENTVERKET\",\n \"RIKSARKIVET\",\n \"KUNGLIGA BIBLIOTEKET\",\n \"KEMIKALIEINSPEKTIONEN\",\n \"INTEGRITETSSKYDDSMYNDIGHETEN\",\n \"ELSÄKERHETSVERKET\",\n \"HAVS- OCH VATTENMYNDIGHETEN\",\n \"SKOGSSTYRELSEN\",\n \"VALMYNDIGHETEN\",\n \"LÄNSSTYRELSEN\",\n \"DATAINSPEKTIONEN\",\n \"KONKURRENSVERKET\",\n \"UPPHANDLINGSMYNDIGHETEN\",\n]);\n\n/** A Swedish organization name (`organisationsnamn` / `företagsnamn`). */\nexport class SwedishOrganizationName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Name\",\n localizedName: \"Organisationsnamn\",\n emoji: \"\\u{1F3F7}\\uFE0F\",\n sources: Object.freeze([\"https://bolagsverket.se\"]),\n });\n\n readonly value: string;\n readonly casingNormalizedValue: string;\n readonly hasOrganizationIndicators: boolean;\n readonly inferredSwedishOrganizationType: SwedishOrganizationType;\n\n private constructor(\n value: string,\n casingNormalized: string,\n hasIndicators: boolean,\n inferredType: SwedishOrganizationType,\n ) {\n this.value = value;\n this.casingNormalizedValue = casingNormalized;\n this.hasOrganizationIndicators = hasIndicators;\n this.inferredSwedishOrganizationType = inferredType;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationName | null {\n const normalized = collapseWhitespace(input);\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n if (!validateName(normalized)) return null;\n\n const forInference = stripPublSuffix(normalized);\n const hasIndicators = detectOrganizationIndicators(forInference);\n const inferred = inferTypeFromName(forInference);\n const casing = SwedishOrganizationName.normalizeCasing(normalized);\n return new SwedishOrganizationName(normalized, casing, hasIndicators, inferred);\n }\n\n static parse(input: string): SwedishOrganizationName {\n const r = SwedishOrganizationName.tryParse(input);\n if (r === null) throw new Error(\"Invalid organization name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationName.tryParse(input) !== null;\n }\n\n static isKnownGovernmentAgency(name: string | null | undefined): boolean {\n if (name == null || name.trim() === \"\") return false;\n return KNOWN_GOVERNMENT_AGENCIES.has(collapseWhitespace(name).toUpperCase());\n }\n\n static inferSwedishOrganizationType(name: string | null | undefined): SwedishOrganizationType {\n if (name == null || name.trim() === \"\") return SwedishOrganizationType.Unknown;\n return inferTypeFromName(stripPublSuffix(collapseWhitespace(name)));\n }\n\n static normalizeCasing(name: string): string {\n const letters = [...name].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return name;\n const allLower = letters.every((c) => c === c.toLowerCase());\n const allUpper = letters.every((c) => c === c.toUpperCase());\n if (!allLower && !allUpper) return name;\n\n return name\n .split(\" \")\n .map((w) => (KNOWN_ABBREVIATIONS.has(w.toUpperCase()) ? w.toUpperCase() : capitalizeWord(w)))\n .join(\" \");\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishOrganizationName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: SwedishOrganizationName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOrganizationName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction stripPublSuffix(name: string): string {\n const trimmed = name.trimEnd();\n if (trimmed.toUpperCase().endsWith(\"(PUBL)\")) return trimmed.slice(0, -6).trimEnd();\n return name;\n}\n\nfunction validateName(value: string): boolean {\n if (value.length < 2 || value.length > 200) return false;\n for (const c of value) {\n const code = c.charCodeAt(0);\n if (code < 0x20 || code === 0x7f) return false;\n }\n return COMPANY_NAME_PATTERN.test(value);\n}\n\nfunction detectOrganizationIndicators(collapsed: string): boolean {\n const upper = collapsed.toUpperCase();\n if (!upper) return false;\n const words = upper.split(\" \");\n if (words.length > 0 && ORG_SUFFIX_TOKENS.includes(words[words.length - 1]!)) return true;\n for (const p of ORG_SUFFIX_PHRASES) if (upper.endsWith(p)) return true;\n for (const p of ORG_PREFIXES) if (upper.startsWith(p)) return true;\n for (const k of ORG_KEYWORDS) if (upper.indexOf(k) >= 0) return true;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return true;\n return false;\n}\n\nfunction inferTypeFromName(collapsed: string): SwedishOrganizationType {\n const upper = collapsed.toUpperCase();\n if (!upper) return SwedishOrganizationType.Unknown;\n\n const words = upper.split(\" \");\n const lastWord = words.length > 0 ? words[words.length - 1]! : \"\";\n\n if (lastWord === \"AB\") return SwedishOrganizationType.Aktiebolag;\n if (lastWord === \"KB\" || nameContains(upper, \"KOMMANDITBOLAG\"))\n return SwedishOrganizationType.Kommanditbolag;\n if (lastWord === \"HB\" || nameContains(upper, \"HANDELSBOLAG\"))\n return SwedishOrganizationType.Handelsbolag;\n\n if (\n nameContainsStandalone(upper, \"BRF\") ||\n nameContains(upper, \"BOSTADSRÄTTSFÖRENING\", \"BOSTADSRATTSFORENING\")\n )\n return SwedishOrganizationType.Bostadsrattsforening;\n\n if (\n nameContains(\n upper,\n \"SAMFÄLLIGHETSFÖRENING\",\n \"SAMFALLIGHETSFORENING\",\n \"SAMFALLIGHETSSFORENING\",\n \"SAMFÄLLIGHET\",\n \"SAMFALLIGHET\",\n )\n )\n return SwedishOrganizationType.Samfallighetsforening;\n\n if (lastWord === \"HSB\" || upper.startsWith(\"HSB \"))\n return SwedishOrganizationType.EkonomiskForening;\n\n if (\n upper.endsWith(\" EK.FÖR.\") ||\n upper.endsWith(\" EK FÖR\") ||\n nameContains(upper, \"EKONOMISK FÖRENING\")\n )\n return SwedishOrganizationType.EkonomiskForening;\n\n if (nameContains(upper, \"IDEELL FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n if (upper.startsWith(\"STIFTELSEN \") || nameContains(upper, \"STIFTELSE\"))\n return SwedishOrganizationType.Stiftelse;\n\n if (nameContains(upper, \"KOMMUN\")) return SwedishOrganizationType.Kommun;\n if (nameContains(upper, \"REGION\", \"LANDSTING\")) return SwedishOrganizationType.Region;\n if (nameContains(upper, \"FÖRSAMLING\", \"FORSAMLING\")) return SwedishOrganizationType.Forsamling;\n if (nameContains(upper, \"MYNDIGHET\")) return SwedishOrganizationType.OffentligSektor;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return SwedishOrganizationType.OffentligSektor;\n if (nameContains(upper, \"DÖDSBO\", \"DODSBO\")) return SwedishOrganizationType.Dodsbo;\n\n if (lastWord === \"EF\" || nameContains(upper, \"ENSKILD FIRMA\"))\n return SwedishOrganizationType.EnskildFirma;\n if (nameContains(upper, \"PRIVATPERSON\")) return SwedishOrganizationType.Privatperson;\n\n if (nameContainsStandalone(upper, \"EUROPABOLAG\", \"SE-BOLAG\"))\n return SwedishOrganizationType.Europabolag;\n if (nameContainsStandalone(upper, \"EUROPEISK EKONOMISK INTRESSEGRUPPERING\", \"EEIG\"))\n return SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering;\n if (nameContainsStandalone(upper, \"SCE\") || nameContains(upper, \"EUROPEISK KOOPERATIV FÖRENING\"))\n return SwedishOrganizationType.SCEForening;\n if (nameContainsStandalone(upper, \"FILIAL\")) return SwedishOrganizationType.Filial;\n\n if (nameContains(upper, \"RIKSFÖRBUND\", \"FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n return SwedishOrganizationType.Unknown;\n}\n\n/** Mask an organization name, keeping only the first letter of each word, e.g. `Volvo AB` -> `V**** A*`. */\nexport function maskSwedishOrganizationName(value: SwedishOrganizationName): string {\n return value.value\n .split(\" \")\n .filter((part) => part.length > 0)\n .map((part) => (part.length <= 1 ? \"*\" : part[0]! + \"*\".repeat(part.length - 1)))\n .join(\" \");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const lowered = word.toLocaleLowerCase(\"sv-SE\");\n return lowered[0]!.toLocaleUpperCase(\"sv-SE\") + lowered.slice(1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { SwedishPersonalIdentityNumber } from \"../person/swedish-personal-identity-number.js\";\nimport { SwedishCoordinationNumber } from \"../person/swedish-coordination-number.js\";\nimport { SwedishOrganizationName } from \"./swedish-organization-name.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 30;\nconst LEGAL_ENTITY_PREFIX = \"16\";\n\nexport interface SwedishOrganizationTypeHintResult {\n readonly certain: SwedishOrganizationType;\n readonly bestGuess: SwedishOrganizationType;\n}\n\n/** A Swedish organization number (`organisationsnummer`). */\nexport class SwedishOrganizationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Number\",\n localizedName: \"Organisationsnummer\",\n emoji: \"\\u{1F3E2}\",\n sources: Object.freeze([\n \"https://bolagsverket.se\",\n \"https://skatteverket.se/foretag/drivaforetag/startaforetag/organisationsnummer.html\",\n \"https://sv.wikipedia.org/wiki/Organisationsnummer\",\n ]),\n });\n\n readonly _tenWithDash: string;\n readonly _twelveDigits: string;\n readonly _isPerson: boolean;\n\n get isPerson(): boolean {\n return this._isPerson;\n }\n\n private constructor(tenWithDash: string, twelveDigits: string, isPerson: boolean) {\n this._tenWithDash = tenWithDash;\n this._twelveDigits = twelveDigits;\n this._isPerson = isPerson;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const pin = SwedishPersonalIdentityNumber.tryParse(sanitized);\n if (pin) {\n return new SwedishOrganizationNumber(pin.formatted, pin.value, true);\n }\n const cn = SwedishCoordinationNumber.tryParse(sanitized);\n if (cn) {\n return new SwedishOrganizationNumber(cn.formatted, cn.value, true);\n }\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) return null;\n\n let tenDigits: string;\n if (digits.length === 10) tenDigits = digits;\n else if (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX))\n tenDigits = digits.slice(2);\n else return null;\n\n if (!isLegalEntityPattern(tenDigits)) return null;\n if (!luhnIsValid(tenDigits)) return null;\n\n const tenWithDash = `${tenDigits.slice(0, 6)}-${tenDigits.slice(6)}`;\n const twelve = LEGAL_ENTITY_PREFIX + tenDigits;\n return new SwedishOrganizationNumber(tenWithDash, twelve, false);\n }\n\n static parse(input: string): SwedishOrganizationNumber {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish organization number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to10DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to12DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationNumber.normalize(input) === input;\n }\n\n to10DigitsOnly(): string {\n return this._tenWithDash.replace(/[-+]/g, \"\");\n }\n to10DigitString(): string {\n return this._tenWithDash;\n }\n to12DigitString(): string {\n return this._twelveDigits;\n }\n toNormalizedString(): string {\n return this.to12DigitString();\n }\n toString(): string {\n return this.to10DigitString();\n }\n\n getSwedishOrganizationTypeHint(\n name?: string | null,\n isPrivatePerson?: boolean | null,\n ): SwedishOrganizationTypeHintResult {\n let certain: SwedishOrganizationType;\n let bestGuess: SwedishOrganizationType;\n\n if (this._isPerson) {\n certain = SwedishOrganizationType.EnskildFirmaEllerPrivatperson;\n if (isPrivatePerson === true) bestGuess = SwedishOrganizationType.Privatperson;\n else if (isPrivatePerson === false) bestGuess = SwedishOrganizationType.EnskildFirma;\n else {\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n bestGuess =\n nameType === SwedishOrganizationType.EnskildFirma ||\n nameType === SwedishOrganizationType.Privatperson\n ? nameType\n : certain;\n }\n return { certain, bestGuess };\n }\n\n const first = this.to10DigitsOnly()[0]!;\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n\n switch (first) {\n case \"1\":\n certain = SwedishOrganizationType.Dodsbo;\n bestGuess = certain;\n break;\n case \"2\":\n certain = SwedishOrganizationType.OffentligSektor;\n bestGuess =\n nameType === SwedishOrganizationType.Kommun ||\n nameType === SwedishOrganizationType.Region ||\n nameType === SwedishOrganizationType.Forsamling\n ? nameType\n : certain;\n break;\n case \"5\":\n certain = SwedishOrganizationType.Aktiebolag;\n bestGuess = nameType === SwedishOrganizationType.Kommanditbolag ? nameType : certain;\n break;\n case \"6\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n case \"7\":\n certain = SwedishOrganizationType.EkonomiskForening;\n bestGuess =\n nameType === SwedishOrganizationType.Bostadsrattsforening ||\n nameType === SwedishOrganizationType.Samfallighetsforening\n ? nameType\n : certain;\n break;\n case \"8\":\n certain = SwedishOrganizationType.IdeellForening;\n bestGuess = nameType === SwedishOrganizationType.Stiftelse ? nameType : certain;\n break;\n case \"9\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n default:\n certain = SwedishOrganizationType.Other;\n bestGuess =\n nameType === SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering ||\n nameType === SwedishOrganizationType.Europabolag ||\n nameType === SwedishOrganizationType.SCEForening ||\n nameType === SwedishOrganizationType.Filial\n ? nameType\n : certain;\n break;\n }\n return { certain, bestGuess };\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (SwedishPersonalIdentityNumber.tryParse(sanitized)) return validResult(input);\n if (SwedishCoordinationNumber.tryParse(sanitized)) return validResult(input);\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Input contains no digits.\",\n \"Värdet innehåller inga siffror.\",\n );\n }\n if (\n !(digits.length === 10 || (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX)))\n ) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Organization number must be 10 or 12 digits (12-digit form must start with 16).\",\n \"Organisationsnummer måste vara 10 eller 12 siffror (12-siffrig form måste börja med 16).\",\n );\n }\n const tenDigits = digits.length === 12 ? digits.slice(2) : digits;\n if (!isLegalEntityPattern(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidEntityPattern,\n \"Number does not match a valid organization type pattern.\",\n \"Numret matchar inte ett giltigt organisationstypsmönster.\",\n );\n }\n if (!luhnIsValid(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n }\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOrganizationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOrganizationNumber>[] = [];\n const re = /(?<!\\d)(\\d{6})-?(\\d{4})(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOrganizationNumber.tryParse(m[0]);\n if (!r || r.isPerson) continue;\n out.push(\n new TextCandidate<SwedishOrganizationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOrganizationNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOrganizationNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOrganizationNumber | null | undefined): boolean {\n return other != null && this._twelveDigits === other._twelveDigits;\n }\n compareTo(other: SwedishOrganizationNumber | null | undefined): number {\n if (other == null) return 1;\n return this._twelveDigits < other._twelveDigits\n ? -1\n : this._twelveDigits > other._twelveDigits\n ? 1\n : 0;\n }\n}\n\nfunction isLegalEntityPattern(tenDigits: string): boolean {\n if (tenDigits.length !== 10) return false;\n if (tenDigits[0] === \"1\") return true;\n const first = tenDigits[0]!;\n if (\n first !== \"2\" &&\n first !== \"3\" &&\n first !== \"5\" &&\n first !== \"6\" &&\n first !== \"7\" &&\n first !== \"8\" &&\n first !== \"9\"\n )\n return false;\n const m1 = tenDigits.charCodeAt(2) - 0x30;\n const m2 = tenDigits.charCodeAt(3) - 0x30;\n const mm = m1 * 10 + m2;\n return mm >= 20;\n}\n\n/**\n * Masks person-based Swedish organization identifiers by default.\n * Public legal-entity organization numbers are returned unmasked unless\n * `maskOrganizationNumbers` is set.\n */\nexport function maskSwedishOrganizationNumber(\n o: SwedishOrganizationNumber,\n options?: { maskOrganizationNumbers?: boolean; maskBirthDate?: boolean },\n): string {\n const s = o.to10DigitString();\n if (o.isPerson) {\n const sep = s[6]!;\n if (options?.maskBirthDate) return \"******\" + sep + \"****\";\n return s.slice(0, 6) + sep + \"****\";\n }\n if (options?.maskOrganizationNumbers) return s.slice(0, 7) + \"****\";\n return s;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { cleanSeparators } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationNumber } from \"./swedish-organization-number.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\ninterface CountryInfo {\n countryCode: string;\n countryName: string;\n}\n\nconst COUNTRY_INFO: Readonly<Record<string, CountryInfo>> = Object.freeze({\n AT: { countryCode: \"AT\", countryName: \"Austria\" },\n BE: { countryCode: \"BE\", countryName: \"Belgium\" },\n BG: { countryCode: \"BG\", countryName: \"Bulgaria\" },\n HR: { countryCode: \"HR\", countryName: \"Croatia\" },\n CY: { countryCode: \"CY\", countryName: \"Cyprus\" },\n CZ: { countryCode: \"CZ\", countryName: \"Czech Republic\" },\n DK: { countryCode: \"DK\", countryName: \"Denmark\" },\n EE: { countryCode: \"EE\", countryName: \"Estonia\" },\n FI: { countryCode: \"FI\", countryName: \"Finland\" },\n FR: { countryCode: \"FR\", countryName: \"France\" },\n DE: { countryCode: \"DE\", countryName: \"Germany\" },\n EL: { countryCode: \"GR\", countryName: \"Greece\" },\n GR: { countryCode: \"GR\", countryName: \"Greece\" },\n HU: { countryCode: \"HU\", countryName: \"Hungary\" },\n IE: { countryCode: \"IE\", countryName: \"Ireland\" },\n IT: { countryCode: \"IT\", countryName: \"Italy\" },\n LV: { countryCode: \"LV\", countryName: \"Latvia\" },\n LT: { countryCode: \"LT\", countryName: \"Lithuania\" },\n LU: { countryCode: \"LU\", countryName: \"Luxembourg\" },\n MT: { countryCode: \"MT\", countryName: \"Malta\" },\n NL: { countryCode: \"NL\", countryName: \"Netherlands\" },\n PL: { countryCode: \"PL\", countryName: \"Poland\" },\n PT: { countryCode: \"PT\", countryName: \"Portugal\" },\n RO: { countryCode: \"RO\", countryName: \"Romania\" },\n SK: { countryCode: \"SK\", countryName: \"Slovakia\" },\n SI: { countryCode: \"SI\", countryName: \"Slovenia\" },\n ES: { countryCode: \"ES\", countryName: \"Spain\" },\n SE: { countryCode: \"SE\", countryName: \"Sweden\" },\n GB: { countryCode: \"GB\", countryName: \"United Kingdom\" },\n NO: { countryCode: \"NO\", countryName: \"Norway\" },\n IS: { countryCode: \"IS\", countryName: \"Iceland\" },\n LI: { countryCode: \"LI\", countryName: \"Liechtenstein\" },\n CH: { countryCode: \"CH\", countryName: \"Switzerland\" },\n AL: { countryCode: \"AL\", countryName: \"Albania\" },\n BA: { countryCode: \"BA\", countryName: \"Bosnia and Herzegovina\" },\n BY: { countryCode: \"BY\", countryName: \"Belarus\" },\n MK: { countryCode: \"MK\", countryName: \"North Macedonia\" },\n RS: { countryCode: \"RS\", countryName: \"Serbia\" },\n SM: { countryCode: \"SM\", countryName: \"San Marino\" },\n TR: { countryCode: \"TR\", countryName: \"Turkey\" },\n UA: { countryCode: \"UA\", countryName: \"Ukraine\" },\n RU: { countryCode: \"RU\", countryName: \"Russia\" },\n UZ: { countryCode: \"UZ\", countryName: \"Uzbekistan\" },\n AU: { countryCode: \"AU\", countryName: \"Australia\" },\n CN: { countryCode: \"CN\", countryName: \"China\" },\n HK: { countryCode: \"HK\", countryName: \"Hong Kong\" },\n IN: { countryCode: \"IN\", countryName: \"India\" },\n ID: { countryCode: \"ID\", countryName: \"Indonesia\" },\n IL: { countryCode: \"IL\", countryName: \"Israel\" },\n JP: { countryCode: \"JP\", countryName: \"Japan\" },\n KZ: { countryCode: \"KZ\", countryName: \"Kazakhstan\" },\n NZ: { countryCode: \"NZ\", countryName: \"New Zealand\" },\n PH: { countryCode: \"PH\", countryName: \"Philippines\" },\n SA: { countryCode: \"SA\", countryName: \"Saudi Arabia\" },\n SG: { countryCode: \"SG\", countryName: \"Singapore\" },\n TW: { countryCode: \"TW\", countryName: \"Taiwan\" },\n AR: { countryCode: \"AR\", countryName: \"Argentina\" },\n BZ: { countryCode: \"BZ\", countryName: \"Belize\" },\n BO: { countryCode: \"BO\", countryName: \"Bolivia\" },\n BR: { countryCode: \"BR\", countryName: \"Brazil\" },\n CA: { countryCode: \"CA\", countryName: \"Canada\" },\n CL: { countryCode: \"CL\", countryName: \"Chile\" },\n CO: { countryCode: \"CO\", countryName: \"Colombia\" },\n CR: { countryCode: \"CR\", countryName: \"Costa Rica\" },\n DO: { countryCode: \"DO\", countryName: \"Dominican Republic\" },\n EC: { countryCode: \"EC\", countryName: \"Ecuador\" },\n SV: { countryCode: \"SV\", countryName: \"El Salvador\" },\n GT: { countryCode: \"GT\", countryName: \"Guatemala\" },\n HN: { countryCode: \"HN\", countryName: \"Honduras\" },\n MX: { countryCode: \"MX\", countryName: \"Mexico\" },\n NI: { countryCode: \"NI\", countryName: \"Nicaragua\" },\n PA: { countryCode: \"PA\", countryName: \"Panama\" },\n PY: { countryCode: \"PY\", countryName: \"Paraguay\" },\n PE: { countryCode: \"PE\", countryName: \"Peru\" },\n UY: { countryCode: \"UY\", countryName: \"Uruguay\" },\n US: { countryCode: \"US\", countryName: \"United States\" },\n VE: { countryCode: \"VE\", countryName: \"Venezuela\" },\n NG: { countryCode: \"NG\", countryName: \"Nigeria\" },\n});\n\n/** VAT identification number (`momsnummer` / `momsregistreringsnummer`). */\nexport class EuVatNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"VAT Number\",\n localizedName: \"Momsnummer\",\n emoji: \"\\u{1F4B0}\",\n sources: Object.freeze([\n \"https://ec.europa.eu/taxation_customs/vies/#/vat-validation\",\n \"https://en.wikipedia.org/wiki/VAT_identification_number\",\n ]),\n });\n\n readonly vatPrefix: string;\n readonly countryCode: string;\n readonly countryName: string;\n readonly body: string;\n\n private constructor(vatPrefix: string, countryCode: string, countryName: string, body: string) {\n this.vatPrefix = vatPrefix;\n this.countryCode = countryCode;\n this.countryName = countryName;\n this.body = body;\n }\n\n static tryParse(input: string | null | undefined): EuVatNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length < 3) return null;\n\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) return null;\n const info = COUNTRY_INFO[cc];\n if (!info) return null;\n\n const body = cleaned\n .slice(2)\n .split(\"\")\n .map((c) => {\n if (!/[A-Za-z0-9]/.test(c)) return null;\n return c.toUpperCase();\n });\n if (body.some((c) => c === null)) return null;\n const bodyString = body.join(\"\");\n if (bodyString.length === 0) return null;\n if (!validateCountryFormat(info.countryCode, bodyString)) return null;\n\n return new EuVatNumber(cc, info.countryCode, info.countryName, bodyString);\n }\n\n static parse(input: string): EuVatNumber {\n const r = EuVatNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid VAT number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EuVatNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = EuVatNumber.tryParse(input);\n if (r) return r.vatPrefix + r.body;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return EuVatNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EuVatNumber.normalize(input) === input;\n }\n\n static tryParseForCountry(\n input: string | null | undefined,\n countryCode: string | null | undefined,\n ): EuVatNumber | null {\n if (countryCode == null || countryCode.trim() === \"\") return null;\n const vat = EuVatNumber.tryParse(input);\n if (!vat) return null;\n const normalized = countryCode.toUpperCase();\n if ((normalized === \"EL\" || normalized === \"GR\") && vat.countryCode === \"GR\") return vat;\n return vat.countryCode === normalized ? vat : null;\n }\n\n static parseForCountry(input: string, countryCode: string): EuVatNumber {\n const r = EuVatNumber.tryParseForCountry(input, countryCode);\n if (!r) throw new Error(`Invalid VAT number for country ${countryCode}.`);\n return r;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (cleaned.length < 3) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooShort,\n \"VAT number is too short.\",\n \"Momsnumret är för kort.\",\n );\n }\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCountryPrefix,\n \"VAT number must start with a two-letter country code.\",\n \"Momsnumret måste börja med en tvåbokstavig landskod.\",\n );\n }\n const info = COUNTRY_INFO[cc];\n if (!info) {\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown VAT country code.\",\n \"Okänd momsnummer-landskod.\",\n );\n }\n let body = \"\";\n for (const c of cleaned.slice(2)) {\n if (!/[A-Za-z0-9]/.test(c)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number body contains invalid characters.\",\n \"Momsnumrets innehåll har ogiltiga tecken.\",\n );\n }\n body += c.toUpperCase();\n }\n if (body.length === 0 || !validateCountryFormat(info.countryCode, body)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number format is invalid for the specified country.\",\n \"Momsnummerformatet är ogiltigt för det angivna landet.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.vatPrefix + this.body;\n }\n\n toString(): string {\n return this.vatPrefix + this.body;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<EuVatNumber>[] {\n if (!text) return [];\n const results: TextCandidate<EuVatNumber>[] = [];\n const re = /(?<![A-Z0-9])[A-Z]{2}[A-Z0-9]{5,14}(?![A-Z0-9])/gu;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const vat = EuVatNumber.tryParse(match[0]);\n if (!vat) continue;\n results.push(\n new TextCandidate<EuVatNumber>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EuVatNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: vat.toNormalizedString(),\n formattedForm: vat.toString(),\n maskedForm: maskEuVatNumber(vat),\n confidence: TextMatchConfidence.High,\n value: vat,\n }),\n );\n }\n return results;\n }\n\n equals(other: EuVatNumber | null | undefined): boolean {\n return other != null && this.vatPrefix === other.vatPrefix && this.body === other.body;\n }\n\n compareTo(other: EuVatNumber | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction validateCountryFormat(countryCode: string, body: string): boolean {\n switch (countryCode.toUpperCase()) {\n case \"AT\":\n return body.length === 9 && body[0] === \"U\" && /^\\d{8}$/.test(body.slice(1));\n case \"BE\":\n return validateBelgianVat(body);\n case \"BG\":\n return /^\\d{9,10}$/.test(body);\n case \"HR\":\n return /^\\d{11}$/.test(body) && validateMod1110(body);\n case \"CY\":\n return /^\\d{8}[A-Z]$/.test(body);\n case \"CZ\":\n return /^\\d{8,10}$/.test(body);\n case \"DK\":\n return /^\\d{8}$/.test(body);\n case \"EE\":\n return /^\\d{9}$/.test(body);\n case \"FI\":\n return validateFinnishVat(body);\n case \"FR\":\n return /^[A-Z0-9]{2}\\d{9}$/.test(body);\n case \"DE\":\n case \"GR\":\n return /^\\d{9}$/.test(body);\n case \"HU\":\n return /^\\d{8}$/.test(body);\n case \"IE\":\n return validateIrishVat(body);\n case \"IT\":\n return /^\\d{11}$/.test(body) && luhnIsValid(body);\n case \"LV\":\n return /^\\d{11}$/.test(body);\n case \"LT\":\n return /^\\d{9}$/.test(body) || /^\\d{12}$/.test(body);\n case \"LU\":\n case \"MT\":\n return /^\\d{8}$/.test(body);\n case \"NL\":\n return /^\\d{9}B\\d{2}$/.test(body);\n case \"PL\":\n return validatePolishVat(body);\n case \"PT\":\n return /^\\d{9}$/.test(body);\n case \"RO\":\n return /^\\d{2,10}$/.test(body);\n case \"SK\":\n return validateSlovakVat(body);\n case \"SI\":\n return /^\\d{8}$/.test(body);\n case \"ES\":\n return body.length === 9;\n case \"SE\":\n return validateSwedishVat(body);\n case \"GB\":\n return validateUkVat(body);\n case \"NO\":\n return validateNorwegianVat(body);\n case \"CH\":\n return keepDigits(body).length === 9;\n default:\n return /\\d/.test(body);\n }\n}\n\nfunction validateSwedishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 12 || !digits.endsWith(\"01\")) return false;\n return SwedishOrganizationNumber.tryParse(digits.slice(0, 10)) !== null;\n}\n\nfunction validateBelgianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const baseNumber = parseInt(digits.slice(0, 8), 10);\n const checkDigits = 97 - (baseNumber % 97);\n return checkDigits === parseInt(digits.slice(8, 10), 10);\n}\n\nfunction validateFinnishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 8) return false;\n const weights = [7, 9, 10, 5, 8, 4, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = sum % 11;\n if (remainder === 1) return false;\n const checkDigit = remainder === 0 ? 0 : 11 - remainder;\n return checkDigit === digits.charCodeAt(7) - 0x30;\n}\n\nfunction validateIrishVat(body: string): boolean {\n if (body.length < 8 || body.length > 9) return false;\n if (body.length === 8) return /^\\d{7}[A-Z]$/.test(body);\n return /^\\d{7}[A-Z]{2}$/.test(body) || /^\\d[A-Z]\\d{5}[A-Z]$/.test(body);\n}\n\nfunction validatePolishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const checkDigit = sum % 11;\n if (checkDigit === 10) return false;\n return checkDigit === digits.charCodeAt(9) - 0x30;\n}\n\nfunction validateSlovakVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n return parseInt(digits, 10) % 11 === 0;\n}\n\nfunction validateUkVat(body: string): boolean {\n const digits = keepDigits(body);\n if (body.startsWith(\"GD\") || body.startsWith(\"HA\")) return body.length >= 5;\n return digits.length === 9 || digits.length === 12;\n}\n\nfunction validateNorwegianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 9) return false;\n const weights = [3, 2, 7, 6, 5, 4, 3, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = 11 - (sum % 11);\n if (remainder === 10) return false;\n const checkDigit = remainder === 11 ? 0 : remainder;\n return checkDigit === digits.charCodeAt(8) - 0x30;\n}\n\nfunction validateMod1110(digits: string): boolean {\n let checksum = 10;\n for (let i = 0; i < digits.length - 1; i++) {\n const digit = digits.charCodeAt(i) - 0x30;\n checksum = (checksum + digit) % 10;\n if (checksum === 0) checksum = 10;\n checksum = (checksum * 2) % 11;\n }\n const expectedCheck = (11 - checksum) % 10;\n const actualCheck = digits.charCodeAt(digits.length - 1) - 0x30;\n return expectedCheck === actualCheck;\n}\n\n/** Masks person-based Swedish VAT automatically; pass `alwaysMask` to mask all VAT bodies. */\nexport function maskEuVatNumber(vat: EuVatNumber, alwaysMask = false): string {\n if (vat.countryCode === \"SE\") {\n const body = vat.body;\n if (body.length >= 10) {\n const orgPart = body.slice(0, 10);\n const org = SwedishOrganizationNumber.tryParse(orgPart);\n if (org && (org.isPerson || alwaysMask)) {\n const suffix = body.length > 10 ? body.slice(10) : \"\";\n return `${vat.vatPrefix}${orgPart.slice(0, 6)}****${suffix}`;\n }\n }\n } else if (alwaysMask) {\n const visible = Math.min(4, vat.body.length);\n return `${vat.vatPrefix}${vat.body.slice(0, visible)}${\"*\".repeat(vat.body.length - visible)}`;\n }\n\n return vat.toString();\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { isValidIso7064Mod97 } from \"./organization-validation-utils.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\n/** Legal Entity Identifier (ISO 17442). */\nexport class LeiCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"LEI Code\",\n localizedName: \"LEI-kod\",\n emoji: \"\\u{1F3DB}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.gleif.org/en/about-lei/iso-17442-the-lei-code-structure/\",\n \"https://en.wikipedia.org/wiki/Legal_Entity_Identifier\",\n ]),\n });\n\n readonly value: string;\n get louPrefix(): string {\n return this.value.slice(0, 4);\n }\n get reserved(): string {\n return this.value.slice(4, 6);\n }\n get entitySpecific(): string {\n return this.value.slice(6, 18);\n }\n get checkDigits(): string {\n return this.value.slice(18, 20);\n }\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): LeiCode | null {\n if (input == null || input.trim() === \"\") return null;\n const source = sanitizeInput(input);\n let cleaned = \"\";\n for (const c of source) {\n if (/[A-Za-z0-9]/.test(c)) cleaned += c.toUpperCase();\n }\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length !== 20) return null;\n if (!isValidIso7064Mod97(cleaned)) return null;\n return new LeiCode(cleaned);\n }\n\n static parse(input: string): LeiCode {\n const r = LeiCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid LEI code (length or checksum invalid).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return LeiCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = LeiCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return LeiCode.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && LeiCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<LeiCode>[] {\n if (!text) return [];\n const out: TextCandidate<LeiCode>[] = [];\n const re = /(?<![A-Z0-9])[A-Z0-9]{18}\\d{2}(?![A-Z0-9])/gu;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = LeiCode.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<LeiCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"LeiCode\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskLeiCode(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: LeiCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: LeiCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Masks the LEI keeping only the first 4-character LOU prefix visible. */\nexport function maskLeiCode(l: LeiCode): string {\n const v = l.value;\n return v.slice(0, 4) + \"*\".repeat(v.length - 4);\n}\n","import { TextCandidate } from \"./text-candidate.js\";\nimport { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n// Type-only imports: every scannable type imports this module for `TextCandidate`,\n// so importing them as values would form a cycle. These are erased at compile time.\nimport type { Iban } from \"../banking/iban.js\";\nimport type { Bic } from \"../banking/bic.js\";\nimport type { SwedishBankAccount } from \"../banking/swedish-bank-account.js\";\nimport type { SwedishBankgiroNumber } from \"../banking/swedish-bankgiro-number.js\";\nimport type { SwedishOcrReferenceNumber } from \"../banking/swedish-ocr-reference-number.js\";\nimport type { SwedishPostgiroNumber } from \"../banking/swedish-postgiro-number.js\";\nimport type { SwedishSwishNumber } from \"../banking/swedish-swish-number.js\";\nimport type { Address } from \"../contact/address.js\";\nimport type { AddressZipCode } from \"../contact/address-zip-code.js\";\nimport type { PhoneNumber } from \"../contact/phone-number.js\";\nimport type { SwedishAddress } from \"../contact/swedish-address.js\";\nimport type { Isin } from \"../finance/isin.js\";\nimport type { Country } from \"../geography/country.js\";\nimport type { SwedishCounty } from \"../geography/swedish-county.js\";\nimport type { SwedishMunicipality } from \"../geography/swedish-municipality.js\";\nimport type { DunsNumber } from \"../organization/duns-number.js\";\nimport type { EuVatNumber } from \"../organization/eu-vat-number.js\";\nimport type { LeiCode } from \"../organization/lei-code.js\";\nimport type { SwedishOrganizationNumber } from \"../organization/swedish-organization-number.js\";\nimport type { SwedishCoordinationNumber } from \"../person/swedish-coordination-number.js\";\nimport type { SwedishPersonalIdentityNumber } from \"../person/swedish-personal-identity-number.js\";\nimport type { SwedishPropertyDesignation } from \"../property/swedish-property-designation.js\";\nimport type { EmailAddress } from \"../web/email-address.js\";\nimport type { Url } from \"../web/url.js\";\n\n/**\n * The result of scanning unstructured text for structured value types.\n * Contains all found candidates, a resolved non-overlapping subset, and\n * methods for bulk replacement / masking.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed.\n */\nexport class TextScanResult {\n /** All candidates sorted by `startIndex`, including overlapping ones. */\n readonly all: readonly TextCandidate[];\n /**\n * Non-overlapping subset after resolution. When candidates overlap or one\n * contains another, the winner is chosen by: containment (longer enclosing\n * match wins), then higher {@link TextMatchConfidence}, then longer span,\n * then category priority.\n */\n readonly resolvedCandidates: readonly TextCandidate[];\n\n constructor(candidates: readonly TextCandidate[]) {\n const sorted = [...candidates].sort((a, b) => a.startIndex - b.startIndex);\n this.all = Object.freeze(sorted);\n this.resolvedCandidates = Object.freeze(resolve(sorted));\n }\n\n get totalCount(): number {\n return this.all.length;\n }\n\n /** Returns the number of candidates in the given category. */\n countByCategory(category: TextCandidateCategory): number {\n return this.all.reduce((acc, c) => (c.category === category ? acc + 1 : acc), 0);\n }\n\n /** Returns the number of candidates at or above the given confidence level. */\n countByConfidence(minimum: TextMatchConfidence): number {\n return this.all.reduce((acc, c) => (c.confidence >= minimum ? acc + 1 : acc), 0);\n }\n\n /** Returns all candidates whose `typeName` equals `typeName`. */\n byTypeName<T = unknown>(typeName: string): TextCandidate<T>[] {\n return this.all.filter((c) => c.typeName === typeName) as TextCandidate<T>[];\n }\n\n // Typed accessors. Each returns every candidate of that type from `all`,\n // before overlap resolution.\n\n get emails(): TextCandidate<EmailAddress>[] {\n return this.byTypeName<EmailAddress>(\"EmailAddress\");\n }\n get urls(): TextCandidate<Url>[] {\n return this.byTypeName<Url>(\"Url\");\n }\n get phoneNumbers(): TextCandidate<PhoneNumber>[] {\n return this.byTypeName<PhoneNumber>(\"PhoneNumber\");\n }\n get zipCodes(): TextCandidate<AddressZipCode>[] {\n return this.byTypeName<AddressZipCode>(\"AddressZipCode\");\n }\n get addresses(): TextCandidate<Address>[] {\n return this.byTypeName<Address>(\"Address\");\n }\n get swedishAddresses(): TextCandidate<SwedishAddress>[] {\n return this.byTypeName<SwedishAddress>(\"SwedishAddress\");\n }\n\n get personalIdentityNumbers(): TextCandidate<SwedishPersonalIdentityNumber>[] {\n return this.byTypeName<SwedishPersonalIdentityNumber>(\"SwedishPersonalIdentityNumber\");\n }\n get coordinationNumbers(): TextCandidate<SwedishCoordinationNumber>[] {\n return this.byTypeName<SwedishCoordinationNumber>(\"SwedishCoordinationNumber\");\n }\n\n get organizationNumbers(): TextCandidate<SwedishOrganizationNumber>[] {\n return this.byTypeName<SwedishOrganizationNumber>(\"SwedishOrganizationNumber\");\n }\n get euVatNumbers(): TextCandidate<EuVatNumber>[] {\n return this.byTypeName<EuVatNumber>(\"EuVatNumber\");\n }\n get leiCodes(): TextCandidate<LeiCode>[] {\n return this.byTypeName<LeiCode>(\"LeiCode\");\n }\n get dunsNumbers(): TextCandidate<DunsNumber>[] {\n return this.byTypeName<DunsNumber>(\"DunsNumber\");\n }\n\n get ibans(): TextCandidate<Iban>[] {\n return this.byTypeName<Iban>(\"Iban\");\n }\n get bics(): TextCandidate<Bic>[] {\n return this.byTypeName<Bic>(\"Bic\");\n }\n get bankgiroNumbers(): TextCandidate<SwedishBankgiroNumber>[] {\n return this.byTypeName<SwedishBankgiroNumber>(\"SwedishBankgiroNumber\");\n }\n get postgiroNumbers(): TextCandidate<SwedishPostgiroNumber>[] {\n return this.byTypeName<SwedishPostgiroNumber>(\"SwedishPostgiroNumber\");\n }\n get bankAccounts(): TextCandidate<SwedishBankAccount>[] {\n return this.byTypeName<SwedishBankAccount>(\"SwedishBankAccount\");\n }\n get ocrReferences(): TextCandidate<SwedishOcrReferenceNumber>[] {\n return this.byTypeName<SwedishOcrReferenceNumber>(\"SwedishOcrReferenceNumber\");\n }\n get swedishSwishNumbers(): TextCandidate<SwedishSwishNumber>[] {\n return this.byTypeName<SwedishSwishNumber>(\"SwedishSwishNumber\");\n }\n get isins(): TextCandidate<Isin>[] {\n return this.byTypeName<Isin>(\"Isin\");\n }\n\n get countries(): TextCandidate<Country>[] {\n return this.byTypeName<Country>(\"Country\");\n }\n get counties(): TextCandidate<SwedishCounty>[] {\n return this.byTypeName<SwedishCounty>(\"SwedishCounty\");\n }\n get municipalities(): TextCandidate<SwedishMunicipality>[] {\n return this.byTypeName<SwedishMunicipality>(\"SwedishMunicipality\");\n }\n\n get propertyDesignations(): TextCandidate<SwedishPropertyDesignation>[] {\n return this.byTypeName<SwedishPropertyDesignation>(\"SwedishPropertyDesignation\");\n }\n\n /** Returns all candidates in the given category. */\n byCategory(category: TextCandidateCategory): TextCandidate[] {\n return this.all.filter((c) => c.category === category);\n }\n\n /**\n * Replaces each resolved candidate's span in `text` with its `maskedForm`.\n */\n maskAll(text: string): string {\n return this.replaceAll(text, (c) => c.maskedForm);\n }\n\n /**\n * Replaces each resolved candidate's span in `text` with `replacement`.\n */\n redactAll(text: string, replacement = \"[REDACTED]\"): string {\n return this.replaceAll(text, () => replacement);\n }\n\n /**\n * Replaces each resolved candidate's span in `text` using a custom mapper.\n * Replacements are applied right-to-left on the original text so positions\n * remain valid.\n */\n replaceAll(text: string, replacer: (c: TextCandidate) => string): string {\n if (this.resolvedCandidates.length === 0) return text;\n let out = text;\n for (let i = this.resolvedCandidates.length - 1; i >= 0; i--) {\n const c = this.resolvedCandidates[i]!;\n if (c.startIndex + c.length > out.length) continue;\n out = out.slice(0, c.startIndex) + replacer(c) + out.slice(c.startIndex + c.length);\n }\n return out;\n }\n}\n\nconst CATEGORY_PRIORITY: Record<TextCandidateCategory, number> = {\n [TextCandidateCategory.PersonalIdentifier]: 0,\n [TextCandidateCategory.Contact]: 1,\n [TextCandidateCategory.Financial]: 2,\n [TextCandidateCategory.OrganizationIdentifier]: 3,\n [TextCandidateCategory.Vehicle]: 4,\n [TextCandidateCategory.Property]: 5,\n [TextCandidateCategory.Product]: 6,\n [TextCandidateCategory.Geography]: 7,\n [TextCandidateCategory.Measurement]: 8,\n};\n\nfunction resolve(sorted: readonly TextCandidate[]): TextCandidate[] {\n if (sorted.length === 0) return [];\n\n const resolved: TextCandidate[] = [];\n for (const candidate of sorted) {\n let dominated = false;\n for (let i = resolved.length - 1; i >= 0; i--) {\n const existing = resolved[i]!;\n if (!existing.overlaps(candidate)) continue;\n const winner = pickWinner(existing, candidate);\n if (winner === existing) {\n dominated = true;\n break;\n }\n resolved.splice(i, 1);\n }\n if (!dominated) resolved.push(candidate);\n }\n\n resolved.sort((a, b) => a.startIndex - b.startIndex);\n return resolved;\n}\n\nfunction pickWinner(a: TextCandidate, b: TextCandidate): TextCandidate {\n if (a.contains(b)) return a;\n if (b.contains(a)) return b;\n if (a.confidence !== b.confidence) return a.confidence > b.confidence ? a : b;\n if (a.length !== b.length) return a.length > b.length ? a : b;\n const pa = CATEGORY_PRIORITY[a.category] ?? 99;\n const pb = CATEGORY_PRIORITY[b.category] ?? 99;\n return pa <= pb ? a : b;\n}\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * Configuration for the text scanner controlling which categories to scan and\n * the minimum confidence threshold.\n */\nexport interface TextScannerOptions {\n /**\n * When set, only categories in this set are scanned. Mutually exclusive\n * with {@link excludeCategories}.\n */\n includeCategories?: ReadonlySet<TextCandidateCategory>;\n /**\n * When set, categories in this set are skipped. Ignored if\n * {@link includeCategories} is set.\n */\n excludeCategories?: ReadonlySet<TextCandidateCategory>;\n /**\n * Candidates below this confidence level are discarded from results.\n * Defaults to {@link TextMatchConfidence.Low} (keep everything).\n */\n minimumConfidence?: TextMatchConfidence;\n}\n\n/** @internal */\nexport function shouldScan(options: TextScannerOptions, category: TextCandidateCategory): boolean {\n if (options.includeCategories) return options.includeCategories.has(category);\n if (options.excludeCategories) return !options.excludeCategories.has(category);\n return true;\n}\n","import { TextCandidate } from \"./text-candidate.js\";\nimport { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\nimport { TextScanResult } from \"./text-scan-result.js\";\nimport { TextScannerOptions, shouldScan } from \"./text-scanner-options.js\";\n\n/**\n * A scan function returns all candidates found in `text` for one type.\n */\nexport type TextScanFunction<T = unknown> = (text: string) => readonly TextCandidate<T>[];\n\n/**\n * A registration that wires one type's `findCandidatesInText` function into a\n * scanner.\n */\nexport interface RegisteredScanner<T = unknown> {\n readonly typeName: string;\n readonly category: TextCandidateCategory;\n readonly scan: TextScanFunction<T>;\n}\n\n/**\n * Aggregate scanner that runs every registered type's `findCandidatesInText`\n * and merges the results.\n *\n * In contrast to the .NET `TextScanner` (which hard-codes a fixed list of\n * types in its constructor), the JS port uses a registry. Type modules call\n * {@link TextScanner.register} (or push to {@link defaultTextScanner}) so the\n * scanner is extensible without editing this file.\n */\nexport class TextScanner {\n private readonly registrations: RegisteredScanner[] = [];\n\n /**\n * Registers a type's scan function. Called once per type, normally at\n * module load time.\n */\n register<T>(reg: RegisteredScanner<T>): void {\n this.registrations.push(reg as unknown as RegisteredScanner);\n }\n\n /** Currently registered scanners. Mainly useful for tests. */\n get registered(): readonly RegisteredScanner[] {\n return this.registrations;\n }\n\n /**\n * Scans `text` for all registered types matching the given `options`.\n * Returns an aggregate result with overlap resolution.\n */\n scan(text: string, options: TextScannerOptions = {}): TextScanResult {\n const minConfidence = options.minimumConfidence ?? TextMatchConfidence.Low;\n const candidates: TextCandidate[] = [];\n for (const reg of this.registrations) {\n if (!shouldScan(options, reg.category)) continue;\n const found = reg.scan(text);\n for (const c of found) {\n if (c.confidence < minConfidence) continue;\n candidates.push(c);\n }\n }\n return new TextScanResult(candidates);\n }\n}\n\n/**\n * The default scanner used by `@budiauktioner/buildi-primitives`. Type modules with\n * `findCandidatesInText` register themselves with this instance at module\n * load time. Applications that need an isolated scanner can construct their\n * own {@link TextScanner}.\n */\nexport const defaultTextScanner = new TextScanner();\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\n/**\n * Identifies the email service behind a domain when it belongs to a well-known\n * public (consumer/free) email provider.\n */\nexport const PublicEmailProvider = {\n Unknown: \"Unknown\",\n\n Gmail: \"Gmail\",\n Outlook: \"Outlook\",\n Yahoo: \"Yahoo\",\n ICloud: \"ICloud\",\n ProtonMail: \"ProtonMail\",\n Aol: \"Aol\",\n Gmx: \"Gmx\",\n MailCom: \"MailCom\",\n Yandex: \"Yandex\",\n Zoho: \"Zoho\",\n Tuta: \"Tuta\",\n Hey: \"Hey\",\n DuckDuckGoEmail: \"DuckDuckGoEmail\",\n SimpleLogin: \"SimpleLogin\",\n\n WebDe: \"WebDe\",\n MailRu: \"MailRu\",\n WirtualnaPolska: \"WirtualnaPolska\",\n Onet: \"Onet\",\n Interia: \"Interia\",\n Tlen: \"Tlen\",\n Seznam: \"Seznam\",\n Libero: \"Libero\",\n FreemailHu: \"FreemailHu\",\n Abv: \"Abv\",\n InboxLv: \"InboxLv\",\n UkrNet: \"UkrNet\",\n Naver: \"Naver\",\n\n Telia: \"Telia\",\n Tele2: \"Tele2\",\n Comhem: \"Comhem\",\n Bredbandsbolaget: \"Bredbandsbolaget\",\n Bredband2: \"Bredband2\",\n Ownit: \"Ownit\",\n Spray: \"Spray\",\n Passagen: \"Passagen\",\n Bahnhof: \"Bahnhof\",\n Glocalnet: \"Glocalnet\",\n\n OnlineNo: \"OnlineNo\",\n Kolumbus: \"Kolumbus\",\n Aland: \"Aland\",\n} as const;\n\nexport type PublicEmailProvider = (typeof PublicEmailProvider)[keyof typeof PublicEmailProvider];\n\nconst MAX_INPUT_LENGTH = 320;\n\nconst PROVIDER_DOMAINS: Record<string, PublicEmailProvider> = {\n // International\n \"gmail.com\": PublicEmailProvider.Gmail,\n \"googlemail.com\": PublicEmailProvider.Gmail,\n\n \"outlook.com\": PublicEmailProvider.Outlook,\n \"outlook.se\": PublicEmailProvider.Outlook,\n \"outlook.fr\": PublicEmailProvider.Outlook,\n \"outlook.co\": PublicEmailProvider.Outlook,\n \"hotmail.com\": PublicEmailProvider.Outlook,\n \"hotmail.se\": PublicEmailProvider.Outlook,\n \"hotmail.co.uk\": PublicEmailProvider.Outlook,\n \"hotmail.fr\": PublicEmailProvider.Outlook,\n \"hotmail.de\": PublicEmailProvider.Outlook,\n \"hotmail.no\": PublicEmailProvider.Outlook,\n \"hotmail.dk\": PublicEmailProvider.Outlook,\n \"hotmail.fi\": PublicEmailProvider.Outlook,\n \"hotmail.it\": PublicEmailProvider.Outlook,\n \"hotmail.es\": PublicEmailProvider.Outlook,\n \"live.com\": PublicEmailProvider.Outlook,\n \"live.se\": PublicEmailProvider.Outlook,\n \"live.fr\": PublicEmailProvider.Outlook,\n \"live.dk\": PublicEmailProvider.Outlook,\n \"live.co.uk\": PublicEmailProvider.Outlook,\n \"live.it\": PublicEmailProvider.Outlook,\n \"live.no\": PublicEmailProvider.Outlook,\n \"msn.com\": PublicEmailProvider.Outlook,\n \"windowslive.com\": PublicEmailProvider.Outlook,\n\n \"yahoo.com\": PublicEmailProvider.Yahoo,\n \"yahoo.se\": PublicEmailProvider.Yahoo,\n \"yahoo.co.uk\": PublicEmailProvider.Yahoo,\n \"yahoo.fr\": PublicEmailProvider.Yahoo,\n \"yahoo.de\": PublicEmailProvider.Yahoo,\n \"yahoo.it\": PublicEmailProvider.Yahoo,\n \"yahoo.es\": PublicEmailProvider.Yahoo,\n \"yahoo.gr\": PublicEmailProvider.Yahoo,\n \"yahoo.ro\": PublicEmailProvider.Yahoo,\n \"yahoo.co\": PublicEmailProvider.Yahoo,\n \"yahoo.no\": PublicEmailProvider.Yahoo,\n \"ymail.com\": PublicEmailProvider.Yahoo,\n \"rocketmail.com\": PublicEmailProvider.Yahoo,\n\n \"icloud.com\": PublicEmailProvider.ICloud,\n \"me.com\": PublicEmailProvider.ICloud,\n \"mac.com\": PublicEmailProvider.ICloud,\n\n \"protonmail.com\": PublicEmailProvider.ProtonMail,\n \"protonmail.ch\": PublicEmailProvider.ProtonMail,\n \"proton.me\": PublicEmailProvider.ProtonMail,\n \"pm.me\": PublicEmailProvider.ProtonMail,\n\n \"aol.com\": PublicEmailProvider.Aol,\n \"aol.se\": PublicEmailProvider.Aol,\n\n \"gmx.com\": PublicEmailProvider.Gmx,\n \"gmx.de\": PublicEmailProvider.Gmx,\n \"gmx.net\": PublicEmailProvider.Gmx,\n \"gmx.at\": PublicEmailProvider.Gmx,\n\n \"mail.com\": PublicEmailProvider.MailCom,\n \"email.com\": PublicEmailProvider.MailCom,\n \"post.com\": PublicEmailProvider.MailCom,\n \"europe.com\": PublicEmailProvider.MailCom,\n \"iname.com\": PublicEmailProvider.MailCom,\n\n \"yandex.com\": PublicEmailProvider.Yandex,\n \"yandex.ru\": PublicEmailProvider.Yandex,\n\n \"zoho.com\": PublicEmailProvider.Zoho,\n\n \"tuta.io\": PublicEmailProvider.Tuta,\n \"tutanota.com\": PublicEmailProvider.Tuta,\n\n \"hey.com\": PublicEmailProvider.Hey,\n \"duck.com\": PublicEmailProvider.DuckDuckGoEmail,\n \"simplelogin.com\": PublicEmailProvider.SimpleLogin,\n\n // Regional (Europe)\n \"web.de\": PublicEmailProvider.WebDe,\n \"mail.ru\": PublicEmailProvider.MailRu,\n\n \"wp.pl\": PublicEmailProvider.WirtualnaPolska,\n \"vp.pl\": PublicEmailProvider.WirtualnaPolska,\n\n \"onet.pl\": PublicEmailProvider.Onet,\n \"onet.eu\": PublicEmailProvider.Onet,\n \"op.pl\": PublicEmailProvider.Onet,\n \"o2.pl\": PublicEmailProvider.Onet,\n \"poczta.onet.pl\": PublicEmailProvider.Onet,\n\n \"interia.pl\": PublicEmailProvider.Interia,\n \"interia.eu\": PublicEmailProvider.Interia,\n\n \"tlen.pl\": PublicEmailProvider.Tlen,\n\n \"seznam.cz\": PublicEmailProvider.Seznam,\n \"libero.it\": PublicEmailProvider.Libero,\n \"freemail.hu\": PublicEmailProvider.FreemailHu,\n \"abv.bg\": PublicEmailProvider.Abv,\n \"inbox.lv\": PublicEmailProvider.InboxLv,\n \"ukr.net\": PublicEmailProvider.UkrNet,\n \"naver.com\": PublicEmailProvider.Naver,\n\n // Swedish ISP / portal email\n \"telia.com\": PublicEmailProvider.Telia,\n \"telia.se\": PublicEmailProvider.Telia,\n \"home.se\": PublicEmailProvider.Telia,\n \"swipnet.se\": PublicEmailProvider.Telia,\n\n \"tele2.se\": PublicEmailProvider.Tele2,\n \"comhem.se\": PublicEmailProvider.Comhem,\n\n \"bredband.net\": PublicEmailProvider.Bredbandsbolaget,\n \"bredbandsbolaget.se\": PublicEmailProvider.Bredbandsbolaget,\n\n \"bredband2.com\": PublicEmailProvider.Bredband2,\n \"ownit.nu\": PublicEmailProvider.Ownit,\n \"mail.se\": PublicEmailProvider.Spray,\n \"spray.se\": PublicEmailProvider.Spray,\n \"passagen.se\": PublicEmailProvider.Passagen,\n \"bahnhof.se\": PublicEmailProvider.Bahnhof,\n \"glocalnet.net\": PublicEmailProvider.Glocalnet,\n\n // Nordic ISP\n \"online.no\": PublicEmailProvider.OnlineNo,\n \"kolumbus.fi\": PublicEmailProvider.Kolumbus,\n \"aland.net\": PublicEmailProvider.Aland,\n};\n\nconst DOMAIN_CORRECTIONS: Record<string, string> = {\n // Gmail misspellings\n \"gnail.com\": \"gmail.com\",\n \"gamil.com\": \"gmail.com\",\n \"gmai.com\": \"gmail.com\",\n \"gmil.com\": \"gmail.com\",\n \"gmsil.com\": \"gmail.com\",\n \"gmal.com\": \"gmail.com\",\n \"gmaill.com\": \"gmail.com\",\n \"gamail.com\": \"gmail.com\",\n \"gmail.con\": \"gmail.com\",\n \"gmail.vom\": \"gmail.com\",\n \"gmail.cim\": \"gmail.com\",\n \"gmail.comi\": \"gmail.com\",\n \"gmail.se\": \"gmail.com\",\n \"gmail.co\": \"gmail.com\",\n\n // Hotmail / Outlook misspellings\n \"hotmai.com\": \"hotmail.com\",\n \"hotmil.com\": \"hotmail.com\",\n \"hotmsil.com\": \"hotmail.com\",\n \"hotmal.com\": \"hotmail.com\",\n \"homail.com\": \"hotmail.com\",\n \"hotnail.com\": \"hotmail.com\",\n \"hitmail.com\": \"hotmail.com\",\n \"hptmail.com\": \"hotmail.com\",\n \"hmail.com\": \"hotmail.com\",\n \"hotmail.con\": \"hotmail.com\",\n \"hotmail.cpm\": \"hotmail.com\",\n \"hotmail.co\": \"hotmail.com\",\n \"hotmail.vom\": \"hotmail.com\",\n \"hotmail.cim\": \"hotmail.com\",\n \"hotmail.comm\": \"hotmail.com\",\n \"outlook.con\": \"outlook.com\",\n \"putlook.com\": \"outlook.com\",\n\n // iCloud misspellings\n \"icloude.com\": \"icloud.com\",\n \"icloud.se\": \"icloud.com\",\n \"icloud.co\": \"icloud.com\",\n\n // Onet misspellings\n \"02.pl\": \"o2.pl\",\n};\n\nlet tldCountryMapCache: Map<string, Country> | null = null;\nfunction getTldCountryMap(): Map<string, Country> {\n if (tldCountryMapCache) return tldCountryMapCache;\n const m = new Map<string, Country>();\n for (const c of Country.all) {\n if (c.topLevelDomain) m.set(c.topLevelDomain.toLowerCase(), c);\n }\n tldCountryMapCache = m;\n return m;\n}\n\nconst EMAIL_PATTERN =\n /^(?!\\.)[a-zA-Z0-9_](?!.*\\.\\.)(?:[a-zA-Z0-9._%+-]*[a-zA-Z0-9_%+-])?@(?!-)[a-zA-Z0-9-]+(?<!-)(?:\\.(?!-)[a-zA-Z0-9-]+(?<!-))*\\.[a-zA-Z]{2,}$/;\n\nconst SCAN_PATTERN =\n /(?<![\\w.@])(?!\\.)[a-zA-Z0-9](?:[a-zA-Z0-9._%+-]*[a-zA-Z0-9_%+-])?@(?!-)[a-zA-Z0-9-]+(?:\\.(?!-)[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,}(?![\\w@])/gu;\n\n/** Convert a Unicode domain to its ASCII (Punycode) form. Returns null if invalid. */\nfunction domainToAscii(domain: string): string | null {\n try {\n const ascii = new URL(\"http://\" + domain).hostname;\n return ascii;\n } catch {\n return null;\n }\n}\n\n/**\n * An email address (e-postadress). Normalization trims whitespace and lowercases the entire\n * address — including the local part — as a pragmatic interoperability and deduplication choice.\n */\nexport class EmailAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Email Address\",\n localizedName: \"E-postadress\",\n emoji: \"\\u{1F4E7}\",\n sources: Object.freeze([\n \"https://datatracker.ietf.org/doc/html/rfc5321#section-2.3.11\",\n \"https://datatracker.ietf.org/doc/html/rfc5321\",\n ]),\n });\n\n readonly value: string;\n readonly localPart: string;\n readonly domain: string;\n readonly domainAscii: string;\n readonly topLevelDomain: string;\n readonly country: Country | null;\n readonly provider: PublicEmailProvider | null;\n readonly originalDomain: string | null;\n\n get isPublicEmailProvider(): boolean {\n return this.provider != null;\n }\n\n get isInternationalizedDomain(): boolean {\n return this.domain !== this.domainAscii;\n }\n\n get wasCorrected(): boolean {\n return this.originalDomain != null;\n }\n\n private constructor(\n value: string,\n localPart: string,\n domain: string,\n domainAscii: string,\n tld: string,\n country: Country | null,\n provider: PublicEmailProvider | null,\n originalDomain: string | null,\n ) {\n this.value = value;\n this.localPart = localPart;\n this.domain = domain;\n this.domainAscii = domainAscii;\n this.topLevelDomain = tld;\n this.country = country;\n this.provider = provider;\n this.originalDomain = originalDomain;\n }\n\n /**\n * Attempts to parse and normalize an email address.\n *\n * When `tryCorrectTypos` is `true`, common domain misspellings such as\n * `gmail.con`, `gnail.com`, or `hotmil.com` are corrected automatically.\n * The original domain is preserved in `originalDomain`. Typo correction is\n * opt-in and should only be used when silent correction is acceptable.\n */\n static tryParse(\n input: string | null | undefined,\n options?: { tryCorrectTypos?: boolean },\n ): EmailAddress | null {\n if (input == null || input.trim() === \"\") return null;\n\n let sanitized = sanitizeInput(input);\n\n const ltIndex = sanitized.indexOf(\"<\");\n if (ltIndex >= 0) {\n const gtIndex = sanitized.indexOf(\">\", ltIndex + 1);\n if (gtIndex > ltIndex) sanitized = sanitized.slice(ltIndex + 1, gtIndex);\n }\n\n sanitized = sanitized.trim();\n if (sanitized.toLowerCase().startsWith(\"mailto:\")) {\n sanitized = sanitized.slice(7);\n const qIndex = sanitized.indexOf(\"?\");\n if (qIndex >= 0) sanitized = sanitized.slice(0, qIndex);\n }\n\n let normalized = sanitized.replace(/ /g, \"\").toLowerCase();\n if (normalized.endsWith(\".\")) normalized = normalized.slice(0, -1);\n\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n\n const atIndex = normalized.lastIndexOf(\"@\");\n if (atIndex <= 0 || atIndex === normalized.length - 1) return null;\n\n const localPart = normalized.slice(0, atIndex);\n let domain = normalized.slice(atIndex + 1);\n\n let domainForValidation = domain;\n if (hasNonAscii(domain)) {\n // Reject if non-ASCII characters include non-letters\n for (const ch of domain) {\n const cp = ch.codePointAt(0)!;\n if (cp > 127 && !isUnicodeLetter(ch)) return null;\n }\n const ascii = domainToAscii(domain);\n if (ascii == null) return null;\n domainForValidation = ascii;\n }\n\n const emailForValidation = `${localPart}@${domainForValidation}`;\n if (!EMAIL_PATTERN.test(emailForValidation)) return null;\n\n let originalDomain: string | null = null;\n if (options?.tryCorrectTypos === true) {\n const corrected = DOMAIN_CORRECTIONS[domain];\n if (corrected != null) {\n originalDomain = domain;\n domain = corrected;\n normalized = `${localPart}@${domain}`;\n domainForValidation = domain;\n }\n }\n\n const lastDot = domain.lastIndexOf(\".\");\n const tld = lastDot >= 0 ? domain.slice(lastDot + 1) : \"\";\n\n const country = tld.length > 0 ? (getTldCountryMap().get(\".\" + tld) ?? null) : null;\n const provider = PROVIDER_DOMAINS[domain] ?? null;\n\n return new EmailAddress(\n normalized,\n localPart,\n domain,\n domainForValidation,\n tld,\n country,\n provider,\n originalDomain,\n );\n }\n\n static parse(input: string, options?: { tryCorrectTypos?: boolean }): EmailAddress {\n const r = EmailAddress.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid email address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EmailAddress.tryParse(input) !== null;\n }\n\n /**\n * Returns a `ValidationResult` describing why the input is invalid,\n * or a valid result when the input is well-formed.\n */\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n\n let sanitized = sanitizeInput(input);\n\n const ltIndex = sanitized.indexOf(\"<\");\n if (ltIndex >= 0) {\n const gtIndex = sanitized.indexOf(\">\", ltIndex + 1);\n if (gtIndex > ltIndex) sanitized = sanitized.slice(ltIndex + 1, gtIndex);\n }\n\n sanitized = sanitized.trim();\n if (sanitized.toLowerCase().startsWith(\"mailto:\")) {\n sanitized = sanitized.slice(7);\n const qIndex = sanitized.indexOf(\"?\");\n if (qIndex >= 0) sanitized = sanitized.slice(0, qIndex);\n }\n\n let normalized = sanitized.replace(/ /g, \"\").toLowerCase();\n if (normalized.endsWith(\".\")) normalized = normalized.slice(0, -1);\n\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Email address is too long.\",\n \"E-postadressen är för lång.\",\n );\n }\n\n const atIndex = normalized.lastIndexOf(\"@\");\n if (atIndex <= 0 || atIndex === normalized.length - 1) {\n return invalidResult(\n input,\n ValidationErrorReason.MissingAtSign,\n \"Email address must contain an @ sign with text before and after.\",\n \"E-postadressen måste innehålla ett @-tecken med text före och efter.\",\n );\n }\n\n const localPart = normalized.slice(0, atIndex);\n const domain = normalized.slice(atIndex + 1);\n let domainForValidation = domain;\n\n if (hasNonAscii(domain)) {\n for (const ch of domain) {\n const cp = ch.codePointAt(0)!;\n if (cp > 127 && !isUnicodeLetter(ch)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidDomain,\n \"Email address has an invalid domain.\",\n \"E-postadressen har en ogiltig domän.\",\n );\n }\n }\n const ascii = domainToAscii(domain);\n if (ascii == null) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidDomain,\n \"Email address has an invalid domain.\",\n \"E-postadressen har en ogiltig domän.\",\n );\n }\n domainForValidation = ascii;\n }\n\n const emailForValidation = `${localPart}@${domainForValidation}`;\n if (!EMAIL_PATTERN.test(emailForValidation)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid email address format.\",\n \"Ogiltigt format för e-postadress.\",\n );\n }\n\n return validResult(input);\n }\n\n /**\n * Returns the normalized email in lowercase, e.g. `user@example.com`.\n * Returns `null` for invalid or empty input.\n */\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; tryCorrectTypos?: boolean },\n ): string | null {\n const r = EmailAddress.tryParse(\n input,\n options?.tryCorrectTypos != null ? { tryCorrectTypos: options.tryCorrectTypos } : undefined,\n );\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n /** Returns the normalized email, e.g. `user@example.com`, or `null` if invalid. */\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; tryCorrectTypos?: boolean },\n ): string | null {\n return EmailAddress.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EmailAddress.normalize(input) === input;\n }\n\n /** Returns the normalized email address, e.g. `user@example.com`. */\n toNormalizedString(): string {\n return this.value;\n }\n\n /** Returns the normalized email address, e.g. `user@example.com`. */\n toString(): string {\n return this.value;\n }\n\n /**\n * Returns the email with the domain in ASCII (Punycode) form, e.g.\n * `user@xn--rneholm-b1a.com`. Same as `toString()` for ASCII domains.\n */\n toAsciiString(): string {\n return this.isInternationalizedDomain ? `${this.localPart}@${this.domainAscii}` : this.value;\n }\n\n /**\n * Scans unstructured text for potential email addresses. Heuristic; may include false positives.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<EmailAddress>[] {\n if (!text) return [];\n const out: TextCandidate<EmailAddress>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const r = EmailAddress.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<EmailAddress>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"EmailAddress\",\n category: TextCandidateCategory.Contact,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskEmailAddressInternal(r, false),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: EmailAddress | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n\n compareTo(other: EmailAddress | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction hasNonAscii(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n if (s.charCodeAt(i) > 127) return true;\n }\n return false;\n}\n\nconst UNICODE_LETTER = /\\p{L}/u;\nfunction isUnicodeLetter(ch: string): boolean {\n return UNICODE_LETTER.test(ch);\n}\n\n/**\n * Returns a masked email showing the first character of the local part and the full domain,\n * e.g. `peter@example.com` → `p***@example.com`.\n * Set `maskDomain` to `true` to also mask the domain label: `p***@e***.com`.\n */\nexport function maskEmailAddress(email: EmailAddress, options?: { maskDomain?: boolean }): string {\n return maskEmailAddressInternal(email, options?.maskDomain === true);\n}\n\nfunction maskEmailAddressInternal(email: EmailAddress, maskDomain: boolean): string {\n const local = email.localPart;\n const maskedLocal =\n local.length <= 1 ? local : local[0] + \"*\".repeat(Math.min(local.length - 1, 3));\n\n if (maskDomain) {\n const domain = email.domain;\n const firstDot = domain.indexOf(\".\");\n if (firstDot > 0) {\n const label = domain.slice(0, firstDot);\n const suffix = domain.slice(firstDot);\n const maskedDomain =\n label.length <= 1 ? label : label[0] + \"*\".repeat(Math.min(label.length - 1, 3));\n return `${maskedLocal}@${maskedDomain}${suffix}`;\n }\n }\n\n return `${maskedLocal}@${email.domain}`;\n}\n\n/** Returns a `mailto:` URI, e.g. `mailto:info@example.com`. */\nexport function toMailtoUri(email: EmailAddress): string {\n return `mailto:${email.toNormalizedString()}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 2048;\n\nconst RESERVED_TLDS = new Set([\"test\", \"example\", \"invalid\", \"localhost\"]);\nconst RESERVED_DOMAINS = new Set([\"example.com\", \"example.org\", \"example.net\"]);\n\nconst DEFAULT_PORTS: Record<string, number> = {\n http: 80,\n https: 443,\n ftp: 21,\n ws: 80,\n wss: 443,\n gopher: 70,\n};\n\nlet tldCountryMapCache: Map<string, Country> | null = null;\nfunction getTldCountryMap(): Map<string, Country> {\n if (tldCountryMapCache) return tldCountryMapCache;\n const m = new Map<string, Country>();\n for (const c of Country.all) {\n if (c.topLevelDomain) m.set(c.topLevelDomain.toLowerCase(), c);\n }\n tldCountryMapCache = m;\n return m;\n}\n\nconst SCAN_PATTERN =\n /(?:[a-zA-Z][\\w+.-]*:\\/\\/[^\\s<>\"']+|(?:mailto|tel|sms|callto):[^\\s<>\"']+|\\bwww\\.[^\\s<>\"']+)/gi;\n\nconst IPV4 = /^(?:\\d{1,3}\\.){3}\\d{1,3}$/;\nconst ABSOLUTE_URI = /^([a-zA-Z][a-zA-Z0-9+\\-.]*):/;\nconst HIERARCHICAL_RE = /^([a-zA-Z][a-zA-Z0-9+\\-.]*):\\/\\//;\n\ninterface UrlParts {\n value: string;\n scheme: string;\n host: string;\n port: number | null;\n path: string;\n query: string | null;\n fragment: string | null;\n tld: string;\n country: Country | null;\n isExample: boolean;\n isIp: boolean;\n}\n\n/**\n * A URL or URI (`webbadress`). Accepts any valid URI scheme — `http`, `https`,\n * `mailto`, `tel`, `ssh`, custom schemes, etc. Bare domains like `example.com`\n * are auto-prefixed with `https://`. Reserved example/test domains per\n * RFC 2606 / RFC 6761 are flagged via `isExampleDomain`.\n */\nexport class Url {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"URL\",\n localizedName: \"Webbadress\",\n emoji: \"\\u{1F517}\",\n sources: Object.freeze([\n \"https://datatracker.ietf.org/doc/html/rfc3986\",\n \"https://datatracker.ietf.org/doc/html/rfc2606\",\n \"https://datatracker.ietf.org/doc/html/rfc6761\",\n ]),\n });\n\n /** The normalized URL string, e.g. `https://www.example.com/path`. */\n readonly value: string;\n /** The URI scheme without `://`, e.g. `https`. */\n readonly scheme: string;\n /** The full hostname, e.g. `www.example.com`. Empty for non-hierarchical URIs. */\n readonly host: string;\n /** Explicit port, or `null` when the default port for the scheme is used. */\n readonly port: number | null;\n /** The path component, e.g. `/path/to/page`. Root paths are `/`. */\n readonly path: string;\n /** Query string without `?`, or `null` when absent. */\n readonly query: string | null;\n /** Fragment without `#`, or `null` when absent. */\n readonly fragment: string | null;\n /** Top-level domain without the dot, e.g. `com`, `se`. */\n readonly topLevelDomain: string;\n /** Country associated with a country-code TLD, or `null` for generic TLDs. */\n readonly country: Country | null;\n /** True when the scheme is `https`. */\n readonly isSecure: boolean;\n /** True when the host is a reserved example/test domain (RFC 2606 / RFC 6761). */\n readonly isExampleDomain: boolean;\n /** True when the host is an IP address. */\n readonly isIpAddress: boolean;\n\n private constructor(p: UrlParts) {\n this.value = p.value;\n this.scheme = p.scheme;\n this.host = p.host;\n this.port = p.port;\n this.path = p.path;\n this.query = p.query;\n this.fragment = p.fragment;\n this.topLevelDomain = p.tld;\n this.country = p.country;\n this.isSecure = p.scheme === \"https\";\n this.isExampleDomain = p.isExample;\n this.isIpAddress = p.isIp;\n }\n\n static tryParse(input: string | null | undefined): Url | null {\n if (input == null || input.trim() === \"\") return null;\n\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n let parsed = Url.#tryParseAbsolute(trimmed);\n if (parsed == null) {\n if (!trimmed.includes(\".\")) return null;\n parsed = Url.#tryParseAbsolute(\"https://\" + trimmed);\n if (parsed == null) return null;\n }\n\n return parsed;\n }\n\n static parse(input: string): Url {\n const r = Url.tryParse(input);\n if (r === null) throw new Error(\"Invalid URL.\");\n return r;\n }\n\n /**\n * The standard `URL` view of this value, for interop with `fetch` and other\n * web APIs. The .NET port exposes the same thing as `ToUri()`.\n */\n toUrl(): URL {\n return new URL(this.value);\n }\n\n /** Creates a {@link Url} from a standard `URL`. Throws when it cannot be represented. */\n static fromUrl(url: URL): Url {\n const r = Url.tryParse(url.href);\n if (r === null) throw new Error(\"Invalid URL.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Url.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Url.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return Url.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Url.normalize(input) === input;\n }\n\n /** Returns the normalized URL, e.g. `https://www.example.com/path`. */\n toNormalizedString(): string {\n return this.value;\n }\n\n /** Returns the normalized URL, e.g. `https://www.example.com/path`. */\n toString(): string {\n return this.value;\n }\n\n /**\n * Scans unstructured text for potential URLs. Heuristic — may include false positives.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Url>[] {\n if (!text) return [];\n const out: TextCandidate<Url>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const candidate = trimTrailingPunctuation(m[0]);\n const url = Url.tryParse(candidate);\n if (!url) continue;\n out.push(\n new TextCandidate<Url>({\n startIndex: m.index,\n length: candidate.length,\n originalText: candidate,\n typeName: \"Url\",\n category: TextCandidateCategory.Contact,\n normalizedForm: url.toNormalizedString(),\n formattedForm: url.toString(),\n maskedForm: maskUrl(url),\n confidence: TextMatchConfidence.High,\n value: url,\n }),\n );\n }\n return out;\n }\n\n equals(other: Url | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n\n compareTo(other: Url | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n\n static #tryParseAbsolute(input: string): Url | null {\n const m = input.match(ABSOLUTE_URI);\n if (!m) return null;\n const scheme = m[1]!.toLowerCase();\n if (scheme.includes(\".\")) return null;\n\n const isHierarchical = HIERARCHICAL_RE.test(input);\n if (isHierarchical) {\n return Url.#parseHierarchical(input, scheme);\n }\n return Url.#parseNonHierarchical(input, scheme);\n }\n\n static #parseHierarchical(input: string, scheme: string): Url | null {\n let u: URL;\n try {\n u = new URL(input);\n } catch {\n return null;\n }\n\n const rawHost = u.hostname;\n const isIp = rawHost.length > 0 && (IPV4.test(rawHost) || rawHost.startsWith(\"[\"));\n let tld = \"\";\n if (!isIp && rawHost.length > 0) {\n const lastDot = rawHost.lastIndexOf(\".\");\n tld = lastDot >= 0 ? rawHost.slice(lastDot + 1) : \"\";\n }\n\n let country: Country | null = null;\n if (!isIp && tld.length > 0) {\n country = getTldCountryMap().get(\".\" + tld) ?? null;\n }\n\n const isExample =\n !isIp &&\n rawHost.length > 0 &&\n (RESERVED_TLDS.has(tld.toLowerCase()) ||\n RESERVED_DOMAINS.has(rawHost.toLowerCase()) ||\n rawHost.toLowerCase().endsWith(\".example.com\") ||\n rawHost.toLowerCase().endsWith(\".example.org\") ||\n rawHost.toLowerCase().endsWith(\".example.net\"));\n\n let port: number | null = null;\n if (u.port !== \"\") port = parseInt(u.port, 10);\n if (port != null && DEFAULT_PORTS[scheme] === port) port = null;\n\n const normalized = u.href;\n const path = u.pathname;\n const query = u.search.length > 0 ? u.search.slice(1) : null;\n const fragment = u.hash.length > 0 ? u.hash.slice(1) : null;\n\n return new Url({\n value: normalized,\n scheme,\n host: rawHost,\n port,\n path: path.length === 0 ? \"/\" : path,\n query,\n fragment,\n tld,\n country,\n isExample,\n isIp,\n });\n }\n\n static #parseNonHierarchical(input: string, scheme: string): Url | null {\n const colonIdx = input.indexOf(\":\");\n if (colonIdx < 0) return null;\n const rest = input.slice(colonIdx + 1);\n if (rest.length === 0) return null;\n\n let host = \"\";\n let tld = \"\";\n let country: Country | null = null;\n let isExample = false;\n let path = rest;\n let query: string | null = null;\n let fragment: string | null = null;\n\n if (scheme === \"mailto\") {\n const qIdx = rest.indexOf(\"?\");\n let mainPart = rest;\n if (qIdx >= 0) {\n mainPart = rest.slice(0, qIdx);\n const fragIdx = rest.indexOf(\"#\", qIdx);\n if (fragIdx >= 0) {\n query = rest.slice(qIdx + 1, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n } else {\n query = rest.slice(qIdx + 1);\n }\n } else {\n const fragIdx = rest.indexOf(\"#\");\n if (fragIdx >= 0) {\n mainPart = rest.slice(0, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n }\n }\n\n const atIdx = mainPart.lastIndexOf(\"@\");\n if (atIdx >= 0) {\n host = mainPart.slice(atIdx + 1).toLowerCase();\n const lastDot = host.lastIndexOf(\".\");\n tld = lastDot >= 0 ? host.slice(lastDot + 1) : \"\";\n if (tld.length > 0) {\n country = getTldCountryMap().get(\".\" + tld) ?? null;\n }\n isExample =\n RESERVED_TLDS.has(tld.toLowerCase()) ||\n RESERVED_DOMAINS.has(host) ||\n host.endsWith(\".example.com\") ||\n host.endsWith(\".example.org\") ||\n host.endsWith(\".example.net\");\n }\n path = mainPart;\n } else {\n const qIdx = rest.indexOf(\"?\");\n if (qIdx >= 0) {\n path = rest.slice(0, qIdx);\n const fragIdx = rest.indexOf(\"#\", qIdx);\n if (fragIdx >= 0) {\n query = rest.slice(qIdx + 1, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n } else {\n query = rest.slice(qIdx + 1);\n }\n } else {\n const fragIdx = rest.indexOf(\"#\");\n if (fragIdx >= 0) {\n path = rest.slice(0, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n }\n }\n }\n\n const normalized = `${scheme}:${rest}`;\n return new Url({\n value: normalized,\n scheme,\n host,\n port: null,\n path,\n query,\n fragment,\n tld,\n country,\n isExample,\n isIp: false,\n });\n }\n}\n\nfunction trimTrailingPunctuation(value: string): string {\n let end = value.length;\n while (end > 0) {\n const ch = value[end - 1];\n if (\n ch === \".\" ||\n ch === \",\" ||\n ch === \";\" ||\n ch === \"!\" ||\n ch === \"?\" ||\n ch === \")\" ||\n ch === \"]\" ||\n ch === \">\" ||\n ch === \"'\" ||\n ch === '\"'\n ) {\n if (ch === \")\" && value.includes(\"(\")) break;\n if (ch === \"]\" && value.includes(\"[\")) break;\n end--;\n } else {\n break;\n }\n }\n return end < value.length ? value.slice(0, end) : value;\n}\n\n/**\n * Returns a masked URL showing the scheme and host but obscuring the path,\n * query, and fragment, e.g.\n * `https://www.example.com/my/secret/page?key=val` →\n * `https://www.example.com/***?***`.\n * For non-hierarchical URIs (mailto:, tel:), returns `scheme:***`.\n */\nexport function maskUrl(url: Url): string {\n const schemePrefix = url.scheme + \"://\";\n if (!url.value.toLowerCase().startsWith(schemePrefix)) {\n return `${url.scheme}:***`;\n }\n\n let s = url.scheme + \"://\" + url.host;\n if (url.port != null) s += \":\" + url.port;\n\n if (url.path === \"/\" || url.path === \"\") {\n s += \"/\";\n } else {\n s += \"/***\";\n }\n\n if (url.query != null) s += \"?***\";\n if (url.fragment != null) s += \"#***\";\n return s;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepAsciiAlphanumericUppercase } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst ISIN_LENGTH = 12;\nconst MAX_INPUT_LENGTH = 30;\n\n/**\n * An International Securities Identification Number (ISO 6166), e.g. `SE0000108656`.\n * 2-letter country code + 9-character NSIN + 1 Luhn check digit.\n */\nexport class Isin {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"ISIN\",\n localizedName: \"ISIN\",\n emoji: \"\\u{1F4C8}\",\n sources: Object.freeze([\n \"https://www.iso.org/standard/78502.html\",\n \"https://en.wikipedia.org/wiki/International_Securities_Identification_Number\",\n \"https://www.anna-web.org/\",\n ]),\n });\n\n /** The 12-character ISIN in uppercase, e.g. `SE0000108656`. */\n readonly value: string;\n\n /** ISO 3166-1 alpha-2 country code (chars 1-2), e.g. `SE`. */\n get countryCode(): string {\n return this.value.slice(0, 2);\n }\n\n /** National Securities Identifying Number (chars 3-11), e.g. `000010865`. */\n get nsin(): string {\n return this.value.slice(2, 11);\n }\n\n /** Luhn check digit (last char), e.g. `6`. */\n get checkDigit(): string {\n return this.value.slice(11, 12);\n }\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): Isin | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = keepAsciiAlphanumericUppercase(input);\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n if (cleaned.length !== ISIN_LENGTH) return null;\n\n const c0 = cleaned.charCodeAt(0);\n const c1 = cleaned.charCodeAt(1);\n if (c0 < 0x41 || c0 > 0x5a) return null;\n if (c1 < 0x41 || c1 > 0x5a) return null;\n const c11 = cleaned.charCodeAt(11);\n if (c11 < 0x30 || c11 > 0x39) return null;\n\n for (let i = 2; i < 11; i++) {\n const c = cleaned.charCodeAt(i);\n if (!((c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x5a))) return null;\n }\n\n if (!isValidLuhnCheckDigit(cleaned)) return null;\n\n return new Isin(cleaned);\n }\n\n static parse(input: string): Isin {\n const r = Isin.tryParse(input);\n if (r === null) throw new Error(\"Invalid ISIN (length, format, or check digit invalid).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Isin.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Isin.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Isin.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Isin.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Isin>[] {\n if (!text) return [];\n const out: TextCandidate<Isin>[] = [];\n const re = /(?<![A-Z0-9])[A-Z]{2}[A-Z0-9]{9}\\d(?![A-Z0-9])/gu;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = Isin.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<Isin>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Isin\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskIsin(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Isin | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: Isin | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction isValidLuhnCheckDigit(isin: string): boolean {\n let digits = \"\";\n for (let i = 0; i < isin.length; i++) {\n const c = isin.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) {\n digits += isin[i];\n } else if (c >= 0x41 && c <= 0x5a) {\n digits += String(c - 0x41 + 10);\n } else {\n return false;\n }\n }\n return luhnIsValid(digits);\n}\n\n/**\n * Masks the ISIN preserving the country code, e.g. `SE0000108656` → `SE**********`.\n */\nexport function maskIsin(isin: Isin): string {\n return isin.countryCode + \"*\".repeat(isin.value.length - 2);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\nconst PARSE_PATTERN =\n /^(?<name>[\\p{L}\\p{M}\\d][\\p{L}\\p{M}\\d\\s'-]*?)\\s+(?<block>\\d{1,6}):(?<unit>\\d{1,6})$/u;\n\nconst SCAN_PATTERN =\n /(?<![\\p{L}\\p{M}\\d])(?<name>\\p{Lu}[\\p{L}\\p{M}'-]*(?:\\s\\p{Lu}[\\p{L}\\p{M}'-]*)?)\\s+(?<block>\\d{1,6}):(?<unit>\\d{1,6})(?!\\d)/gu;\n\n/**\n * A Swedish property designation (`fastighetsbeteckning`), e.g. `Stockholm Söder 75:2`.\n * Combines the municipality/tract name with a register number `BLOCK:UNIT`.\n */\nexport class SwedishPropertyDesignation {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Property Designation\",\n localizedName: \"Fastighetsbeteckning\",\n emoji: \"\\u{1F3E0}\",\n sources: Object.freeze([\n \"https://www.lantmateriet.se/sv/kartor/vara-karttjanster/min-karta/hitta-fastighetsbeteckning-i-min-karta/\",\n \"https://www2.lantmateriet.se/sv/fastighet-och-mark/information-om-fastigheter/Fastighetsregistret/registrets-innehall/\",\n \"https://sv.wikipedia.org/wiki/Fastighetsbeteckning\",\n ]),\n });\n\n /** The full designation, e.g. `Stockholm Söder 75:2`. */\n readonly value: string;\n /** The capitalized designation name, e.g. `Stockholm Söder`. */\n readonly designationName: string;\n /** The register number `BLOCK:UNIT`, e.g. `75:2`. */\n readonly registerNumber: string;\n /** Block portion of the register number. */\n readonly blockNumber: number;\n /** Unit portion of the register number. */\n readonly unitNumber: number;\n\n private constructor(\n value: string,\n designationName: string,\n registerNumber: string,\n blockNumber: number,\n unitNumber: number,\n ) {\n this.value = value;\n this.designationName = designationName;\n this.registerNumber = registerNumber;\n this.blockNumber = blockNumber;\n this.unitNumber = unitNumber;\n }\n\n static tryParse(input: string | null | undefined): SwedishPropertyDesignation | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = normalizeInput(input);\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n\n const match = PARSE_PATTERN.exec(normalized);\n if (!match || !match.groups) return null;\n\n const name = normalizeName(match.groups.name!);\n if (name === \"\") return null;\n\n const block = Number(match.groups.block);\n const unit = Number(match.groups.unit);\n if (!Number.isFinite(block) || block <= 0) return null;\n if (!Number.isFinite(unit) || unit <= 0) return null;\n\n const register = `${block}:${unit}`;\n const value = `${name} ${register}`;\n return new SwedishPropertyDesignation(value, name, register, block, unit);\n }\n\n static parse(input: string): SwedishPropertyDesignation {\n const r = SwedishPropertyDesignation.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish property designation.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPropertyDesignation.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPropertyDesignation.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishPropertyDesignation.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPropertyDesignation.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishPropertyDesignation>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPropertyDesignation>[] = [];\n const re = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishPropertyDesignation.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishPropertyDesignation>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPropertyDesignation\",\n category: TextCandidateCategory.Property,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishPropertyDesignation(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPropertyDesignation | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPropertyDesignation | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction normalizeInput(input: string): string {\n let s = collapseWhitespace(input);\n s = s.replace(/\\s*:\\s*/g, \":\");\n return s;\n}\n\nfunction normalizeName(input: string): string {\n const words = collapseWhitespace(input)\n .split(\" \")\n .filter((w) => w.length > 0);\n return words.map(capitalizeHyphenatedWord).join(\" \");\n}\n\nfunction capitalizeHyphenatedWord(word: string): string {\n if (!word) return word;\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const locale = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(locale);\n for (let i = 0; i < lowered.length; i++) {\n const ch = lowered[i]!;\n if (isLetter(ch)) {\n return lowered.slice(0, i) + ch.toLocaleUpperCase(locale) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n\nfunction isLetter(ch: string): boolean {\n return /\\p{L}/u.test(ch);\n}\n\n/**\n * Masks the property designation preserving the name, e.g.\n * `Stockholm Söder 75:2` → `Stockholm Söder **:*`.\n */\nexport function maskSwedishPropertyDesignation(d: SwedishPropertyDesignation): string {\n const block = \"*\".repeat(d.blockNumber.toString().length);\n const unit = \"*\".repeat(d.unitNumber.toString().length);\n return `${d.designationName} ${block}:${unit}`;\n}\n\n/** Returns a Lantmäteriet map search URL for the designation. */\nexport function getLantmaterietUrl(d: SwedishPropertyDesignation): string {\n return `https://minkarta.lantmateriet.se/?search=${encodeURIComponent(d.value)}`;\n}\n\n/** Returns a Hitta.se map search URL for the designation. */\nexport function getPropertyHittaUrl(d: SwedishPropertyDesignation): string {\n return `https://www.hitta.se/kartan?s=${encodeURIComponent(d.value)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepAsciiAlphanumericUppercase, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nconst NORMALIZED_PATTERN = /^[A-Z]{2}\\d{2}[A-Z0-9]{1,30}$/;\n\nconst COUNTRY_IBAN_LENGTHS: Readonly<Record<string, number>> = Object.freeze({\n AL: 28,\n AD: 24,\n AT: 20,\n AZ: 28,\n BE: 16,\n BA: 20,\n BG: 22,\n BH: 22,\n BR: 29,\n CH: 21,\n CY: 28,\n CZ: 24,\n DE: 22,\n DK: 18,\n DO: 28,\n EE: 20,\n ES: 24,\n FI: 18,\n FO: 18,\n FR: 27,\n GB: 22,\n GE: 22,\n GI: 23,\n GL: 18,\n GR: 27,\n GT: 28,\n HR: 21,\n HU: 28,\n IE: 22,\n IL: 23,\n IS: 26,\n IT: 27,\n IQ: 23,\n JO: 30,\n KW: 30,\n KZ: 20,\n LB: 28,\n LC: 32,\n LI: 21,\n LT: 20,\n LU: 20,\n LV: 21,\n MC: 27,\n MD: 24,\n ME: 22,\n MK: 19,\n MR: 27,\n MT: 31,\n NL: 18,\n NO: 15,\n PK: 24,\n PL: 28,\n PS: 29,\n PT: 25,\n QA: 29,\n RO: 24,\n RS: 22,\n SA: 24,\n SC: 31,\n SE: 24,\n SI: 19,\n SK: 24,\n SM: 27,\n ST: 25,\n SV: 28,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n VA: 22,\n VG: 24,\n XK: 20,\n});\n\n/**\n * The International Bank Account Number (ISO 13616), e.g. `SE4550000000058398257466`.\n * Validated using MOD-97 check digits.\n */\nexport class Iban {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"IBAN\",\n localizedName: \"IBAN\",\n emoji: \"\\u{1F3E6}\",\n sources: Object.freeze([\n \"https://www.iso.org/standard/81090.html\",\n \"https://www.iban.com/\",\n \"https://en.wikipedia.org/wiki/International_Bank_Account_Number\",\n ]),\n });\n\n static readonly displayName = \"IBAN\";\n static readonly displayNameShort = \"IBAN\";\n\n /** Normalized IBAN without spaces, e.g. `SE4550000000058398257466`. */\n readonly value: string;\n /** ISO 3166-1 alpha-2 country code, e.g. `SE`. */\n readonly countryCode: string;\n /** Display form grouped in blocks of four characters, e.g. `SE45 5000 0000 0583 9825 7466`. */\n readonly formatted: string;\n\n private constructor(value: string, countryCode: string, formatted: string) {\n this.value = value;\n this.countryCode = countryCode;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): Iban | null;\n static tryParse(input: string | null | undefined, countryCode: string): Iban | null;\n static tryParse(input: string | null | undefined, countryCode?: string): Iban | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n if (!isStructurallyValid(normalized)) return null;\n if (!hasValidCheckDigits(normalized)) return null;\n\n const cc = normalized.slice(0, 2);\n if (countryCode !== undefined && cc !== countryCode.toUpperCase()) return null;\n return new Iban(normalized, cc, formatValue(normalized));\n }\n\n static parse(input: string): Iban {\n const r = Iban.tryParse(input);\n if (r === null) throw new Error(\"Invalid IBAN.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Iban.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Iban.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${Iban.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${Iban.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (normalized.length < 15 || normalized.length > 34)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"IBAN must be 15–34 characters.\",\n \"IBAN måste vara 15–34 tecken.\",\n );\n\n if (!NORMALIZED_PATTERN.test(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"IBAN has an invalid format.\",\n \"IBAN har ett ogiltigt format.\",\n );\n\n const cc = normalized.slice(0, 2);\n const expectedLength = COUNTRY_IBAN_LENGTHS[cc];\n if (expectedLength === undefined)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown IBAN country code.\",\n \"Okänd IBAN-landskod.\",\n );\n\n if (normalized.length !== expectedLength)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLengthForCountry,\n \"IBAN length is wrong for the specified country.\",\n \"IBAN-längden stämmer inte för det angivna landet.\",\n );\n\n if (!hasValidCheckDigits(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid IBAN check digits.\",\n \"Ogiltiga IBAN-kontrollsiffror.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Iban>[] {\n if (!text) return [];\n const out: TextCandidate<Iban>[] = [];\n const re = /\\b[A-Z]{2}\\d{2}\\s?[A-Z0-9]{4}[\\sA-Z0-9]{6,30}\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = Iban.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<Iban>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Iban\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskIban(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Iban | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: Iban | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction isStructurallyValid(normalized: string): boolean {\n if (normalized.length < 15 || normalized.length > 34) return false;\n if (!NORMALIZED_PATTERN.test(normalized)) return false;\n const cc = normalized.slice(0, 2);\n const expected = COUNTRY_IBAN_LENGTHS[cc];\n if (expected === undefined) return false;\n if (normalized.length !== expected) return false;\n return true;\n}\n\n/** ISO 7064 MOD-97-10: rotate first 4 chars to end, A=10..Z=35, remainder must be 1. */\nfunction hasValidCheckDigits(normalized: string): boolean {\n let remainder = 0;\n const len = normalized.length;\n for (let i = 4; i < len + 4; i++) {\n const c = normalized.charCodeAt(i % len);\n if (c >= 0x30 && c <= 0x39) {\n remainder = (remainder * 10 + (c - 0x30)) % 97;\n } else {\n const value = c - 0x41 + 10;\n const tens = Math.floor(value / 10);\n const ones = value % 10;\n remainder = (remainder * 10 + tens) % 97;\n remainder = (remainder * 10 + ones) % 97;\n }\n }\n return remainder === 1;\n}\n\nfunction formatValue(normalized: string): string {\n const parts: string[] = [];\n for (let i = 0; i < normalized.length; i += 4) {\n parts.push(normalized.slice(i, i + 4));\n }\n return parts.join(\" \");\n}\n\n/**\n * Returns a masked IBAN preserving the country code and check digits,\n * e.g. `SE45 **** **** **** **** ****`.\n */\nexport function maskIban(iban: Iban): string {\n const formatted = iban.formatted;\n const firstSpace = formatted.indexOf(\" \");\n if (firstSpace < 0) {\n const prefix = formatted.slice(0, Math.min(4, formatted.length));\n return prefix + \"*\".repeat(Math.max(0, formatted.length - 4));\n }\n const prefix = formatted.slice(0, firstSpace);\n const rest = formatted.slice(firstSpace + 1);\n let masked = \"\";\n for (const ch of rest) masked += ch === \" \" ? \" \" : \"*\";\n return `${prefix} ${masked}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst PATTERN =\n /^(?<institution>[A-Z]{4})(?<country>[A-Z]{2})(?<location>[A-Z0-9]{2})(?<branch>[A-Z0-9]{3})?$/;\n\n/**\n * A BIC (Business Identifier Code / SWIFT code) per ISO 9362.\n * 8 or 11 uppercase characters, e.g. `NDEASESS` or `NDEASESSXXX`.\n */\nexport class Bic {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"BIC\",\n localizedName: \"BIC\",\n emoji: \"\\u{1F504}\",\n sources: Object.freeze([\n \"https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/08/41/84108.html\",\n \"https://www.swift.com/standards/data-standards/bic-business-identifier-code\",\n ]),\n });\n\n /** Normalized 8 or 11 uppercase characters, e.g. `NDEASESS`. */\n readonly code: string;\n readonly institutionCode: string;\n readonly countryCode: string;\n readonly locationCode: string;\n readonly branchCode: string | null;\n /** True when the BIC has no branch code (or the branch code is the head office). */\n get isPrimaryOffice(): boolean {\n return this.branchCode === null;\n }\n\n private constructor(\n code: string,\n institutionCode: string,\n countryCode: string,\n locationCode: string,\n branchCode: string | null,\n ) {\n this.code = code;\n this.institutionCode = institutionCode;\n this.countryCode = countryCode;\n this.locationCode = locationCode;\n this.branchCode = branchCode;\n }\n\n static tryParse(input: string | null | undefined): Bic | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = normalizeInternal(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups) return null;\n if (Country.tryParse(match.groups.country!) === null) return null;\n return new Bic(\n normalized,\n match.groups.institution!,\n match.groups.country!,\n match.groups.location!,\n match.groups.branch ?? null,\n );\n }\n\n static parse(input: string): Bic {\n const r = Bic.tryParse(input);\n if (r === null) throw new Error(\"Invalid BIC.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Bic.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Bic.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return Bic.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Bic.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.code;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = normalizeInternal(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"BIC has an invalid format (must be 8 or 11 alphanumeric characters).\",\n \"BIC har ett ogiltigt format (måste vara 8 eller 11 alfanumeriska tecken).\",\n );\n\n if (Country.tryParse(match.groups.country!) === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown BIC country code.\",\n \"Okänd BIC-landskod.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Bic>[] {\n if (!text) return [];\n const out: TextCandidate<Bic>[] = [];\n const re = /\\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const original = m[0];\n if (/[a-z]/.test(original)) continue;\n const r = Bic.tryParse(original);\n if (!r) continue;\n out.push(\n new TextCandidate<Bic>({\n startIndex: m.index,\n length: m[0].length,\n originalText: original,\n typeName: \"Bic\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskBic(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Bic | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: Bic | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nfunction normalizeInternal(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input[i]!;\n if (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \"-\") continue;\n out += c.toUpperCase();\n }\n return out;\n}\n\n/**\n * Returns a masked BIC showing the country code, e.g. `NDEASESS` → `****SE**`.\n */\nexport function maskBic(bic: Bic): string {\n const code = bic.code;\n let out = \"\";\n for (let i = 0; i < code.length; i++) {\n out += i >= 4 && i <= 5 ? code[i] : \"*\";\n }\n return out;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_7_OR_8 = /^\\d{7,8}$/;\n\n/**\n * A Swedish Bankgiro number (`bankgironummer`), e.g. `5805-6201`.\n * 7 or 8 digits with Luhn check digit.\n */\nexport class SwedishBankgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bankgiro Number\",\n localizedName: \"Bankgironummer\",\n emoji: \"\\u{1F4B3}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-number/\",\n \"https://sv.wikipedia.org/wiki/Bankgirot\",\n ]),\n });\n\n static readonly displayName = \"Bankgiro\";\n static readonly displayNameShort = \"BG\";\n\n /** Digit-only value, e.g. `58056201`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `5805-6201`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_7_OR_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const formatted =\n digits.length === 7\n ? `${digits.slice(0, 3)}-${digits.slice(3)}`\n : `${digits.slice(0, 4)}-${digits.slice(4)}`;\n return new SwedishBankgiroNumber(digits, formatted);\n }\n\n static parse(input: string): SwedishBankgiroNumber {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishBankgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishBankgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishBankgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_7_OR_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bankgiro number must be 7 or 8 digits.\",\n \"Bankgironummer måste vara 7 eller 8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{3,4}-\\d{4}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankgiroNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishBankgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/** Returns the Bankgirot search URL for this Bankgiro number. */\nexport function getBankgirotUrl(bg: SwedishBankgiroNumber): string {\n return `https://www.bankgirot.se/sok-bankgironummer/?bgnr=${bg.formatted}`;\n}\n\n/**\n * Returns a masked Bankgiro number, e.g. `****-6201` (default) or `5805-****` when\n * `showLastDigits` is `false`.\n */\nexport function maskSwedishBankgiroNumber(\n bg: SwedishBankgiroNumber,\n options?: { showLastDigits?: boolean },\n): string {\n const showLastDigits = options?.showLastDigits ?? true;\n const formatted = bg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showLastDigits) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_2_TO_8 = /^\\d{2,8}$/;\n\n/**\n * A Swedish Plusgiro number (`plusgironummer`), e.g. `1234567-9`.\n * 2–8 digits with Luhn check digit.\n */\nexport class SwedishPostgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Plusgiro Number\",\n localizedName: \"Plusgironummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/\",\n \"https://sv.wikipedia.org/wiki/Plusgirot\",\n ]),\n });\n\n static readonly displayName = \"Plusgiro\";\n static readonly displayNameShort = \"PG\";\n\n /** Digit-only value, e.g. `41313008`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `4131300-8`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishPostgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_2_TO_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const base = digits.slice(0, digits.length - 1);\n const control = digits.slice(digits.length - 1);\n return new SwedishPostgiroNumber(digits, `${base}-${control}`);\n }\n\n static parse(input: string): SwedishPostgiroNumber {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Plusgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPostgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishPostgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPostgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishPostgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishPostgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_2_TO_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Plusgiro number must be 2–8 digits.\",\n \"Plusgironummer måste vara 2–8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishPostgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPostgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{1,7}-\\d(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishPostgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishPostgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPostgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishPostgiroNumber(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPostgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishPostgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/**\n * Returns a masked Plusgiro number, e.g. `******-9` (default, showing the control digit) or\n * `123456-*` when `showControlDigit` is `false`.\n */\nexport function maskSwedishPostgiroNumber(\n pg: SwedishPostgiroNumber,\n options?: { showControlDigit?: boolean },\n): string {\n const showControlDigit = options?.showControlDigit ?? true;\n const formatted = pg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showControlDigit) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\n/** OCR reference control type. */\nexport const OcrReferenceControlType = {\n CheckDigitOnly: \"CheckDigitOnly\",\n VariableLengthDigit: \"VariableLengthDigit\",\n FixedLength: \"FixedLength\",\n} as const;\nexport type OcrReferenceControlType =\n (typeof OcrReferenceControlType)[keyof typeof OcrReferenceControlType];\n\n/** Options controlling OCR reference parsing. */\nexport class OcrReferenceOptions {\n static readonly Default: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.CheckDigitOnly,\n );\n static readonly VariableLengthDigit: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.VariableLengthDigit,\n );\n\n readonly controlType: OcrReferenceControlType;\n readonly allowedLengths: readonly number[];\n\n constructor(\n controlType: OcrReferenceControlType = OcrReferenceControlType.CheckDigitOnly,\n allowedLengths: readonly number[] = [],\n ) {\n this.controlType = controlType;\n this.allowedLengths = Object.freeze([...allowedLengths]);\n }\n\n static fixedLength(...allowedLengths: number[]): OcrReferenceOptions {\n return new OcrReferenceOptions(OcrReferenceControlType.FixedLength, allowedLengths);\n }\n}\n\n/**\n * A Swedish OCR reference number (`OCR-nummer`), used in payment flows.\n * 2–25 digits with Luhn check digit; optional length-digit and fixed-length variants.\n */\nexport class SwedishOcrReferenceNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"OCR Reference Number\",\n localizedName: \"OCR-referens\",\n emoji: \"\\u{1F4DD}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/ocr-reference-control/\",\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/technical-information/\",\n ]),\n });\n\n static readonly displayName = \"OCR\";\n static readonly displayNameShort = \"OCR\";\n\n readonly value: string;\n readonly formatted: string;\n readonly lengthDigit: number | null;\n\n get length(): number {\n return this.value.length;\n }\n get checkDigit(): number {\n return this.value.charCodeAt(this.value.length - 1) - 0x30;\n }\n\n private constructor(value: string, lengthDigit: number | null) {\n this.value = value;\n this.formatted = value;\n this.lengthDigit = lengthDigit;\n }\n\n static tryParse(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length < 2 || digits.length > 25) return null;\n if (!luhnIsValid(digits)) return null;\n const lengthDigit = validateByOptions(digits, options);\n if (lengthDigit === false) return null;\n return new SwedishOcrReferenceNumber(digits, lengthDigit);\n }\n\n static tryParseVariableLengthDigit(\n input: string | null | undefined,\n ): SwedishOcrReferenceNumber | null {\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.VariableLengthDigit);\n }\n\n static tryParseFixedLength(\n input: string | null | undefined,\n fixedLengths: number | readonly number[],\n ): SwedishOcrReferenceNumber | null {\n const lengths = typeof fixedLengths === \"number\" ? [fixedLengths] : [...fixedLengths];\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.fixedLength(...lengths));\n }\n\n static parse(\n input: string,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber {\n const r = SwedishOcrReferenceNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid OCR reference number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): boolean {\n return SwedishOcrReferenceNumber.tryParse(input, options) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOcrReferenceNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length < 2 || digits.length > 25)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"OCR reference must be 2–25 digits.\",\n \"OCR-referens måste vara 2–25 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOcrReferenceNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOcrReferenceNumber>[] = [];\n const re = /(?<!\\d)\\d{2,25}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOcrReferenceNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishOcrReferenceNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOcrReferenceNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOcrReferenceNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOcrReferenceNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOcrReferenceNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction validateByOptions(digits: string, options: OcrReferenceOptions): number | null | false {\n switch (options.controlType) {\n case OcrReferenceControlType.CheckDigitOnly:\n return null;\n case OcrReferenceControlType.VariableLengthDigit: {\n if (digits.length < 3) return false;\n const expected = digits.length % 10;\n const actual = digits.charCodeAt(digits.length - 2) - 0x30;\n if (actual !== expected) return false;\n return actual;\n }\n case OcrReferenceControlType.FixedLength:\n return options.allowedLengths.length > 0 && options.allowedLengths.includes(digits.length)\n ? null\n : false;\n default:\n return false;\n }\n}\n\n/** Returns a fully masked OCR reference, e.g. `12345678901` → `***********`. */\nexport function maskSwedishOcrReferenceNumber(ocr: SwedishOcrReferenceNumber): string {\n return \"*\".repeat(ocr.value.length);\n}\n","/**\n * Known Swedish banks, identified by clearing number ranges.\n *\n * Equivalent of the .NET `SwedishBank` enum.\n */\nexport const SwedishBank = {\n Unknown: \"Unknown\",\n SverigesRiksbank: \"SverigesRiksbank\",\n Nordea: \"Nordea\",\n NordeaPersonkonto: \"NordeaPersonkonto\",\n NordeaPlusgirot: \"NordeaPlusgirot\",\n DanskeBank: \"DanskeBank\",\n Handelsbanken: \"Handelsbanken\",\n SEB: \"SEB\",\n Swedbank: \"Swedbank\",\n Lansforsakringar: \"Lansforsakringar\",\n IcaBanken: \"IcaBanken\",\n Skandiabanken: \"Skandiabanken\",\n SBABBank: \"SBABBank\",\n AvanzaBank: \"AvanzaBank\",\n AionBank: \"AionBank\",\n BnpParibas: \"BnpParibas\",\n CitibankEurope: \"CitibankEurope\",\n HSBBank: \"HSBBank\",\n CalyonBank: \"CalyonBank\",\n RoyalBankOfScotland: \"RoyalBankOfScotland\",\n DNBSverige: \"DNBSverige\",\n Ekobanken: \"Ekobanken\",\n EnityBankGroup: \"EnityBankGroup\",\n EpBank: \"EpBank\",\n IkanoBank: \"IkanoBank\",\n JAKMedlemsbank: \"JAKMedlemsbank\",\n KlarnaBank: \"KlarnaBank\",\n LandshypotekBank: \"LandshypotekBank\",\n LunarBank: \"LunarBank\",\n LanOchSparBank: \"LanOchSparBank\",\n MarginalenBank: \"MarginalenBank\",\n MultitudeBank: \"MultitudeBank\",\n NobaBankGroup: \"NobaBankGroup\",\n NordnetBank: \"NordnetBank\",\n NorthmillBank: \"NorthmillBank\",\n ResursBank: \"ResursBank\",\n Santander: \"Santander\",\n SparbankenSyd: \"SparbankenSyd\",\n SveaBank: \"SveaBank\",\n Alandsbanken: \"Alandsbanken\",\n VolvofinansBank: \"VolvofinansBank\",\n StadshypotekBank: \"StadshypotekBank\",\n GjensidigeNorSparebank: \"GjensidigeNorSparebank\",\n ParetoOhman: \"ParetoOhman\",\n Forex: \"Forex\",\n ParexBank: \"ParexBank\",\n BriteAb: \"BriteAb\",\n BankingCircle: \"BankingCircle\",\n BankOfChinaLuxembourg: \"BankOfChinaLuxembourg\",\n MedMeraBank: \"MedMeraBank\",\n Folkia: \"Folkia\",\n NetfondsBank: \"NetfondsBank\",\n NasdaqOmx: \"NasdaqOmx\",\n Riksgalden: \"Riksgalden\",\n Privatgirot: \"Privatgirot\",\n Intergiro: \"Intergiro\",\n Nykredit: \"Nykredit\",\n TellerBranchNorway: \"TellerBranchNorway\",\n BankernasAutomatbolag: \"BankernasAutomatbolag\",\n TellerBranchSweden: \"TellerBranchSweden\",\n KortacceptNordic: \"KortacceptNordic\",\n Kommuninvest: \"Kommuninvest\",\n VpSecurities: \"VpSecurities\",\n} as const;\n\nexport type SwedishBank = (typeof SwedishBank)[keyof typeof SwedishBank];\n","import { SwedishBank } from \"./swedish-bank.js\";\n\n/**\n * Resolves a Swedish bank from a 4-digit clearing prefix.\n *\n * Equivalent of the .NET internal `BankResolver`.\n *\n * @internal\n */\n\nfunction inRange(value: number, start: number, end: number): boolean {\n return value >= start && value <= end;\n}\n\nexport function isNordeaPersonkonto(c: number): boolean {\n return c === 3300 || c === 3782;\n}\n\nexport function isSEB(c: number): boolean {\n return inRange(c, 5000, 5999) || inRange(c, 9120, 9124) || inRange(c, 9130, 9149);\n}\n\nexport function isHandelsbanken(c: number): boolean {\n return inRange(c, 6000, 6999);\n}\n\nexport function isNordeaOrdinary(c: number): boolean {\n return (\n inRange(c, 1100, 1199) ||\n inRange(c, 1400, 2099) ||\n (inRange(c, 3000, 3399) && c !== 3300) ||\n (inRange(c, 3410, 3999) && c !== 3782) ||\n inRange(c, 4000, 4999)\n );\n}\n\nexport function isDanskeBankSweden(c: number): boolean {\n return inRange(c, 1200, 1399) || inRange(c, 2400, 2499) || inRange(c, 9180, 9189);\n}\n\nexport function isLansforsakringarBank(c: number): boolean {\n return inRange(c, 3400, 3409) || inRange(c, 9020, 9029) || inRange(c, 9060, 9069);\n}\n\nexport function isIcaBanken(c: number): boolean {\n return inRange(c, 9270, 9279);\n}\nexport function isSkandiabanken(c: number): boolean {\n return inRange(c, 9150, 9169);\n}\nexport function isSBABBank(c: number): boolean {\n return inRange(c, 9250, 9259);\n}\nexport function isSverigesRiksbank(c: number): boolean {\n return inRange(c, 1000, 1099);\n}\nexport function isAvanzaBank(c: number): boolean {\n return inRange(c, 9550, 9569);\n}\nexport function isAionBank(c: number): boolean {\n return inRange(c, 9580, 9589);\n}\nexport function isBnpParibas(c: number): boolean {\n return inRange(c, 9470, 9479);\n}\nexport function isCitibankEurope(c: number): boolean {\n return inRange(c, 9040, 9049);\n}\nexport function isHSBBank(c: number): boolean {\n return inRange(c, 9050, 9059);\n}\nexport function isCalyonBank(c: number): boolean {\n return inRange(c, 9080, 9089);\n}\nexport function isRoyalBankOfScotland(c: number): boolean {\n return inRange(c, 9090, 9099);\n}\nexport function isDNBSweden(c: number): boolean {\n return inRange(c, 9190, 9199);\n}\nexport function isEkobanken(c: number): boolean {\n return inRange(c, 9700, 9709);\n}\nexport function isEnityBankGroup(c: number): boolean {\n return inRange(c, 9680, 9689);\n}\nexport function isEpBank(c: number): boolean {\n return inRange(c, 9590, 9599);\n}\nexport function isIkanoBank(c: number): boolean {\n return inRange(c, 9170, 9179);\n}\nexport function isJAKMedlemsbank(c: number): boolean {\n return inRange(c, 9670, 9679);\n}\nexport function isKlarnaBank(c: number): boolean {\n return inRange(c, 9780, 9789);\n}\nexport function isLandshypotekBank(c: number): boolean {\n return inRange(c, 9390, 9399);\n}\nexport function isLunarBank(c: number): boolean {\n return inRange(c, 9710, 9719);\n}\nexport function isLanOchSparBank(c: number): boolean {\n return inRange(c, 9630, 9639);\n}\nexport function isMarginalenBank(c: number): boolean {\n return inRange(c, 9230, 9239);\n}\nexport function isMultitudeBank(c: number): boolean {\n return inRange(c, 9070, 9079);\n}\nexport function isNobaBankGroup(c: number): boolean {\n return inRange(c, 9640, 9649);\n}\nexport function isNordeaPlusgirot(c: number): boolean {\n return inRange(c, 9500, 9549) || inRange(c, 9960, 9969);\n}\nexport function isNordnetBank(c: number): boolean {\n return inRange(c, 9100, 9109);\n}\nexport function isNorthmillBank(c: number): boolean {\n return inRange(c, 9750, 9759);\n}\nexport function isResursBank(c: number): boolean {\n return inRange(c, 9280, 9289);\n}\nexport function isSantander(c: number): boolean {\n return inRange(c, 9460, 9469);\n}\nexport function isSparbankenSyd(c: number): boolean {\n return inRange(c, 9570, 9579);\n}\nexport function isSwedbank7DigitsAccountNumber(c: number): boolean {\n return inRange(c, 7000, 7999);\n}\nexport function isSwedbank10DigitsAccountNumber(c: number): boolean {\n return inRange(c, 8000, 8999) || inRange(c, 9300, 9349);\n}\nexport function isSveaBank(c: number): boolean {\n return inRange(c, 9660, 9669);\n}\nexport function isAlandsbanken(c: number): boolean {\n return inRange(c, 2300, 2399);\n}\nexport function isVolvofinansBank(c: number): boolean {\n return inRange(c, 9610, 9619);\n}\nexport function isStadshypotekBank(c: number): boolean {\n return inRange(c, 9200, 9209);\n}\nexport function isGjensidigeNorSparebank(c: number): boolean {\n return inRange(c, 9260, 9269);\n}\nexport function isParetoOhman(c: number): boolean {\n return inRange(c, 9380, 9389);\n}\nexport function isForex(c: number): boolean {\n return inRange(c, 9400, 9449);\n}\nexport function isParexBank(c: number): boolean {\n return inRange(c, 9480, 9489);\n}\nexport function isBriteAb(c: number): boolean {\n return inRange(c, 9490, 9499);\n}\nexport function isBankingCircle(c: number): boolean {\n return inRange(c, 9600, 9609);\n}\nexport function isBankOfChinaLuxembourg(c: number): boolean {\n return inRange(c, 9620, 9629);\n}\nexport function isMedMeraBank(c: number): boolean {\n return inRange(c, 9650, 9659);\n}\nexport function isFolkia(c: number): boolean {\n return inRange(c, 9690, 9699);\n}\nexport function isNetfondsBank(c: number): boolean {\n return inRange(c, 9720, 9729);\n}\nexport function isNasdaqOmx(c: number): boolean {\n return inRange(c, 9870, 9879);\n}\nexport function isRiksgalden(c: number): boolean {\n return inRange(c, 9880, 9889);\n}\nexport function isPrivatgirot(c: number): boolean {\n return inRange(c, 9860, 9869);\n}\nexport function isIntergiro(c: number): boolean {\n return inRange(c, 9770, 9779);\n}\nexport function isNykredit(c: number): boolean {\n return c === 9950;\n}\nexport function isTellerBranchNorway(c: number): boolean {\n return c === 9951;\n}\nexport function isBankernasAutomatbolag(c: number): boolean {\n return c === 9952;\n}\nexport function isTellerBranchSweden(c: number): boolean {\n return c === 9953;\n}\nexport function isKortacceptNordic(c: number): boolean {\n return c === 9954;\n}\nexport function isKommuninvest(c: number): boolean {\n return c === 9955;\n}\nexport function isVpSecurities(c: number): boolean {\n return c === 9956;\n}\n\nexport interface BankResolution {\n bank: SwedishBank | null;\n bankName: string | null;\n}\n\nexport function resolveBank(clearing4: number): BankResolution {\n if (isNordeaPersonkonto(clearing4))\n return { bank: SwedishBank.NordeaPersonkonto, bankName: \"Nordea Personkonto\" };\n if (isSverigesRiksbank(clearing4))\n return { bank: SwedishBank.SverigesRiksbank, bankName: \"Sveriges riksbank\" };\n if (isAvanzaBank(clearing4)) return { bank: SwedishBank.AvanzaBank, bankName: \"Avanza Bank\" };\n if (isAionBank(clearing4)) return { bank: SwedishBank.AionBank, bankName: \"AION Bank\" };\n if (isBnpParibas(clearing4))\n return { bank: SwedishBank.BnpParibas, bankName: \"BNP Paribas S.A. Bankfilial Sverige\" };\n if (isCitibankEurope(clearing4))\n return { bank: SwedishBank.CitibankEurope, bankName: \"Citibank Europe plc\" };\n if (isHSBBank(clearing4)) return { bank: SwedishBank.HSBBank, bankName: \"HSB Bank\" };\n if (isCalyonBank(clearing4)) return { bank: SwedishBank.CalyonBank, bankName: \"Calyon Bank\" };\n if (isRoyalBankOfScotland(clearing4))\n return { bank: SwedishBank.RoyalBankOfScotland, bankName: \"Royal Bank of Scotland\" };\n if (isDanskeBankSweden(clearing4))\n return { bank: SwedishBank.DanskeBank, bankName: \"Danske Bank\" };\n if (isDNBSweden(clearing4)) return { bank: SwedishBank.DNBSverige, bankName: \"DNB Sverige\" };\n if (isEkobanken(clearing4)) return { bank: SwedishBank.Ekobanken, bankName: \"Ekobanken\" };\n if (isEnityBankGroup(clearing4))\n return { bank: SwedishBank.EnityBankGroup, bankName: \"Enity Bank Group\" };\n if (isEpBank(clearing4)) return { bank: SwedishBank.EpBank, bankName: \"EP Bank\" };\n if (isHandelsbanken(clearing4))\n return { bank: SwedishBank.Handelsbanken, bankName: \"Handelsbanken\" };\n if (isIcaBanken(clearing4)) return { bank: SwedishBank.IcaBanken, bankName: \"ICA Banken\" };\n if (isIkanoBank(clearing4)) return { bank: SwedishBank.IkanoBank, bankName: \"Ikano Bank\" };\n if (isJAKMedlemsbank(clearing4))\n return { bank: SwedishBank.JAKMedlemsbank, bankName: \"JAK Medlemsbank\" };\n if (isKlarnaBank(clearing4)) return { bank: SwedishBank.KlarnaBank, bankName: \"Klarna Bank\" };\n if (isLandshypotekBank(clearing4))\n return { bank: SwedishBank.LandshypotekBank, bankName: \"Landshypotek Bank\" };\n if (isLunarBank(clearing4)) return { bank: SwedishBank.LunarBank, bankName: \"Lunar Bank\" };\n if (isLansforsakringarBank(clearing4))\n return { bank: SwedishBank.Lansforsakringar, bankName: \"Länsförsäkringar Bank\" };\n if (isLanOchSparBank(clearing4))\n return { bank: SwedishBank.LanOchSparBank, bankName: \"Lån & Spar Bank\" };\n if (isMarginalenBank(clearing4))\n return { bank: SwedishBank.MarginalenBank, bankName: \"Marginalen Bank\" };\n if (isMultitudeBank(clearing4))\n return { bank: SwedishBank.MultitudeBank, bankName: \"Multitude Bank\" };\n if (isNobaBankGroup(clearing4))\n return { bank: SwedishBank.NobaBankGroup, bankName: \"Noba Bank Group\" };\n if (isNordeaPlusgirot(clearing4))\n return { bank: SwedishBank.NordeaPlusgirot, bankName: \"Nordea (Plusgirot)\" };\n if (isNordeaOrdinary(clearing4)) return { bank: SwedishBank.Nordea, bankName: \"Nordea\" };\n if (isNordnetBank(clearing4)) return { bank: SwedishBank.NordnetBank, bankName: \"Nordnet Bank\" };\n if (isNorthmillBank(clearing4))\n return { bank: SwedishBank.NorthmillBank, bankName: \"Northmill Bank\" };\n if (isResursBank(clearing4)) return { bank: SwedishBank.ResursBank, bankName: \"Resurs Bank\" };\n if (isSantander(clearing4)) return { bank: SwedishBank.Santander, bankName: \"Santander\" };\n if (isSBABBank(clearing4)) return { bank: SwedishBank.SBABBank, bankName: \"SBAB Bank\" };\n if (isSEB(clearing4)) return { bank: SwedishBank.SEB, bankName: \"SEB\" };\n if (isSkandiabanken(clearing4))\n return { bank: SwedishBank.Skandiabanken, bankName: \"Skandiabanken\" };\n if (isSparbankenSyd(clearing4))\n return { bank: SwedishBank.SparbankenSyd, bankName: \"Sparbanken Syd\" };\n if (isSwedbank7DigitsAccountNumber(clearing4) || isSwedbank10DigitsAccountNumber(clearing4))\n return { bank: SwedishBank.Swedbank, bankName: \"Swedbank\" };\n if (isSveaBank(clearing4)) return { bank: SwedishBank.SveaBank, bankName: \"Svea Bank\" };\n if (isAlandsbanken(clearing4))\n return { bank: SwedishBank.Alandsbanken, bankName: \"Ålandsbanken Abp (Finland) svensk filial\" };\n if (isVolvofinansBank(clearing4))\n return { bank: SwedishBank.VolvofinansBank, bankName: \"Volvofinans Bank\" };\n if (isStadshypotekBank(clearing4))\n return { bank: SwedishBank.StadshypotekBank, bankName: \"Stadshypotek Bank\" };\n if (isGjensidigeNorSparebank(clearing4))\n return { bank: SwedishBank.GjensidigeNorSparebank, bankName: \"Gjensidige NOR Sparebank\" };\n if (isParetoOhman(clearing4)) return { bank: SwedishBank.ParetoOhman, bankName: \"Pareto Öhman\" };\n if (isForex(clearing4)) return { bank: SwedishBank.Forex, bankName: \"Forex\" };\n if (isParexBank(clearing4)) return { bank: SwedishBank.ParexBank, bankName: \"Parex Bank\" };\n if (isBriteAb(clearing4)) return { bank: SwedishBank.BriteAb, bankName: \"Brite AB\" };\n if (isBankingCircle(clearing4))\n return { bank: SwedishBank.BankingCircle, bankName: \"Banking Circle\" };\n if (isBankOfChinaLuxembourg(clearing4))\n return { bank: SwedishBank.BankOfChinaLuxembourg, bankName: \"Bank of China (Luxembourg)\" };\n if (isMedMeraBank(clearing4)) return { bank: SwedishBank.MedMeraBank, bankName: \"MedMera Bank\" };\n if (isFolkia(clearing4)) return { bank: SwedishBank.Folkia, bankName: \"Folkia\" };\n if (isNetfondsBank(clearing4))\n return { bank: SwedishBank.NetfondsBank, bankName: \"Netfonds Bank\" };\n if (isNasdaqOmx(clearing4)) return { bank: SwedishBank.NasdaqOmx, bankName: \"Nasdaq-OMX\" };\n if (isRiksgalden(clearing4)) return { bank: SwedishBank.Riksgalden, bankName: \"Riksgälden\" };\n if (isPrivatgirot(clearing4)) return { bank: SwedishBank.Privatgirot, bankName: \"Privatgirot\" };\n if (isIntergiro(clearing4)) return { bank: SwedishBank.Intergiro, bankName: \"Intergiro\" };\n if (isNykredit(clearing4)) return { bank: SwedishBank.Nykredit, bankName: \"Nykredit\" };\n if (isTellerBranchNorway(clearing4))\n return { bank: SwedishBank.TellerBranchNorway, bankName: \"Teller Branch Norway\" };\n if (isBankernasAutomatbolag(clearing4))\n return { bank: SwedishBank.BankernasAutomatbolag, bankName: \"Bankernas Automatbolag\" };\n if (isTellerBranchSweden(clearing4))\n return { bank: SwedishBank.TellerBranchSweden, bankName: \"Teller Branch Sweden\" };\n if (isKortacceptNordic(clearing4))\n return { bank: SwedishBank.KortacceptNordic, bankName: \"Kortaccept Nordic\" };\n if (isKommuninvest(clearing4))\n return { bank: SwedishBank.Kommuninvest, bankName: \"Kommuninvest\" };\n if (isVpSecurities(clearing4))\n return { bank: SwedishBank.VpSecurities, bankName: \"VP Securities\" };\n\n return { bank: null, bankName: null };\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { resolveBank } from \"./bank-resolver.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/**\n * A Swedish clearing number (`clearingnummer`), 4 digits (or 5 starting with `8` for Swedbank).\n */\nexport class SwedishBankClearingNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Clearing Number\",\n localizedName: \"Clearingnummer\",\n emoji: \"\\u{1F511}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n readonly digits: string;\n readonly bank: SwedishBank;\n readonly bankName: string;\n\n private constructor(digits: string, bank: SwedishBank, bankName: string) {\n this.digits = digits;\n this.bank = bank;\n this.bankName = bankName;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankClearingNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length < 4 || digits.length > 5) return null;\n\n if (digits.length === 5 && digits[0] !== \"8\") return null;\n if (digits.length === 4 && digits[0] === \"8\") return null;\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null) return null;\n\n return new SwedishBankClearingNumber(digits, bank, bankName);\n }\n\n static parse(input: string): SwedishBankClearingNumber {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid clearing number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankClearingNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankClearingNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toString(): string {\n return this.digits.length === 5 ? `${this.digits.slice(0, 4)}-${this.digits[4]}` : this.digits;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (digits.length < 4 || digits.length > 5)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Clearing number must be 4 or 5 digits.\",\n \"Clearingnummer måste vara 4 eller 5 siffror.\",\n );\n\n if (digits.length === 5 && digits[0] !== \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"A 5-digit clearing number must start with 8 (Swedbank).\",\n \"Ett 5-siffrigt clearingnummer måste börja med 8 (Swedbank).\",\n );\n\n if (digits.length === 4 && digits[0] === \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"Clearing numbers starting with 8 must be 5 digits (Swedbank).\",\n \"Clearingnummer som börjar med 8 måste vara 5 siffror (Swedbank).\",\n );\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownClearingRange,\n \"Clearing number does not match any known bank.\",\n \"Clearingnumret matchar ingen känd bank.\",\n );\n\n return validResult(input);\n }\n\n equals(other: SwedishBankClearingNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: SwedishBankClearingNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/** Returns a masked clearing number showing the bank identifier (first digit), e.g. `5001` → `5***`. */\nexport function maskSwedishBankClearingNumber(c: SwedishBankClearingNumber): string {\n const digits = c.digits;\n return digits.length <= 1 ? \"*\".repeat(digits.length) : digits[0] + \"*\".repeat(digits.length - 1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\nimport { SwedishBankClearingNumber } from \"./swedish-bank-clearing-number.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport {\n isHandelsbanken,\n isNordeaPersonkonto,\n isNordeaPlusgirot,\n isRiksgalden,\n isSparbankenSyd,\n isSwedbank10DigitsAccountNumber,\n resolveBank,\n} from \"./bank-resolver.js\";\n\nconst MAX_INPUT_LENGTH = 40;\nconst DIGITS_11_TO_15 = /^\\d{11,15}$/;\n\n/**\n * A Swedish bank account, identified by clearing number + account number with\n * bank-specific length rules.\n */\nexport class SwedishBankAccount {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Account\",\n localizedName: \"Bankkonto\",\n emoji: \"\\u{1F3E7}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n static readonly displayName = \"Bankkonto\";\n\n readonly clearing: SwedishBankClearingNumber;\n readonly accountNumber: string;\n readonly formatted: string;\n\n get clearingNumber(): string {\n return this.clearing.digits;\n }\n get bankName(): string | null {\n return this.clearing.bankName;\n }\n get bank(): SwedishBank | null {\n return this.clearing.bank;\n }\n\n private constructor(\n clearing: SwedishBankClearingNumber,\n accountNumber: string,\n formatted: string,\n ) {\n this.clearing = clearing;\n this.accountNumber = accountNumber;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankAccount | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_11_TO_15.test(digits)) return null;\n if (!isValidLength(digits)) return null;\n\n const { clearingDigits, account } = splitClearingAndAccount(digits);\n const clearing = SwedishBankClearingNumber.tryParse(clearingDigits);\n if (clearing === null) return null;\n\n return new SwedishBankAccount(clearing, account, `${clearingDigits}-${account}`);\n }\n\n static parse(input: string): SwedishBankAccount {\n const r = SwedishBankAccount.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankkonto number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankAccount.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.clearingNumber + r.accountNumber;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankAccount.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.clearingNumber + this.accountNumber;\n }\n\n toDisplayString(): string {\n return `${SwedishBankAccount.displayName} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_11_TO_15.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bank account must be 11–15 digits.\",\n \"Bankkonto måste vara 11–15 siffror.\",\n );\n\n if (!isValidLength(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidAccountLengthForBank,\n \"Account length is wrong for the identified bank.\",\n \"Kontolängden stämmer inte för den identifierade banken.\",\n );\n\n const { clearingDigits } = splitClearingAndAccount(digits);\n if (SwedishBankClearingNumber.tryParse(clearingDigits) === null)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidClearingNumber,\n \"The clearing number part is invalid.\",\n \"Clearingnummerdelen är ogiltig.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankAccount>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankAccount>[] = [];\n const re = /(?<!\\d)\\d{4,5}[\\s-]?\\d{5,10}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankAccount.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankAccount>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankAccount\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankAccount(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankAccount | null | undefined): boolean {\n return (\n other != null &&\n this.clearingNumber === other.clearingNumber &&\n this.accountNumber === other.accountNumber\n );\n }\n compareTo(other: SwedishBankAccount | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction isValidLength(digits: string): boolean {\n const length = digits.length;\n const c4 = parseInt4(digits);\n\n if (isHandelsbanken(c4)) return length >= 12 && length <= 13;\n if (isNordeaPersonkonto(c4)) return length === 14;\n if (isNordeaPlusgirot(c4)) return length === 14;\n if (isSparbankenSyd(c4)) return length === 14;\n if (isRiksgalden(c4)) return length === 14;\n if (isSwedbank10DigitsAccountNumber(c4)) return length >= 7 && length <= 15;\n\n const { bank } = resolveBank(c4);\n return bank !== null && length === 11;\n}\n\nfunction splitClearingAndAccount(digits: string): { clearingDigits: string; account: string } {\n if (digits[0] === \"8\") {\n return { clearingDigits: digits.slice(0, 5), account: digits.slice(5) };\n }\n return { clearingDigits: digits.slice(0, 4), account: digits.slice(4) };\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/**\n * Returns a masked bank account showing the clearing number, e.g. `5100-*******`.\n * Pass `maskClearingNumber: true` to also mask the clearing number.\n */\nexport function maskSwedishBankAccount(\n account: SwedishBankAccount,\n options?: { maskClearingNumber?: boolean },\n): string {\n const maskClearing = options?.maskClearingNumber ?? false;\n const clearing = maskClearing\n ? \"*\".repeat(account.clearingNumber.length)\n : account.clearingNumber;\n return `${clearing}-${\"*\".repeat(account.accountNumber.length)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { PhoneNumber, maskPhoneNumber } from \"../contact/phone-number.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 50;\nconst DIGITS_7_STARTING_90 = /^90\\d{5}$/;\n\n/**\n * A Swedish Swish payment number (`Swish-nummer`).\n * Accepts:\n * - Swish 123 numbers (10 digits starting with `123`)\n * - 90-numbers (7 digits starting with `90X`, expanded to `123` + 7 digits)\n * - Swedish mobile phone numbers\n */\nexport class SwedishSwishNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swish Number\",\n localizedName: \"Swish-nummer\",\n emoji: \"\\u{1F4F1}\",\n sources: Object.freeze([\n \"https://www.swish.nu/faq/company/what-is-the-format-of-the-swish-number\",\n \"https://github.com/cisene/swish-123\",\n \"https://www.insamlingskontroll.se/\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly isSwish123: boolean;\n readonly isMobileNumber: boolean;\n readonly is90Number: boolean;\n readonly phoneNumber: PhoneNumber | null;\n\n private constructor(\n value: string,\n formatted: string,\n isSwish123: boolean,\n isMobileNumber: boolean,\n is90Number: boolean,\n phoneNumber: PhoneNumber | null,\n ) {\n this.value = value;\n this.formatted = formatted;\n this.isSwish123 = isSwish123;\n this.isMobileNumber = isMobileNumber;\n this.is90Number = is90Number;\n this.phoneNumber = phoneNumber;\n }\n\n static tryParse(input: string | null | undefined): SwedishSwishNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = sanitizeInput(input).trim();\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(cleaned);\n\n if (DIGITS_7_STARTING_90.test(digits)) {\n const expanded = \"123\" + digits;\n return new SwedishSwishNumber(expanded, format90Number(digits), true, false, true, null);\n }\n\n if (digits.length === 10 && digits.startsWith(\"123\")) {\n const is90 = digits.startsWith(\"1239\");\n return new SwedishSwishNumber(\n digits,\n is90 ? format90Number(digits.slice(3)) : formatSwish123(digits),\n true,\n false,\n is90,\n null,\n );\n }\n\n const phone = PhoneNumber.tryParse(cleaned);\n if (phone !== null && phone.isSwedish && phone.isMobile) {\n return new SwedishSwishNumber(phone.digits, phone.formatted, false, true, false, phone);\n }\n\n return null;\n }\n\n static parse(input: string): SwedishSwishNumber {\n const r = SwedishSwishNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swish number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishSwishNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSwishNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSwishNumber.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishSwishNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishSwishNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishSwishNumber>[] = [];\n const re =\n /(?<!\\d)123[\\s-]?\\d{3}[\\s-]?\\d{2}[\\s-]?\\d{2}(?!\\d)|(?<!\\d)90[0-9][\\s-]?\\d{2}[\\s-]?\\d{2}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishSwishNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishSwishNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishSwishNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishSwishNumber(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishSwishNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishSwishNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction formatSwish123(digits: string): string {\n if (digits.length !== 10) return digits;\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)} ${digits.slice(6, 8)} ${digits.slice(8, 10)}`;\n}\n\nfunction format90Number(shortDigits: string): string {\n if (shortDigits.length !== 7) return shortDigits;\n return `${shortDigits.slice(0, 3)} ${shortDigits.slice(3, 5)} ${shortDigits.slice(5, 7)}`;\n}\n\n/**\n * Returns a masked Swish number, e.g. `123-*** ** **` for 123-numbers,\n * `9** ** **` for 90-numbers.\n */\nexport function maskSwedishSwishNumber(swish: SwedishSwishNumber): string {\n if (swish.is90Number) {\n const shortDigits = swish.value.slice(3);\n return `${shortDigits[0]}** ** **`;\n }\n if (swish.isSwish123) return \"123-*** ** **\";\n return swish.phoneNumber !== null\n ? maskPhoneNumber(swish.phoneNumber)\n : \"*\".repeat(swish.value.length);\n}\n","import { Address } from \"./contact/address.js\";\nimport { AddressZipCode } from \"./contact/address-zip-code.js\";\nimport { PhoneNumber } from \"./contact/phone-number.js\";\nimport { SwedishAddress } from \"./contact/swedish-address.js\";\nimport { Country } from \"./geography/country.js\";\nimport { SwedishCounty } from \"./geography/swedish-county.js\";\nimport { SwedishMunicipality } from \"./geography/swedish-municipality.js\";\nimport { DunsNumber } from \"./organization/duns-number.js\";\nimport { EuVatNumber } from \"./organization/eu-vat-number.js\";\nimport { LeiCode } from \"./organization/lei-code.js\";\nimport { SwedishOrganizationNumber } from \"./organization/swedish-organization-number.js\";\nimport { SwedishCoordinationNumber } from \"./person/swedish-coordination-number.js\";\nimport { SwedishPersonalIdentityNumber } from \"./person/swedish-personal-identity-number.js\";\nimport { TextCandidateCategory } from \"./text-scanning/text-candidate-category.js\";\nimport { defaultTextScanner } from \"./text-scanning/text-scanner.js\";\nimport { EmailAddress } from \"./web/email-address.js\";\nimport { Url } from \"./web/url.js\";\nimport { Isin } from \"./finance/isin.js\";\nimport { SwedishPropertyDesignation } from \"./property/swedish-property-designation.js\";\nimport { Iban } from \"./banking/iban.js\";\nimport { Bic } from \"./banking/bic.js\";\nimport { SwedishBankgiroNumber } from \"./banking/swedish-bankgiro-number.js\";\nimport { SwedishPostgiroNumber } from \"./banking/swedish-postgiro-number.js\";\nimport { SwedishOcrReferenceNumber } from \"./banking/swedish-ocr-reference-number.js\";\nimport { SwedishBankAccount } from \"./banking/swedish-bank-account.js\";\nimport { SwedishSwishNumber } from \"./banking/swedish-swish-number.js\";\n\nlet registered = false;\n\n/** Registers every built-in `findCandidatesInText` implementation on the shared scanner. */\nexport function registerDefaultTextScanners(): void {\n if (registered) return;\n registered = true;\n\n defaultTextScanner.register({\n typeName: \"Address\",\n category: TextCandidateCategory.Contact,\n scan: Address.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"AddressZipCode\",\n category: TextCandidateCategory.Contact,\n scan: AddressZipCode.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"PhoneNumber\",\n category: TextCandidateCategory.Contact,\n scan: PhoneNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishAddress\",\n category: TextCandidateCategory.Contact,\n scan: SwedishAddress.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"Country\",\n category: TextCandidateCategory.Geography,\n scan: Country.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishCounty\",\n category: TextCandidateCategory.Geography,\n scan: SwedishCounty.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishMunicipality\",\n category: TextCandidateCategory.Geography,\n scan: SwedishMunicipality.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"SwedishPersonalIdentityNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n scan: SwedishPersonalIdentityNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishCoordinationNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n scan: SwedishCoordinationNumber.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"SwedishOrganizationNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n scan: SwedishOrganizationNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"EuVatNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n scan: EuVatNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"DunsNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n scan: DunsNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"LeiCode\",\n category: TextCandidateCategory.OrganizationIdentifier,\n scan: LeiCode.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"EmailAddress\",\n category: TextCandidateCategory.Contact,\n scan: EmailAddress.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"Url\",\n category: TextCandidateCategory.Contact,\n scan: Url.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"Isin\",\n category: TextCandidateCategory.Financial,\n scan: Isin.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"SwedishPropertyDesignation\",\n category: TextCandidateCategory.Property,\n scan: SwedishPropertyDesignation.findCandidatesInText,\n });\n\n defaultTextScanner.register({\n typeName: \"Iban\",\n category: TextCandidateCategory.Financial,\n scan: Iban.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"Bic\",\n category: TextCandidateCategory.Financial,\n scan: Bic.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishBankgiroNumber\",\n category: TextCandidateCategory.Financial,\n scan: SwedishBankgiroNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishPostgiroNumber\",\n category: TextCandidateCategory.Financial,\n scan: SwedishPostgiroNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishOcrReferenceNumber\",\n category: TextCandidateCategory.Financial,\n scan: SwedishOcrReferenceNumber.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishBankAccount\",\n category: TextCandidateCategory.Financial,\n scan: SwedishBankAccount.findCandidatesInText,\n });\n defaultTextScanner.register({\n typeName: \"SwedishSwishNumber\",\n category: TextCandidateCategory.Financial,\n scan: SwedishSwishNumber.findCandidatesInText,\n });\n}\n","/**\n * Text scanning entry point.\n *\n * Importing this module registers every built-in `findCandidatesInText`\n * implementation on {@link defaultTextScanner}. The registration lives here\n * rather than in the package root so that consumers importing only a value\n * object (for example via `@budiauktioner/buildi-primitives/organization`) do\n * not pull the whole scannable-type graph into their bundle.\n */\n\nimport { registerDefaultTextScanners } from \"../register-default-text-scanners.js\";\n\nregisterDefaultTextScanners();\n\nexport { registerDefaultTextScanners } from \"../register-default-text-scanners.js\";\nexport { TextCandidate } from \"./text-candidate.js\";\nexport { TextCandidateCategory } from \"./text-candidate-category.js\";\nexport { TextMatchConfidence } from \"./text-match-confidence.js\";\nexport {\n TextScanner,\n defaultTextScanner,\n type TextScanFunction,\n type RegisteredScanner,\n} from \"./text-scanner.js\";\nexport { type TextScannerOptions } from \"./text-scanner-options.js\";\nexport { TextScanResult } from \"./text-scan-result.js\";\n"]}