@budiauktioner/buildi-primitives 0.1.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.
- package/CHANGELOG.md +51 -0
- package/LICENSE +21 -0
- package/README.md +253 -0
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/banking/index.cjs +6491 -0
- package/dist/banking/index.cjs.map +1 -0
- package/dist/banking/index.d.cts +58 -0
- package/dist/banking/index.d.ts +58 -0
- package/dist/banking/index.js +6464 -0
- package/dist/banking/index.js.map +1 -0
- package/dist/contact/index.cjs +6678 -0
- package/dist/contact/index.cjs.map +1 -0
- package/dist/contact/index.d.cts +709 -0
- package/dist/contact/index.d.ts +709 -0
- package/dist/contact/index.js +6586 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/country-BhD51LDL.d.cts +433 -0
- package/dist/country-p0n0EVQ9.d.ts +433 -0
- package/dist/finance/index.cjs +3592 -0
- package/dist/finance/index.cjs.map +1 -0
- package/dist/finance/index.d.cts +83 -0
- package/dist/finance/index.d.ts +83 -0
- package/dist/finance/index.js +3584 -0
- package/dist/finance/index.js.map +1 -0
- package/dist/geography/index.cjs +4227 -0
- package/dist/geography/index.cjs.map +1 -0
- package/dist/geography/index.d.cts +34 -0
- package/dist/geography/index.d.ts +34 -0
- package/dist/geography/index.js +4202 -0
- package/dist/geography/index.js.map +1 -0
- package/dist/index.cjs +14087 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +75 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.js +13868 -0
- package/dist/index.js.map +1 -0
- package/dist/isin-EeVPpNWu.d.ts +39 -0
- package/dist/isin-ZlQLBVm8.d.cts +39 -0
- package/dist/organization/index.cjs +2376 -0
- package/dist/organization/index.cjs.map +1 -0
- package/dist/organization/index.d.cts +117 -0
- package/dist/organization/index.d.ts +117 -0
- package/dist/organization/index.js +2346 -0
- package/dist/organization/index.js.map +1 -0
- package/dist/person/index.cjs +1144 -0
- package/dist/person/index.cjs.map +1 -0
- package/dist/person/index.d.cts +60 -0
- package/dist/person/index.d.ts +60 -0
- package/dist/person/index.js +1125 -0
- package/dist/person/index.js.map +1 -0
- package/dist/person-full-name-Cmc9Ynuc.d.cts +82 -0
- package/dist/person-full-name-D6Hbsab6.d.ts +82 -0
- package/dist/phone-number-C24--ggy.d.ts +139 -0
- package/dist/phone-number-DZ-YxCQQ.d.cts +139 -0
- package/dist/property/index.cjs +487 -0
- package/dist/property/index.cjs.map +1 -0
- package/dist/property/index.d.cts +56 -0
- package/dist/property/index.d.ts +56 -0
- package/dist/property/index.js +480 -0
- package/dist/property/index.js.map +1 -0
- package/dist/sample-data/index.cjs +12310 -0
- package/dist/sample-data/index.cjs.map +1 -0
- package/dist/sample-data/index.d.cts +260 -0
- package/dist/sample-data/index.d.ts +260 -0
- package/dist/sample-data/index.js +12302 -0
- package/dist/sample-data/index.js.map +1 -0
- package/dist/swedish-address-DNC3ftRF.d.cts +297 -0
- package/dist/swedish-address-GMzjqgxb.d.ts +297 -0
- package/dist/swedish-bank-account-holder-name-BFJ8h1aO.d.cts +45 -0
- package/dist/swedish-bank-account-holder-name-CAAru07F.d.ts +45 -0
- package/dist/swedish-municipality-DlUS7g7h.d.cts +87 -0
- package/dist/swedish-municipality-nDRHYRAd.d.ts +87 -0
- package/dist/swedish-organization-name-D7NvERxA.d.cts +33 -0
- package/dist/swedish-organization-name-rR0Q836C.d.ts +33 -0
- package/dist/swedish-organization-number-Bcj7V_lh.d.cts +130 -0
- package/dist/swedish-organization-number-DM8dpXwR.d.ts +130 -0
- package/dist/swedish-organization-type-CZOdETwG.d.cts +29 -0
- package/dist/swedish-organization-type-CZOdETwG.d.ts +29 -0
- package/dist/swedish-personal-identity-number-BiIg4io3.d.ts +149 -0
- package/dist/swedish-personal-identity-number-Cp9Coz55.d.cts +149 -0
- package/dist/swedish-property-designation-BM-gdd9x.d.ts +46 -0
- package/dist/swedish-property-designation-BaHXufqV.d.cts +46 -0
- package/dist/swedish-sni-code-Ccsswpni.d.ts +53 -0
- package/dist/swedish-sni-code-CuJFyM6l.d.cts +53 -0
- package/dist/swedish-swish-number-CL6Gx_h3.d.cts +397 -0
- package/dist/swedish-swish-number-DDG3mNDg.d.ts +397 -0
- package/dist/text-candidate-qg2bD9PY.d.cts +110 -0
- package/dist/text-candidate-qg2bD9PY.d.ts +110 -0
- package/dist/text-scanning/index.cjs +10414 -0
- package/dist/text-scanning/index.cjs.map +1 -0
- package/dist/text-scanning/index.d.cts +153 -0
- package/dist/text-scanning/index.d.ts +153 -0
- package/dist/text-scanning/index.js +10406 -0
- package/dist/text-scanning/index.js.map +1 -0
- package/dist/validation/index.cjs +83 -0
- package/dist/validation/index.cjs.map +1 -0
- package/dist/validation/index.d.cts +63 -0
- package/dist/validation/index.d.ts +63 -0
- package/dist/validation/index.js +79 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/web/index.cjs +3994 -0
- package/dist/web/index.cjs.map +1 -0
- package/dist/web/index.d.cts +203 -0
- package/dist/web/index.d.ts +203 -0
- package/dist/web/index.js +3987 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +211 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/input-sanitization.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/primitives-defaults.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/validation/validation-error-reason.ts","../../src/banking/iban.ts","../../src/finance/currency.ts","../../src/geography/geo-coordinate.ts","../../src/geography/language.ts","../../src/geography/continent.ts","../../src/geography/country-data.ts","../../src/geography/country-coordinates.ts","../../src/geography/country-capital.ts","../../src/geography/country-capitals.ts","../../src/geography/country-metadata.ts","../../src/geography/country.ts","../../src/banking/bic.ts","../../src/internal/luhn.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/person/person-name-normalization.ts","../../src/person/person-given-name.ts","../../src/person/person-family-name.ts","../../src/person/person-full-name.ts","../../src/organization/organization-validation-utils.ts","../../src/organization/swedish-organization-name.ts","../../src/banking/swedish-bank-account-holder-name.ts","../../src/contact/phone-calling-code.ts","../../src/contact/phone-number.ts","../../src/banking/swedish-swish-number.ts","../../src/banking/swedish-banking-number.ts"],"names":["prefix","MAX_INPUT_LENGTH","BY_KEY","BY_NAME","parseInt4","collapseWhitespace","capitalizeWord","ALL","bg","pg"],"mappings":"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ACJ,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,EAAA,EAAI,EAAA;AAAA,E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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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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,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,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,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;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","file":"index.cjs","sourcesContent":["/**\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","/**\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","/**\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","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 * 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 { 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 { 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 { 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","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 { 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 { 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 { 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 { 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","/**\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","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 { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace as baseCollapse } from \"../internal/input-sanitization.js\";\n\n// Single-letter name parts (e.g. \"B N\" returned by an identity provider) are\n// not officially valid full names in most jurisdictions, but they appear in\n// real-world data from Skatteverket, BankID and other identity providers.\n// Normalization must preserve them rather than discard the name.\nexport const SINGLE_PART_PATTERN =\n /^(?:[\\p{L}\\p{M}]+|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\nexport const FULL_NAME_PATTERN = /^[\\p{L}\\p{M}][\\p{L}\\p{M}']*(?:\\s+[\\p{L}\\p{M}][\\p{L}\\p{M}']*)+$/u;\n\nconst HONORIFICS = [\n \"fröken\",\n \"froken\",\n \"froeken\",\n \"prof\",\n \"miss\",\n \"mrs\",\n \"mr\",\n \"ms\",\n \"dr\",\n \"herr\",\n \"fru\",\n];\n\nexport function collapseWhitespace(input: string | null | undefined): string {\n let result = baseCollapse(input);\n result = result.replace(/\\s*-\\s*/g, \"-\");\n const parts = result\n .split(\" \")\n .map((p) => p.replace(/^\\.+|\\.+$/g, \"\"))\n .filter((p) => p.length > 0);\n result = parts.join(\" \");\n return stripLeadingHonorific(result);\n}\n\nfunction stripLeadingHonorific(input: string): string {\n const lower = input.toLowerCase();\n for (const h of HONORIFICS) {\n if (input.length <= h.length) continue;\n if (!lower.startsWith(h)) continue;\n if (input[h.length] !== \" \") continue;\n return input.slice(h.length + 1);\n }\n return input;\n}\n\n/**\n * If every letter in `input` has the same case (all lower or all upper),\n * capitalize each word and hyphenated sub-word. Otherwise keep original casing.\n */\nexport function normalizeCasing(input: string): string {\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return input;\n const culture = PrimitivesDefaults.culture;\n const allLower = letters.every((c) => c === c.toLocaleLowerCase(culture));\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(culture));\n return allLower || allUpper ? capitalizeEachWord(input) : input;\n}\n\nexport function validateNamePart(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(value)) return false;\n if (/[\\p{Cn}]/u.test(value)) return false;\n return SINGLE_PART_PATTERN.test(value);\n}\n\nexport function validateGivenNames(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n const parts = value.split(\" \").filter((p) => p !== \"\");\n return parts.length > 0 && parts.every(validateNamePart);\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input.split(\" \").filter(Boolean).map(capitalizeHyphenated).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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateGivenNames,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's given names (`förnamn`). */\nexport class PersonGivenName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Given Name\",\n localizedName: \"Förnamn\",\n emoji: \"\\u{270F}\\uFE0F\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n readonly names: readonly string[];\n readonly preferredName: string | null;\n\n private constructor(value: string, names: readonly string[], preferredName: string | null) {\n this.value = value;\n this.names = Object.freeze([...names]);\n this.preferredName = preferredName;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonGivenName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateGivenNames(normalized)) return null;\n const names = normalized.split(\" \").filter((p) => p !== \"\");\n let preferred: string | null = null;\n const preferredInput = options?.preferredName ?? null;\n if (preferredInput != null && preferredInput.trim() !== \"\") {\n const np = normalizeCasing(collapseWhitespace(preferredInput));\n const found = names.find((n) => n.toLowerCase() === np.toLowerCase()) ?? null;\n if (found === null) return null;\n preferred = found;\n }\n return new PersonGivenName(normalized, names, preferred);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonGivenName {\n const r = PersonGivenName.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid given name(s).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonGivenName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonGivenName.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 PersonGivenName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonGivenName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonGivenName {\n const found = this.names.find((n) => n.toLowerCase() === preferredName.toLowerCase()) ?? null;\n if (found === null) {\n throw new Error(\"Preferred name must be one of the given names.\");\n }\n return new PersonGivenName(this.value, this.names, found);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonGivenName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonGivenName | 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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateNamePart,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's family name (`efternamn`). */\nexport class PersonFamilyName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Family Name\",\n localizedName: \"Efternamn\",\n emoji: \"\\u{1F4DB}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\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): PersonFamilyName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateNamePart(normalized)) return null;\n return new PersonFamilyName(normalized);\n }\n\n static parse(input: string): PersonFamilyName {\n const r = PersonFamilyName.tryParse(input);\n if (r === null) throw new Error(\"Invalid family name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFamilyName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFamilyName.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 PersonFamilyName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFamilyName.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: PersonFamilyName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFamilyName | 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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"./person-name-normalization.js\";\nimport { PersonGivenName } from \"./person-given-name.js\";\nimport { PersonFamilyName } from \"./person-family-name.js\";\n\nconst MAX_INPUT_LENGTH = 500;\n\n/** A person's full name (`fullständigt namn`). */\nexport class PersonFullName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Full Name\",\n localizedName: \"Fullständigt namn\",\n emoji: \"\\u{1F4C7}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly givenName: PersonGivenName;\n readonly familyName: PersonFamilyName;\n readonly value: string;\n\n get preferredName(): string | null {\n return this.givenName.preferredName;\n }\n\n private constructor(given: PersonGivenName, family: PersonFamilyName, value: string) {\n this.givenName = given;\n this.familyName = family;\n this.value = value;\n }\n\n static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName {\n return new PersonFullName(givenName, familyName, `${givenName.value} ${familyName.value}`);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonFullName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const tokens = collapsed.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n const givenPart = tokens.slice(0, tokens.length - 1).join(\" \");\n const given = PersonGivenName.tryParse(givenPart, options);\n if (given === null) return null;\n const family = PersonFamilyName.tryParse(tokens[tokens.length - 1]!);\n if (family === null) return null;\n return new PersonFullName(given, family, `${given.value} ${family.value}`);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonFullName {\n const r = PersonFullName.tryParse(input, options);\n if (r === null) {\n throw new Error(\"Invalid full name. Must contain at least given name(s) and a family name.\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFullName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFullName.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 PersonFullName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFullName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonFullName {\n const given = this.givenName.withPreferredName(preferredName);\n return new PersonFullName(given, this.familyName, this.value);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFullName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFullName | 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 * 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","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 { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { PersonFullName } from \"../person/person-full-name.js\";\nimport { SwedishOrganizationName } from \"../organization/swedish-organization-name.js\";\n\n/** The type of bank account holder. */\nexport const BankAccountHolderType = {\n Unknown: \"Unknown\",\n Person: \"Person\",\n Organization: \"Organization\",\n} as const;\nexport type BankAccountHolderType =\n (typeof BankAccountHolderType)[keyof typeof BankAccountHolderType];\n\n/**\n * A Swedish bank account holder name (`kontoinnehavare`).\n * Detects whether the holder is a person or an organization based on\n * `SwedishOrganizationName.hasOrganizationIndicators`.\n */\nexport class SwedishBankAccountHolderName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Account Holder Name\",\n localizedName: \"Kontoinnehavare\",\n emoji: \"\\u{1F464}\",\n sources: Object.freeze([]),\n });\n\n readonly value: string;\n readonly holderType: BankAccountHolderType;\n readonly personName: PersonFullName | null;\n readonly organizationName: SwedishOrganizationName | null;\n\n private constructor(\n value: string,\n holderType: BankAccountHolderType,\n personName: PersonFullName | null,\n organizationName: SwedishOrganizationName | null,\n ) {\n this.value = value;\n this.holderType = holderType;\n this.personName = personName;\n this.organizationName = organizationName;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankAccountHolderName | null {\n if (input == null || input.trim() === \"\") return null;\n const collapsed = collapseWhitespace(input);\n if (collapsed.length < 2) return null;\n if (!/\\p{L}/u.test(collapsed)) return null;\n\n const orgName = SwedishOrganizationName.tryParse(collapsed);\n if (orgName !== null && orgName.hasOrganizationIndicators) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Organization,\n null,\n orgName,\n );\n }\n\n const personName = PersonFullName.tryParse(collapsed);\n if (personName !== null) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Person,\n personName,\n null,\n );\n }\n\n if (orgName !== null) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Organization,\n null,\n orgName,\n );\n }\n\n return null;\n }\n\n static parse(input: string): SwedishBankAccountHolderName {\n const r = SwedishBankAccountHolderName.tryParse(input);\n if (r === null) throw new Error(\"Invalid bank account holder name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankAccountHolderName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccountHolderName.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 SwedishBankAccountHolderName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankAccountHolderName.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: SwedishBankAccountHolderName | null | undefined): boolean {\n return other != null && this.value.toLowerCase() === other.value.toLowerCase();\n }\n compareTo(other: SwedishBankAccountHolderName | 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/**\n * Returns a masked account holder name where each word's first character is preserved\n * and the rest is masked, e.g. `Anna Andersson` → `A*** A********`.\n */\nexport function maskSwedishBankAccountHolderName(holder: SwedishBankAccountHolderName): string {\n const parts = holder.value.split(/\\s+/).filter((p) => p.length > 0);\n return parts.map((p) => (p.length <= 1 ? \"*\" : p[0] + \"*\".repeat(p.length - 1))).join(\" \");\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 { 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 { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Iban } from \"./iban.js\";\nimport { Bic } from \"./bic.js\";\nimport { SwedishBankgiroNumber } from \"./swedish-bankgiro-number.js\";\nimport { SwedishPostgiroNumber } from \"./swedish-postgiro-number.js\";\nimport { SwedishOcrReferenceNumber } from \"./swedish-ocr-reference-number.js\";\nimport { SwedishBankAccount } from \"./swedish-bank-account.js\";\n\nexport const SwedishBankingNumberType = {\n Unknown: \"Unknown\",\n SwedishBankgiroNumber: \"SwedishBankgiroNumber\",\n SwedishPostgiroNumber: \"SwedishPostgiroNumber\",\n SwedishOcrReferenceNumber: \"SwedishOcrReferenceNumber\",\n Iban: \"Iban\",\n SwedishBankAccount: \"SwedishBankAccount\",\n Bic: \"Bic\",\n} as const;\nexport type SwedishBankingNumberType =\n (typeof SwedishBankingNumberType)[keyof typeof SwedishBankingNumberType];\n\n/**\n * Parsed banking identifier result from the unified banking parser.\n * The type field indicates which typed value (if any) was successfully parsed.\n */\nexport class SwedishBankingNumber {\n readonly type: SwedishBankingNumberType;\n readonly normalizedValue: string;\n\n readonly swedishBankgiroNumber: SwedishBankgiroNumber | null;\n readonly swedishPostgiroNumber: SwedishPostgiroNumber | null;\n readonly swedishOcrReferenceNumber: SwedishOcrReferenceNumber | null;\n readonly iban: Iban | null;\n readonly swedishBankAccount: SwedishBankAccount | null;\n readonly bic: Bic | null;\n\n /** @internal */\n constructor(init: {\n type: SwedishBankingNumberType;\n normalizedValue: string;\n swedishBankgiroNumber?: SwedishBankgiroNumber | null;\n swedishPostgiroNumber?: SwedishPostgiroNumber | null;\n swedishOcrReferenceNumber?: SwedishOcrReferenceNumber | null;\n iban?: Iban | null;\n swedishBankAccount?: SwedishBankAccount | null;\n bic?: Bic | null;\n }) {\n this.type = init.type;\n this.normalizedValue = init.normalizedValue;\n this.swedishBankgiroNumber = init.swedishBankgiroNumber ?? null;\n this.swedishPostgiroNumber = init.swedishPostgiroNumber ?? null;\n this.swedishOcrReferenceNumber = init.swedishOcrReferenceNumber ?? null;\n this.iban = init.iban ?? null;\n this.swedishBankAccount = init.swedishBankAccount ?? null;\n this.bic = init.bic ?? null;\n }\n\n static unknown(): SwedishBankingNumber {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Unknown,\n normalizedValue: \"\",\n });\n }\n}\n\nconst MAX_INPUT_LENGTH = 50;\nconst BANKGIRO_PATTERN = /^\\s*\\d{3,4}\\s*-\\s*\\d{4}\\s*$/;\nconst PLUSGIRO_PATTERN = /^\\s*\\d{1,7}\\s*-\\s*\\d\\s*$/;\n\nconst TYPE_PREFIXES: readonly [string, SwedishBankingNumberType][] = [\n [\"Bankgiro \", SwedishBankingNumberType.SwedishBankgiroNumber],\n [\"Plusgiro \", SwedishBankingNumberType.SwedishPostgiroNumber],\n [\"Postgiro \", SwedishBankingNumberType.SwedishPostgiroNumber],\n [\"BG \", SwedishBankingNumberType.SwedishBankgiroNumber],\n [\"PG \", SwedishBankingNumberType.SwedishPostgiroNumber],\n];\n\n/**\n * A unified parser for common banking identifiers used in Swedish payment flows.\n * Attempts to classify input as Bankgiro, Plusgiro, OCR reference, BIC, IBAN,\n * or Swedish bank account.\n */\nexport class SwedishBankingNumberParser {\n static tryParse(input: string | null | undefined): SwedishBankingNumber | null {\n if (input == null || input.trim() === \"\") return null;\n\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n // 0. Explicit type prefix\n const { hintedType, payload } = detectTypePrefix(trimmed);\n if (hintedType === SwedishBankingNumberType.SwedishBankgiroNumber) {\n const bg = SwedishBankgiroNumber.tryParse(payload);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n return null;\n }\n if (hintedType === SwedishBankingNumberType.SwedishPostgiroNumber) {\n const pg = SwedishPostgiroNumber.tryParse(payload);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n return null;\n }\n\n // 1. IBAN — distinctive country letters + check digits\n if (containsLetters(trimmed)) {\n const iban = Iban.tryParse(trimmed);\n if (iban !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Iban,\n normalizedValue: iban.value,\n iban,\n });\n }\n }\n\n // 2. BIC/SWIFT — letter heavy\n if (containsLetters(trimmed)) {\n const bic = Bic.tryParse(trimmed);\n if (bic !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Bic,\n normalizedValue: bic.code,\n bic,\n });\n }\n }\n\n // 3. Explicit hyphenated formats\n if (BANKGIRO_PATTERN.test(trimmed)) {\n const bg = SwedishBankgiroNumber.tryParse(trimmed);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n }\n if (PLUSGIRO_PATTERN.test(trimmed)) {\n const pg = SwedishPostgiroNumber.tryParse(trimmed);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n }\n\n // 4. Longer Swedish bank account numbers (more specific than OCR)\n const account = SwedishBankAccount.tryParse(trimmed);\n if (account !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankAccount,\n normalizedValue: account.toNormalizedString(),\n swedishBankAccount: account,\n });\n }\n\n // 5. Bankgiro before Plusgiro\n const bg = SwedishBankgiroNumber.tryParse(trimmed);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n const pg = SwedishPostgiroNumber.tryParse(trimmed);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n\n // 6. OCR last (high false-positive rate)\n const ocr = SwedishOcrReferenceNumber.tryParse(trimmed);\n if (ocr !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishOcrReferenceNumber,\n normalizedValue: ocr.value,\n swedishOcrReferenceNumber: ocr,\n });\n }\n\n return null;\n }\n\n static parse(input: string): SwedishBankingNumber {\n const r = SwedishBankingNumberParser.tryParse(input);\n if (r === null) throw new Error(\"Could not parse input as a known banking number.\");\n return r;\n }\n}\n\nfunction detectTypePrefix(input: string): {\n hintedType: SwedishBankingNumberType;\n payload: string;\n} {\n const lower = input.toLowerCase();\n for (const [prefix, type] of TYPE_PREFIXES) {\n const lp = prefix.toLowerCase();\n if (lower.startsWith(lp)) {\n const payload = input.slice(prefix.length).trim();\n if (payload.length > 0) return { hintedType: type, payload };\n }\n }\n return { hintedType: SwedishBankingNumberType.Unknown, payload: input };\n}\n\nfunction containsLetters(input: string): boolean {\n return /\\p{L}/u.test(input);\n}\n"]}
|