@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/primitives-defaults.ts","../../src/geography/continent.ts","../../src/geography/country-capital.ts","../../src/internal/input-sanitization.ts","../../src/geography/geo-coordinate.ts","../../src/geography/language.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/finance/currency.ts","../../src/geography/country-data.ts","../../src/geography/country-coordinates.ts","../../src/geography/country-capitals.ts","../../src/geography/country-metadata.ts","../../src/geography/country.ts","../../src/geography/swedish-county.ts","../../src/geography/swedish-municipality-data.ts","../../src/geography/swedish-municipality.ts","../../src/contact/address-city.ts","../../src/contact/address-street.ts","../../src/contact/address-zip-code.ts","../../src/contact/country-address-registry.ts","../../src/contact/address.ts","../../src/contact/country-address.ts","../../src/contact/country-address-factory.ts","../../src/contact/country-zip-code-factory.ts","../../src/contact/country-zip-codes.ts","../../src/contact/country-addresses.ts","../../src/contact/swedish-address-zip-code.ts","../../src/contact/swedish-address.ts","../../src/contact/register-default-country-addresses.ts","../../src/organization/organization-validation-utils.ts","../../src/organization/swedish-organization-name.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/contact/phone-calling-code.ts","../../src/contact/phone-number.ts","../../src/contact/index.ts","../../src/internal/clock.ts","../../src/validation/validation-error-reason.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/internal/luhn.ts","../../src/person/personnummer-parser.ts","../../src/person/swedish-personal-identity-number.ts","../../src/person/swedish-coordination-number.ts","../../src/organization/duns-number.ts","../../src/organization/swedish-organization-number.ts","../../src/organization/eu-vat-number.ts","../../src/organization/lei-code.ts","../../src/organization/elf-code.ts","../../src/organization/swedish-sni-code.ts","../../src/web/email-address.ts","../../src/web/url.ts","../../src/finance/isin.ts","../../src/finance/money-amount.ts","../../src/property/swedish-property-designation.ts","../../src/property/swedish-property-taxation-code.ts","../../src/banking/iban.ts","../../src/banking/bic.ts","../../src/banking/swedish-bankgiro-number.ts","../../src/banking/swedish-postgiro-number.ts","../../src/banking/swedish-ocr-reference-number.ts","../../src/banking/swedish-bank.ts","../../src/banking/bank-resolver.ts","../../src/banking/swedish-bank-clearing-number.ts","../../src/banking/swedish-bank-account.ts","../../src/banking/swedish-bank-account-holder-name.ts","../../src/banking/swedish-swish-number.ts","../../src/sample-data/index.ts"],"names":["MAX_INPUT_LENGTH","BY_KEY","BY_NAME","BY_CODE","SCAN_PATTERN","addGenitive","capitalizeWord","collapseWhitespace","capitalizeEachWord","capitalizeHyphenated","ALL","SCAN","nameType","tldCountryMapCache","getTldCountryMap","KNOWN_CODES","prefix","parseInt4"],"mappings":"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AC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EA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AA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,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,IA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EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,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","file":"index.js","sourcesContent":["/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nexport interface ContinentFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A continent (`kontinent`) identified by its two-letter code, English name,\n * or Swedish name. Seven continents are recognized: Africa, Antarctica, Asia,\n * Europe, North America, Oceania, and South America.\n *\n * Sources:\n * - UN M49 Standard\n * - Datahub continent codes\n */\nexport class Continent {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Continent\",\n localizedName: \"Kontinent\",\n emoji: \"\\u{1F5FA}\\uFE0F\",\n sources: Object.freeze([\n \"https://unstats.un.org/unsd/methodology/m49/\",\n \"https://datahub.io/core/continent-codes\",\n ]),\n });\n\n static readonly Africa: Continent = new Continent(\"AF\", \"Africa\", \"Afrika\");\n static readonly Antarctica: Continent = new Continent(\"AN\", \"Antarctica\", \"Antarktis\");\n static readonly Asia: Continent = new Continent(\"AS\", \"Asia\", \"Asien\");\n static readonly Europe: Continent = new Continent(\"EU\", \"Europe\", \"Europa\");\n static readonly NorthAmerica: Continent = new Continent(\"NA\", \"North America\", \"Nordamerika\");\n static readonly Oceania: Continent = new Continent(\"OC\", \"Oceania\", \"Oceanien\");\n static readonly SouthAmerica: Continent = new Continent(\"SA\", \"South America\", \"Sydamerika\");\n\n /** All seven continents. */\n static readonly all: readonly Continent[] = Object.freeze([\n Continent.Africa,\n Continent.Antarctica,\n Continent.Asia,\n Continent.Europe,\n Continent.NorthAmerica,\n Continent.Oceania,\n Continent.SouthAmerica,\n ]);\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n\n private constructor(code: string, englishName: string, localizedName: string) {\n this.code = code;\n this.englishName = englishName;\n this.localizedName = localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.code;\n }\n\n static tryParse(input: string | null | undefined): Continent | null {\n if (input == null) return null;\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Continent {\n const r = Continent.tryParse(input);\n if (r === null) throw new Error(\"Unknown continent.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Continent.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: ContinentFormatOptions): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: ContinentFormatOptions,\n ): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Continent.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Continent | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Continent | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nconst BY_KEY = (() => {\n const m = new Map<string, Continent>();\n for (const c of Continent.all) {\n m.set(c.code.toLowerCase(), c);\n m.set(c.englishName.toLowerCase(), c);\n m.set(c.localizedName.toLowerCase(), c);\n }\n return m;\n})();\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\n/**\n * The capital city of a country (`huvudstad`), with names in English, Swedish,\n * and the country's native language, plus its geographic coordinates.\n */\nexport class CountryCapital {\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly coordinate: GeoCoordinate;\n\n /** @internal */\n constructor(\n englishName: string,\n localizedName: string,\n nativeName: string,\n coordinate: GeoCoordinate,\n ) {\n this.englishName = englishName;\n this.localizedName = localizedName;\n this.nativeName = nativeName;\n this.coordinate = coordinate;\n }\n\n /** Capital city name in the current display language. */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n toString(): string {\n return this.displayName;\n }\n}\n","/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\nexport interface GeoCoordinateFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A geographic coordinate pair (latitude, longitude) in the WGS 84 reference\n * system (`geografisk koordinat`). Parsing accepts decimal degrees, degrees\n * with cardinal directions, DMS, and DDM formats. Swedish cardinal letters Ö\n * (east) and V (west) are accepted alongside E and W.\n */\nexport class GeoCoordinate {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Geographic Coordinate\",\n localizedName: \"Geografisk koordinat\",\n emoji: \"\\u{1F4CD}\",\n sources: Object.freeze([\n \"https://en.wikipedia.org/wiki/Geographic_coordinate_system\",\n \"https://epsg.io/4326\",\n ]),\n });\n\n readonly latitude: number;\n readonly longitude: number;\n\n private constructor(latitude: number, longitude: number) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n\n /** @internal */\n static _unsafe(latitude: number, longitude: number): GeoCoordinate {\n return new GeoCoordinate(latitude, longitude);\n }\n\n get latitudeDirection(): \"N\" | \"S\" {\n return this.latitude >= 0 ? \"N\" : \"S\";\n }\n\n get longitudeDirection(): \"E\" | \"W\" {\n return this.longitude >= 0 ? \"E\" : \"W\";\n }\n\n /** Creates a coordinate from explicit latitude and longitude values. */\n static create(latitude: number, longitude: number): GeoCoordinate {\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new RangeError(\"Latitude must be between -90 and 90.\");\n }\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new RangeError(\"Longitude must be between -180 and 180.\");\n }\n return GeoCoordinate._unsafe(latitude, longitude);\n }\n\n static tryParse(input: string | null | undefined): GeoCoordinate | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > 200) return null;\n\n let m: RegExpMatchArray | null;\n\n m = sanitized.match(DECIMAL_DEGREES);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(SPACE_SEPARATED);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(DECIMAL_CARDINAL_SUFFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(CARDINAL_PREFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(DMS);\n if (m) return tryDms(m.groups!);\n\n m = sanitized.match(DDM);\n if (m) return tryDdm(m.groups!);\n\n return null;\n }\n\n static parse(input: string): GeoCoordinate {\n const r = GeoCoordinate.tryParse(input);\n if (r === null) throw new Error(\"Invalid geographic coordinate.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return GeoCoordinate.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && GeoCoordinate.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return `${formatNumber(this.latitude)}, ${formatNumber(this.longitude)}`;\n }\n\n toString(): string {\n return `${formatNumber(Math.abs(this.latitude))}°${this.latitudeDirection}, ${formatNumber(Math.abs(this.longitude))}°${this.longitudeDirection}`;\n }\n\n /** Returns the coordinate in degrees, minutes, and seconds, e.g. `59°19'45.5\"N, 18°4'7\"E`. */\n toDmsString(): string {\n const [latDeg, latMin, latSec] = toDmsParts(Math.abs(this.latitude));\n const [lonDeg, lonMin, lonSec] = toDmsParts(Math.abs(this.longitude));\n return `${latDeg}°${latMin}'${formatSeconds(latSec)}\"${this.latitudeDirection}, ${lonDeg}°${lonMin}'${formatSeconds(lonSec)}\"${this.longitudeDirection}`;\n }\n\n /** Distance in kilometers (Haversine) between two coordinates. */\n static distanceKilometers(a: GeoCoordinate, b: GeoCoordinate): number {\n return haversineKm(a, b);\n }\n\n /** Returns true if coordinates `a` and `b` are within `radiusKm` kilometers of each other. */\n static isWithinKilometers(a: GeoCoordinate, b: GeoCoordinate, radiusKm: number): boolean {\n return GeoCoordinate.distanceKilometers(a, b) <= radiusKm;\n }\n\n /** Distance in kilometers from this coordinate to `other`. */\n distanceKilometersTo(other: GeoCoordinate): number {\n return haversineKm(this, other);\n }\n\n /**\n * Returns true if `other` is within `radiusKm` kilometers of this\n * coordinate (inclusive).\n */\n isWithinKilometers(other: GeoCoordinate, radiusKm: number): boolean {\n return this.distanceKilometersTo(other) <= radiusKm;\n }\n\n equals(other: GeoCoordinate | null | undefined): boolean {\n return other != null && this.latitude === other.latitude && this.longitude === other.longitude;\n }\n}\n\n// --- Regexes ---\n\nconst DECIMAL_DEGREES =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s*[,;]\\s*(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst SPACE_SEPARATED =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s+(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst DECIMAL_CARDINAL_SUFFIX =\n /^\\s*\\(?\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst CARDINAL_PREFIX =\n /^\\s*\\(?\\s*(?<latDir>[NSns])\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*[,;\\s]\\s*(?<lonDir>[EWewÖöVv])\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*\\)?\\s*$/u;\n\nconst DMS =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latMin>\\d+)\\s*[′']\\s*(?<latSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonMin>\\d+)\\s*[′']\\s*(?<lonSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst DDM =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\n// --- Helpers ---\n\nfunction tryDecimal(latStr: string, lonStr: string): GeoCoordinate | null {\n const lat = parseFloat(latStr);\n const lon = parseFloat(lonStr);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDecimalCardinal(\n latStr: string,\n latDir: string,\n lonStr: string,\n lonDir: string,\n): GeoCoordinate | null {\n const lat = applyLatDirection(parseFloat(latStr), latDir);\n const lon = applyLonDirection(parseFloat(lonStr), lonDir);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDms(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latMin = parseFloat(g.latMin!);\n const latSec = parseFloat(g.latSec!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonMin = parseFloat(g.lonMin!);\n const lonSec = parseFloat(g.lonSec!);\n if (latMin >= 60 || latSec >= 60 || lonMin >= 60 || lonSec >= 60) return null;\n let lat = round8(latDeg + latMin / 60 + latSec / 3600);\n let lon = round8(lonDeg + lonMin / 60 + lonSec / 3600);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDdm(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latDecMin = parseFloat(g.latDecMin!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonDecMin = parseFloat(g.lonDecMin!);\n if (latDecMin >= 60 || lonDecMin >= 60) return null;\n let lat = round8(latDeg + latDecMin / 60);\n let lon = round8(lonDeg + lonDecMin / 60);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction applyLatDirection(lat: number, dir: string): number {\n return dir.toUpperCase() === \"S\" ? -lat : lat;\n}\n\nfunction applyLonDirection(lon: number, dir: string): number {\n const u = dir.toUpperCase();\n return u === \"W\" || u === \"V\" ? -lon : lon;\n}\n\nfunction isInRange(lat: number, lon: number): boolean {\n return lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180;\n}\n\nfunction round8(v: number): number {\n return Math.round(v * 1e8) / 1e8;\n}\n\nfunction toDmsParts(dd: number): [number, number, number] {\n const degrees = Math.trunc(dd);\n const fracMinutes = (dd - degrees) * 60;\n const minutes = Math.trunc(fracMinutes);\n const seconds = Math.round((fracMinutes - minutes) * 600) / 10;\n return [degrees, minutes, seconds];\n}\n\nfunction formatNumber(value: number): string {\n // Match C# \"G\" format on a double: minimal representation, no trailing zeros.\n // For our use cases this matches `value.toString()` in JS.\n return value.toString();\n}\n\nfunction formatSeconds(seconds: number): string {\n // Match C# \"0.#\" format: drop trailing zero after the decimal point.\n if (Number.isInteger(seconds)) return seconds.toString();\n return seconds.toString().replace(/(\\.\\d*?)0+$/, \"$1\");\n}\n\nfunction haversineKm(a: GeoCoordinate, b: GeoCoordinate): number {\n const R = 6371;\n const dLat = toRadians(b.latitude - a.latitude);\n const dLon = toRadians(b.longitude - a.longitude);\n const lat1 = toRadians(a.latitude);\n const lat2 = toRadians(b.latitude);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));\n}\n\nfunction toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\n/** Text direction for a writing system. */\nexport const TextDirection = {\n LeftToRight: \"LeftToRight\",\n RightToLeft: \"RightToLeft\",\n} as const;\nexport type TextDirection = (typeof TextDirection)[keyof typeof TextDirection];\n\n/** Primary writing script / writing system used by a language. */\nexport const WritingScript = {\n Unknown: \"Unknown\",\n Latin: \"Latin\",\n Cyrillic: \"Cyrillic\",\n Arabic: \"Arabic\",\n Greek: \"Greek\",\n Hebrew: \"Hebrew\",\n Devanagari: \"Devanagari\",\n Bengali: \"Bengali\",\n Gurmukhi: \"Gurmukhi\",\n Gujarati: \"Gujarati\",\n Oriya: \"Oriya\",\n Tamil: \"Tamil\",\n Telugu: \"Telugu\",\n Kannada: \"Kannada\",\n Malayalam: \"Malayalam\",\n Sinhala: \"Sinhala\",\n Thai: \"Thai\",\n Lao: \"Lao\",\n Tibetan: \"Tibetan\",\n Myanmar: \"Myanmar\",\n Georgian: \"Georgian\",\n Hangul: \"Hangul\",\n Ethiopic: \"Ethiopic\",\n Cherokee: \"Cherokee\",\n Canadian: \"Canadian\",\n Khmer: \"Khmer\",\n Mongolian: \"Mongolian\",\n Han: \"Han\",\n Armenian: \"Armenian\",\n Thaana: \"Thaana\",\n} as const;\nexport type WritingScript = (typeof WritingScript)[keyof typeof WritingScript];\n\nconst MAX_INPUT_LENGTH = 100;\n\nexport interface LanguageFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A language (`språk`) identified by its ISO 639-1 two-letter code, ISO 639-2/T\n * three-letter code, English name, Swedish name, or native name (endonym).\n */\nexport class Language {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Language\",\n localizedName: \"Språk\",\n emoji: \"\\u{1F5E3}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.loc.gov/standards/iso639-2/php/code_list.php\",\n \"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\",\n \"https://iso639-3.sil.org/\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly script: WritingScript;\n readonly direction: TextDirection;\n\n private constructor(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection,\n ) {\n this.alpha2Code = alpha2;\n this.alpha3Code = alpha3;\n this.englishName = en;\n this.localizedName = sv;\n this.nativeName = native;\n this.script = script;\n this.direction = direction;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.alpha2Code;\n }\n\n /** @internal Used by Country and other types. */\n static _create(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection = TextDirection.LeftToRight,\n ): Language {\n return new Language(alpha2, alpha3, en, sv, native, script, direction);\n }\n\n static tryParse(input: string | null | undefined): Language | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Language {\n const r = Language.tryParse(input);\n if (r === null) throw new Error(\"Unknown language.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Language.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: LanguageFormatOptions): string | null {\n const r = Language.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: LanguageFormatOptions,\n ): string | null {\n const r = Language.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Language.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Language | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n\n compareTo(other: Language | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n /** All recognized ISO 639-1 languages. */\n static get all(): readonly Language[] {\n return ALL;\n }\n\n // Frequently used language constants — populated below ALL.\n static readonly Afrikaans: Language;\n static readonly Albanian: Language;\n static readonly Arabic: Language;\n static readonly Bulgarian: Language;\n static readonly Catalan: Language;\n static readonly Chinese: Language;\n static readonly Croatian: Language;\n static readonly Czech: Language;\n static readonly Danish: Language;\n static readonly Dutch: Language;\n static readonly English: Language;\n static readonly Estonian: Language;\n static readonly Faroese: Language;\n static readonly Finnish: Language;\n static readonly French: Language;\n static readonly German: Language;\n static readonly Greek: Language;\n static readonly Hindi: Language;\n static readonly Hungarian: Language;\n static readonly Icelandic: Language;\n static readonly Italian: Language;\n static readonly Japanese: Language;\n static readonly Korean: Language;\n static readonly Latvian: Language;\n static readonly Lithuanian: Language;\n static readonly NorthernSami: Language;\n static readonly Norwegian: Language;\n static readonly NorwegianBokmal: Language;\n static readonly NorwegianNynorsk: Language;\n static readonly Polish: Language;\n static readonly Portuguese: Language;\n static readonly Romanian: Language;\n static readonly Russian: Language;\n static readonly Slovak: Language;\n static readonly Slovenian: Language;\n static readonly Spanish: Language;\n static readonly Swahili: Language;\n static readonly Swedish: Language;\n static readonly Turkish: Language;\n static readonly Ukrainian: Language;\n}\n\nconst L = Language._create;\n\nconst ALL: readonly Language[] = Object.freeze([\n L(\"aa\", \"aar\", \"Afar\", \"Afar\", \"Afaraf\", WritingScript.Latin),\n L(\"ab\", \"abk\", \"Abkhazian\", \"Abchaziska\", \"Аҧсуа\", WritingScript.Cyrillic),\n L(\"af\", \"afr\", \"Afrikaans\", \"Afrikaans\", \"Afrikaans\", WritingScript.Latin),\n L(\"ak\", \"aka\", \"Akan\", \"Akan\", \"Akan\", WritingScript.Latin),\n L(\"am\", \"amh\", \"Amharic\", \"Amhariska\", \"አማርኛ\", WritingScript.Ethiopic),\n L(\"an\", \"arg\", \"Aragonese\", \"Aragonesiska\", \"Aragonés\", WritingScript.Latin),\n L(\"ar\", \"ara\", \"Arabic\", \"Arabiska\", \"العربية\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"as\", \"asm\", \"Assamese\", \"Assamesiska\", \"অসমীয়া\", WritingScript.Bengali),\n L(\"av\", \"ava\", \"Avaric\", \"Avariska\", \"Авар\", WritingScript.Cyrillic),\n L(\"ay\", \"aym\", \"Aymara\", \"Aymara\", \"Aymar\", WritingScript.Latin),\n L(\"az\", \"aze\", \"Azerbaijani\", \"Azerbajdzjanska\", \"Azərbaycan\", WritingScript.Latin),\n L(\"ba\", \"bak\", \"Bashkir\", \"Basjkiriska\", \"Башҡорт\", WritingScript.Cyrillic),\n L(\"be\", \"bel\", \"Belarusian\", \"Vitryska\", \"Беларуская\", WritingScript.Cyrillic),\n L(\"bg\", \"bul\", \"Bulgarian\", \"Bulgariska\", \"Български\", WritingScript.Cyrillic),\n L(\"bh\", \"bih\", \"Bihari\", \"Bihari\", \"भोजपुरी\", WritingScript.Devanagari),\n L(\"bi\", \"bis\", \"Bislama\", \"Bislama\", \"Bislama\", WritingScript.Latin),\n L(\"bm\", \"bam\", \"Bambara\", \"Bambara\", \"Bamanankan\", WritingScript.Latin),\n L(\"bn\", \"ben\", \"Bengali\", \"Bengali\", \"বাংলা\", WritingScript.Bengali),\n L(\"bo\", \"bod\", \"Tibetan\", \"Tibetanska\", \"བོད་ཡིག\", WritingScript.Tibetan),\n L(\"br\", \"bre\", \"Breton\", \"Bretonska\", \"Brezhoneg\", WritingScript.Latin),\n L(\"bs\", \"bos\", \"Bosnian\", \"Bosniska\", \"Bosanski\", WritingScript.Latin),\n L(\"ca\", \"cat\", \"Catalan\", \"Katalanska\", \"Català\", WritingScript.Latin),\n L(\"ce\", \"che\", \"Chechen\", \"Tjetjenska\", \"Нохчийн\", WritingScript.Cyrillic),\n L(\"ch\", \"cha\", \"Chamorro\", \"Chamorro\", \"Chamoru\", WritingScript.Latin),\n L(\"co\", \"cos\", \"Corsican\", \"Korsikanska\", \"Corsu\", WritingScript.Latin),\n L(\"cr\", \"cre\", \"Cree\", \"Cree\", \"ᓀᐦᐃᔭᐍᐏᐣ\", WritingScript.Canadian),\n L(\"cs\", \"ces\", \"Czech\", \"Tjeckiska\", \"Čeština\", WritingScript.Latin),\n L(\"cu\", \"chu\", \"Church Slavonic\", \"Kyrkoslaviska\", \"Словѣньскъ\", WritingScript.Cyrillic),\n L(\"cv\", \"chv\", \"Chuvash\", \"Tjuvasjiska\", \"Чӑваш\", WritingScript.Cyrillic),\n L(\"cy\", \"cym\", \"Welsh\", \"Walesiska\", \"Cymraeg\", WritingScript.Latin),\n L(\"da\", \"dan\", \"Danish\", \"Danska\", \"Dansk\", WritingScript.Latin),\n L(\"de\", \"deu\", \"German\", \"Tyska\", \"Deutsch\", WritingScript.Latin),\n L(\"dv\", \"div\", \"Divehi\", \"Divehi\", \"ދިވެހި\", WritingScript.Thaana, TextDirection.RightToLeft),\n L(\"dz\", \"dzo\", \"Dzongkha\", \"Dzongkha\", \"རྫོང་ཁ\", WritingScript.Tibetan),\n L(\"ee\", \"ewe\", \"Ewe\", \"Ewe\", \"Eʋegbe\", WritingScript.Latin),\n L(\"el\", \"ell\", \"Greek\", \"Grekiska\", \"Ελληνικά\", WritingScript.Greek),\n L(\"en\", \"eng\", \"English\", \"Engelska\", \"English\", WritingScript.Latin),\n L(\"eo\", \"epo\", \"Esperanto\", \"Esperanto\", \"Esperanto\", WritingScript.Latin),\n L(\"es\", \"spa\", \"Spanish\", \"Spanska\", \"Español\", WritingScript.Latin),\n L(\"et\", \"est\", \"Estonian\", \"Estniska\", \"Eesti\", WritingScript.Latin),\n L(\"eu\", \"eus\", \"Basque\", \"Baskiska\", \"Euskara\", WritingScript.Latin),\n L(\"fa\", \"fas\", \"Persian\", \"Persiska\", \"فارسی\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"ff\", \"ful\", \"Fulah\", \"Fulani\", \"Fulfulde\", WritingScript.Latin),\n L(\"fi\", \"fin\", \"Finnish\", \"Finska\", \"Suomi\", WritingScript.Latin),\n L(\"fj\", \"fij\", \"Fijian\", \"Fijianska\", \"Vosa Vakaviti\", WritingScript.Latin),\n L(\"fo\", \"fao\", \"Faroese\", \"Färöiska\", \"Føroyskt\", WritingScript.Latin),\n L(\"fr\", \"fra\", \"French\", \"Franska\", \"Français\", WritingScript.Latin),\n L(\"fy\", \"fry\", \"Western Frisian\", \"Frisiska\", \"Frysk\", WritingScript.Latin),\n L(\"ga\", \"gle\", \"Irish\", \"Iriska\", \"Gaeilge\", WritingScript.Latin),\n L(\"gd\", \"gla\", \"Scottish Gaelic\", \"Skotsk gaeliska\", \"Gàidhlig\", WritingScript.Latin),\n L(\"gl\", \"glg\", \"Galician\", \"Galiciska\", \"Galego\", WritingScript.Latin),\n L(\"gn\", \"grn\", \"Guarani\", \"Guaraní\", \"Avañe'ẽ\", WritingScript.Latin),\n L(\"gu\", \"guj\", \"Gujarati\", \"Gujarati\", \"ગુજરાતી\", WritingScript.Gujarati),\n L(\"gv\", \"glv\", \"Manx\", \"Manx\", \"Gaelg\", WritingScript.Latin),\n L(\"ha\", \"hau\", \"Hausa\", \"Hausa\", \"Hausa\", WritingScript.Latin),\n L(\"he\", \"heb\", \"Hebrew\", \"Hebreiska\", \"עברית\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"hi\", \"hin\", \"Hindi\", \"Hindi\", \"हिन्दी\", WritingScript.Devanagari),\n L(\"ho\", \"hmo\", \"Hiri Motu\", \"Hiri Motu\", \"Hiri Motu\", WritingScript.Latin),\n L(\"hr\", \"hrv\", \"Croatian\", \"Kroatiska\", \"Hrvatski\", WritingScript.Latin),\n L(\"ht\", \"hat\", \"Haitian Creole\", \"Haitisk kreol\", \"Kreyòl Ayisyen\", WritingScript.Latin),\n L(\"hu\", \"hun\", \"Hungarian\", \"Ungerska\", \"Magyar\", WritingScript.Latin),\n L(\"hy\", \"hye\", \"Armenian\", \"Armeniska\", \"Հայերեն\", WritingScript.Armenian),\n L(\"ia\", \"ina\", \"Interlingua\", \"Interlingua\", \"Interlingua\", WritingScript.Latin),\n L(\"id\", \"ind\", \"Indonesian\", \"Indonesiska\", \"Bahasa Indonesia\", WritingScript.Latin),\n L(\"ie\", \"ile\", \"Interlingue\", \"Interlingue\", \"Interlingue\", WritingScript.Latin),\n L(\"ig\", \"ibo\", \"Igbo\", \"Igbo\", \"Igbo\", WritingScript.Latin),\n L(\"ii\", \"iii\", \"Sichuan Yi\", \"Yi\", \"ꆈꌠ꒡\", WritingScript.Unknown),\n L(\"ik\", \"ipk\", \"Inupiaq\", \"Inupiaq\", \"Iñupiaq\", WritingScript.Latin),\n L(\"io\", \"ido\", \"Ido\", \"Ido\", \"Ido\", WritingScript.Latin),\n L(\"is\", \"isl\", \"Icelandic\", \"Isländska\", \"Íslenska\", WritingScript.Latin),\n L(\"it\", \"ita\", \"Italian\", \"Italienska\", \"Italiano\", WritingScript.Latin),\n L(\"iu\", \"iku\", \"Inuktitut\", \"Inuktitut\", \"ᐃᓄᒃᑎᑐᑦ\", WritingScript.Canadian),\n L(\"ja\", \"jpn\", \"Japanese\", \"Japanska\", \"日本語\", WritingScript.Han),\n L(\"jv\", \"jav\", \"Javanese\", \"Javanesiska\", \"Basa Jawa\", WritingScript.Latin),\n L(\"ka\", \"kat\", \"Georgian\", \"Georgiska\", \"ქართული\", WritingScript.Georgian),\n L(\"kg\", \"kon\", \"Kongo\", \"Kikongo\", \"KiKongo\", WritingScript.Latin),\n L(\"ki\", \"kik\", \"Kikuyu\", \"Kikuyu\", \"Gĩkũyũ\", WritingScript.Latin),\n L(\"kj\", \"kua\", \"Kuanyama\", \"Kuanyama\", \"Kuanyama\", WritingScript.Latin),\n L(\"kk\", \"kaz\", \"Kazakh\", \"Kazakiska\", \"Қазақша\", WritingScript.Cyrillic),\n L(\"kl\", \"kal\", \"Kalaallisut\", \"Grönländska\", \"Kalaallisut\", WritingScript.Latin),\n L(\"km\", \"khm\", \"Khmer\", \"Khmer\", \"ភាសាខ្មែរ\", WritingScript.Khmer),\n L(\"kn\", \"kan\", \"Kannada\", \"Kannada\", \"ಕನ್ನಡ\", WritingScript.Kannada),\n L(\"ko\", \"kor\", \"Korean\", \"Koreanska\", \"한국어\", WritingScript.Hangul),\n L(\"kr\", \"kau\", \"Kanuri\", \"Kanuri\", \"Kanuri\", WritingScript.Latin),\n L(\n \"ks\",\n \"kas\",\n \"Kashmiri\",\n \"Kashmiri\",\n \"कश्मीरी\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"ku\", \"kur\", \"Kurdish\", \"Kurdiska\", \"Kurdî\", WritingScript.Latin),\n L(\"kv\", \"kom\", \"Komi\", \"Komi\", \"Коми\", WritingScript.Cyrillic),\n L(\"kw\", \"cor\", \"Cornish\", \"Korniska\", \"Kernewek\", WritingScript.Latin),\n L(\"ky\", \"kir\", \"Kyrgyz\", \"Kirgiziska\", \"Кыргызча\", WritingScript.Cyrillic),\n L(\"la\", \"lat\", \"Latin\", \"Latin\", \"Latina\", WritingScript.Latin),\n L(\"lb\", \"ltz\", \"Luxembourgish\", \"Luxemburgiska\", \"Lëtzebuergesch\", WritingScript.Latin),\n L(\"lg\", \"lug\", \"Ganda\", \"Luganda\", \"Luganda\", WritingScript.Latin),\n L(\"li\", \"lim\", \"Limburgish\", \"Limburgiska\", \"Limburgs\", WritingScript.Latin),\n L(\"ln\", \"lin\", \"Lingala\", \"Lingala\", \"Lingála\", WritingScript.Latin),\n L(\"lo\", \"lao\", \"Lao\", \"Laotiska\", \"ພາສາລາວ\", WritingScript.Lao),\n L(\"lt\", \"lit\", \"Lithuanian\", \"Litauiska\", \"Lietuvių\", WritingScript.Latin),\n L(\"lu\", \"lub\", \"Luba-Katanga\", \"Luba-Katanga\", \"Kiluba\", WritingScript.Latin),\n L(\"lv\", \"lav\", \"Latvian\", \"Lettiska\", \"Latviešu\", WritingScript.Latin),\n L(\"mg\", \"mlg\", \"Malagasy\", \"Malagassiska\", \"Malagasy\", WritingScript.Latin),\n L(\"mh\", \"mah\", \"Marshallese\", \"Marshallesiska\", \"Kajin M̧ajeļ\", WritingScript.Latin),\n L(\"mi\", \"mri\", \"Maori\", \"Maori\", \"Te Reo Māori\", WritingScript.Latin),\n L(\"mk\", \"mkd\", \"Macedonian\", \"Makedonska\", \"Македонски\", WritingScript.Cyrillic),\n L(\"ml\", \"mal\", \"Malayalam\", \"Malayalam\", \"മലയാളം\", WritingScript.Malayalam),\n L(\"mn\", \"mon\", \"Mongolian\", \"Mongoliska\", \"Монгол\", WritingScript.Cyrillic),\n L(\"mr\", \"mar\", \"Marathi\", \"Marathi\", \"मराठी\", WritingScript.Devanagari),\n L(\"ms\", \"msa\", \"Malay\", \"Malajiska\", \"Bahasa Melayu\", WritingScript.Latin),\n L(\"mt\", \"mlt\", \"Maltese\", \"Maltesiska\", \"Malti\", WritingScript.Latin),\n L(\"my\", \"mya\", \"Burmese\", \"Burmesiska\", \"မြန်မာစာ\", WritingScript.Myanmar),\n L(\"na\", \"nau\", \"Nauru\", \"Nauru\", \"Dorerin Naoero\", WritingScript.Latin),\n L(\"nb\", \"nob\", \"Norwegian Bokmål\", \"Norska (bokmål)\", \"Norsk bokmål\", WritingScript.Latin),\n L(\"nd\", \"nde\", \"Northern Ndebele\", \"Nordndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"ne\", \"nep\", \"Nepali\", \"Nepalesiska\", \"नेपाली\", WritingScript.Devanagari),\n L(\"ng\", \"ndo\", \"Ndonga\", \"Ndonga\", \"Owambo\", WritingScript.Latin),\n L(\"nl\", \"nld\", \"Dutch\", \"Nederländska\", \"Nederlands\", WritingScript.Latin),\n L(\"nn\", \"nno\", \"Norwegian Nynorsk\", \"Norska (nynorsk)\", \"Norsk nynorsk\", WritingScript.Latin),\n L(\"no\", \"nor\", \"Norwegian\", \"Norska\", \"Norsk\", WritingScript.Latin),\n L(\"nr\", \"nbl\", \"Southern Ndebele\", \"Sydndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"nv\", \"nav\", \"Navajo\", \"Navajo\", \"Diné Bizaad\", WritingScript.Latin),\n L(\"ny\", \"nya\", \"Chichewa\", \"Chichewa\", \"Chichewa\", WritingScript.Latin),\n L(\"oc\", \"oci\", \"Occitan\", \"Occitanska\", \"Occitan\", WritingScript.Latin),\n L(\"oj\", \"oji\", \"Ojibwa\", \"Ojibwa\", \"ᐊᓂᔑᓈᐯᒧᐎᓐ\", WritingScript.Canadian),\n L(\"om\", \"orm\", \"Oromo\", \"Oromo\", \"Afaan Oromoo\", WritingScript.Latin),\n L(\"or\", \"ori\", \"Oriya\", \"Oriya\", \"ଓଡ଼ିଆ\", WritingScript.Oriya),\n L(\"os\", \"oss\", \"Ossetian\", \"Ossetiska\", \"Ирон\", WritingScript.Cyrillic),\n L(\"pa\", \"pan\", \"Punjabi\", \"Punjabi\", \"ਪੰਜਾਬੀ\", WritingScript.Gurmukhi),\n L(\"pi\", \"pli\", \"Pali\", \"Pali\", \"पालि\", WritingScript.Devanagari),\n L(\"pl\", \"pol\", \"Polish\", \"Polska\", \"Polski\", WritingScript.Latin),\n L(\"ps\", \"pus\", \"Pashto\", \"Pashto\", \"پښتو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"pt\", \"por\", \"Portuguese\", \"Portugisiska\", \"Português\", WritingScript.Latin),\n L(\"qu\", \"que\", \"Quechua\", \"Quechua\", \"Runa Simi\", WritingScript.Latin),\n L(\"rm\", \"roh\", \"Romansh\", \"Rätoromanska\", \"Rumantsch\", WritingScript.Latin),\n L(\"rn\", \"run\", \"Rundi\", \"Kirundi\", \"Ikirundi\", WritingScript.Latin),\n L(\"ro\", \"ron\", \"Romanian\", \"Rumänska\", \"Română\", WritingScript.Latin),\n L(\"ru\", \"rus\", \"Russian\", \"Ryska\", \"Русский\", WritingScript.Cyrillic),\n L(\"rw\", \"kin\", \"Kinyarwanda\", \"Kinyarwanda\", \"Ikinyarwanda\", WritingScript.Latin),\n L(\"sa\", \"san\", \"Sanskrit\", \"Sanskrit\", \"संस्कृतम्\", WritingScript.Devanagari),\n L(\"sc\", \"srd\", \"Sardinian\", \"Sardiska\", \"Sardu\", WritingScript.Latin),\n L(\"sd\", \"snd\", \"Sindhi\", \"Sindhi\", \"سنڌي\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"se\", \"sme\", \"Northern Sami\", \"Nordsamiska\", \"Davvisámegiella\", WritingScript.Latin),\n L(\"sg\", \"sag\", \"Sango\", \"Sango\", \"Yângâ tî Sängö\", WritingScript.Latin),\n L(\"si\", \"sin\", \"Sinhala\", \"Singalesiska\", \"සිංහල\", WritingScript.Sinhala),\n L(\"sk\", \"slk\", \"Slovak\", \"Slovakiska\", \"Slovenčina\", WritingScript.Latin),\n L(\"sl\", \"slv\", \"Slovenian\", \"Slovenska\", \"Slovenščina\", WritingScript.Latin),\n L(\"sm\", \"smo\", \"Samoan\", \"Samoanska\", \"Gagana Sāmoa\", WritingScript.Latin),\n L(\"sn\", \"sna\", \"Shona\", \"Shona\", \"ChiShona\", WritingScript.Latin),\n L(\"so\", \"som\", \"Somali\", \"Somaliska\", \"Soomaali\", WritingScript.Latin),\n L(\"sq\", \"sqi\", \"Albanian\", \"Albanska\", \"Shqip\", WritingScript.Latin),\n L(\"sr\", \"srp\", \"Serbian\", \"Serbiska\", \"Српски\", WritingScript.Cyrillic),\n L(\"ss\", \"ssw\", \"Swati\", \"Swati\", \"SiSwati\", WritingScript.Latin),\n L(\"st\", \"sot\", \"Southern Sotho\", \"Sotho\", \"Sesotho\", WritingScript.Latin),\n L(\"su\", \"sun\", \"Sundanese\", \"Sundanesiska\", \"Basa Sunda\", WritingScript.Latin),\n L(\"sv\", \"swe\", \"Swedish\", \"Svenska\", \"Svenska\", WritingScript.Latin),\n L(\"sw\", \"swa\", \"Swahili\", \"Swahili\", \"Kiswahili\", WritingScript.Latin),\n L(\"ta\", \"tam\", \"Tamil\", \"Tamil\", \"தமிழ்\", WritingScript.Tamil),\n L(\"te\", \"tel\", \"Telugu\", \"Telugu\", \"తెలుగు\", WritingScript.Telugu),\n L(\"tg\", \"tgk\", \"Tajik\", \"Tadzjikiska\", \"Тоҷикӣ\", WritingScript.Cyrillic),\n L(\"th\", \"tha\", \"Thai\", \"Thailändska\", \"ไทย\", WritingScript.Thai),\n L(\"ti\", \"tir\", \"Tigrinya\", \"Tigrinja\", \"ትግርኛ\", WritingScript.Ethiopic),\n L(\"tk\", \"tuk\", \"Turkmen\", \"Turkmeniska\", \"Türkmen\", WritingScript.Latin),\n L(\"tl\", \"tgl\", \"Tagalog\", \"Tagalog\", \"Tagalog\", WritingScript.Latin),\n L(\"tn\", \"tsn\", \"Tswana\", \"Tswana\", \"Setswana\", WritingScript.Latin),\n L(\"to\", \"ton\", \"Tongan\", \"Tonganska\", \"Lea Faka-Tonga\", WritingScript.Latin),\n L(\"tr\", \"tur\", \"Turkish\", \"Turkiska\", \"Türkçe\", WritingScript.Latin),\n L(\"ts\", \"tso\", \"Tsonga\", \"Tsonga\", \"Xitsonga\", WritingScript.Latin),\n L(\"tt\", \"tat\", \"Tatar\", \"Tatariska\", \"Татар\", WritingScript.Cyrillic),\n L(\"tw\", \"twi\", \"Twi\", \"Twi\", \"Twi\", WritingScript.Latin),\n L(\"ty\", \"tah\", \"Tahitian\", \"Tahitiska\", \"Reo Tahiti\", WritingScript.Latin),\n L(\n \"ug\",\n \"uig\",\n \"Uyghur\",\n \"Uiguriska\",\n \"ئۇيغۇرچە\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"uk\", \"ukr\", \"Ukrainian\", \"Ukrainska\", \"Українська\", WritingScript.Cyrillic),\n L(\"ur\", \"urd\", \"Urdu\", \"Urdu\", \"اردو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"uz\", \"uzb\", \"Uzbek\", \"Uzbekiska\", \"Oʻzbek\", WritingScript.Latin),\n L(\"ve\", \"ven\", \"Venda\", \"Venda\", \"Tshivenḓa\", WritingScript.Latin),\n L(\"vi\", \"vie\", \"Vietnamese\", \"Vietnamesiska\", \"Tiếng Việt\", WritingScript.Latin),\n L(\"vo\", \"vol\", \"Volapük\", \"Volapük\", \"Volapük\", WritingScript.Latin),\n L(\"wa\", \"wln\", \"Walloon\", \"Vallonska\", \"Walon\", WritingScript.Latin),\n L(\"wo\", \"wol\", \"Wolof\", \"Wolof\", \"Wollof\", WritingScript.Latin),\n L(\"xh\", \"xho\", \"Xhosa\", \"Xhosa\", \"isiXhosa\", WritingScript.Latin),\n L(\"yi\", \"yid\", \"Yiddish\", \"Jiddisch\", \"ייִדיש\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"yo\", \"yor\", \"Yoruba\", \"Yoruba\", \"Yorùbá\", WritingScript.Latin),\n L(\"za\", \"zha\", \"Zhuang\", \"Zhuang\", \"Saɯ cueŋƅ\", WritingScript.Latin),\n L(\"zh\", \"zho\", \"Chinese\", \"Kinesiska\", \"中文\", WritingScript.Han),\n L(\"zu\", \"zul\", \"Zulu\", \"Zulu\", \"isiZulu\", WritingScript.Latin),\n]);\n\nconst BY_KEY = (() => {\n const m = new Map<string, Language>();\n for (const lang of ALL) {\n m.set(lang.alpha2Code, lang);\n m.set(lang.alpha3Code, lang);\n m.set(lang.englishName.toLowerCase(), lang);\n if (!m.has(lang.localizedName.toLowerCase())) {\n m.set(lang.localizedName.toLowerCase(), lang);\n }\n if (\n lang.nativeName.toLowerCase() !== lang.englishName.toLowerCase() &&\n !m.has(lang.nativeName.toLowerCase())\n ) {\n m.set(lang.nativeName.toLowerCase(), lang);\n }\n }\n return m;\n})();\n\nconst byA2 = (a2: string) => BY_KEY.get(a2)!;\n\n(Language as { Afrikaans: Language }).Afrikaans = byA2(\"af\");\n(Language as { Albanian: Language }).Albanian = byA2(\"sq\");\n(Language as { Arabic: Language }).Arabic = byA2(\"ar\");\n(Language as { Bulgarian: Language }).Bulgarian = byA2(\"bg\");\n(Language as { Catalan: Language }).Catalan = byA2(\"ca\");\n(Language as { Chinese: Language }).Chinese = byA2(\"zh\");\n(Language as { Croatian: Language }).Croatian = byA2(\"hr\");\n(Language as { Czech: Language }).Czech = byA2(\"cs\");\n(Language as { Danish: Language }).Danish = byA2(\"da\");\n(Language as { Dutch: Language }).Dutch = byA2(\"nl\");\n(Language as { English: Language }).English = byA2(\"en\");\n(Language as { Estonian: Language }).Estonian = byA2(\"et\");\n(Language as { Faroese: Language }).Faroese = byA2(\"fo\");\n(Language as { Finnish: Language }).Finnish = byA2(\"fi\");\n(Language as { French: Language }).French = byA2(\"fr\");\n(Language as { German: Language }).German = byA2(\"de\");\n(Language as { Greek: Language }).Greek = byA2(\"el\");\n(Language as { Hindi: Language }).Hindi = byA2(\"hi\");\n(Language as { Hungarian: Language }).Hungarian = byA2(\"hu\");\n(Language as { Icelandic: Language }).Icelandic = byA2(\"is\");\n(Language as { Italian: Language }).Italian = byA2(\"it\");\n(Language as { Japanese: Language }).Japanese = byA2(\"ja\");\n(Language as { Korean: Language }).Korean = byA2(\"ko\");\n(Language as { Latvian: Language }).Latvian = byA2(\"lv\");\n(Language as { Lithuanian: Language }).Lithuanian = byA2(\"lt\");\n(Language as { NorthernSami: Language }).NorthernSami = byA2(\"se\");\n(Language as { Norwegian: Language }).Norwegian = byA2(\"no\");\n(Language as { NorwegianBokmal: Language }).NorwegianBokmal = byA2(\"nb\");\n(Language as { NorwegianNynorsk: Language }).NorwegianNynorsk = byA2(\"nn\");\n(Language as { Polish: Language }).Polish = byA2(\"pl\");\n(Language as { Portuguese: Language }).Portuguese = byA2(\"pt\");\n(Language as { Romanian: Language }).Romanian = byA2(\"ro\");\n(Language as { Russian: Language }).Russian = byA2(\"ru\");\n(Language as { Slovak: Language }).Slovak = byA2(\"sk\");\n(Language as { Slovenian: Language }).Slovenian = byA2(\"sl\");\n(Language as { Spanish: Language }).Spanish = byA2(\"es\");\n(Language as { Swahili: Language }).Swahili = byA2(\"sw\");\n(Language as { Swedish: Language }).Swedish = byA2(\"sv\");\n(Language as { Turkish: Language }).Turkish = byA2(\"tr\");\n(Language as { Ukrainian: Language }).Ukrainian = byA2(\"uk\");\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n// `geography/country.ts` imports this module for its currency accessors. Both\n// directions are only used inside function bodies, never at module-evaluation\n// time, so the cycle resolves safely under ESM.\nimport { Country } from \"../geography/country.js\";\n\ninterface CurrencyRow {\n code: string;\n en: string;\n sv: string;\n symbol: string;\n decimalPlaces: number;\n}\n\nconst KNOWN_CURRENCIES: readonly CurrencyRow[] = [\n { code: \"SEK\", en: \"Swedish krona\", sv: \"Svensk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"NOK\", en: \"Norwegian krone\", sv: \"Norsk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"DKK\", en: \"Danish krone\", sv: \"Dansk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"ISK\", en: \"Icelandic króna\", sv: \"Isländsk krona\", symbol: \"kr\", decimalPlaces: 0 },\n { code: \"EUR\", en: \"Euro\", sv: \"Euro\", symbol: \"€\", decimalPlaces: 2 },\n {\n code: \"USD\",\n en: \"United States dollar\",\n sv: \"Amerikansk dollar\",\n symbol: \"$\",\n decimalPlaces: 2,\n },\n { code: \"GBP\", en: \"Pound sterling\", sv: \"Brittiskt pund\", symbol: \"£\", decimalPlaces: 2 },\n { code: \"CHF\", en: \"Swiss franc\", sv: \"Schweizisk franc\", symbol: \"CHF\", decimalPlaces: 2 },\n { code: \"JPY\", en: \"Japanese yen\", sv: \"Japansk yen\", symbol: \"¥\", decimalPlaces: 0 },\n { code: \"CNY\", en: \"Chinese yuan\", sv: \"Kinesisk yuan\", symbol: \"¥\", decimalPlaces: 2 },\n { code: \"CAD\", en: \"Canadian dollar\", sv: \"Kanadensisk dollar\", symbol: \"CA$\", decimalPlaces: 2 },\n { code: \"AUD\", en: \"Australian dollar\", sv: \"Australisk dollar\", symbol: \"A$\", decimalPlaces: 2 },\n {\n code: \"NZD\",\n en: \"New Zealand dollar\",\n sv: \"Nyzeeländsk dollar\",\n symbol: \"NZ$\",\n decimalPlaces: 2,\n },\n { code: \"PLN\", en: \"Polish złoty\", sv: \"Polsk zloty\", symbol: \"zł\", decimalPlaces: 2 },\n { code: \"CZK\", en: \"Czech koruna\", sv: \"Tjeckisk koruna\", symbol: \"Kč\", decimalPlaces: 2 },\n { code: \"HUF\", en: \"Hungarian forint\", sv: \"Ungersk forint\", symbol: \"Ft\", decimalPlaces: 2 },\n { code: \"RON\", en: \"Romanian leu\", sv: \"Rumänsk leu\", symbol: \"lei\", decimalPlaces: 2 },\n { code: \"BGN\", en: \"Bulgarian lev\", sv: \"Bulgarisk lev\", symbol: \"лв\", decimalPlaces: 2 },\n { code: \"HRK\", en: \"Croatian kuna\", sv: \"Kroatisk kuna\", symbol: \"kn\", decimalPlaces: 2 },\n { code: \"TRY\", en: \"Turkish lira\", sv: \"Turkisk lira\", symbol: \"₺\", decimalPlaces: 2 },\n { code: \"RUB\", en: \"Russian ruble\", sv: \"Rysk rubel\", symbol: \"₽\", decimalPlaces: 2 },\n { code: \"INR\", en: \"Indian rupee\", sv: \"Indisk rupie\", symbol: \"₹\", decimalPlaces: 2 },\n { code: \"BRL\", en: \"Brazilian real\", sv: \"Brasiliansk real\", symbol: \"R$\", decimalPlaces: 2 },\n { code: \"ZAR\", en: \"South African rand\", sv: \"Sydafrikansk rand\", symbol: \"R\", decimalPlaces: 2 },\n { code: \"MXN\", en: \"Mexican peso\", sv: \"Mexikansk peso\", symbol: \"MX$\", decimalPlaces: 2 },\n {\n code: \"SGD\",\n en: \"Singapore dollar\",\n sv: \"Singaporiansk dollar\",\n symbol: \"S$\",\n decimalPlaces: 2,\n },\n { code: \"HKD\", en: \"Hong Kong dollar\", sv: \"Hongkongdollar\", symbol: \"HK$\", decimalPlaces: 2 },\n { code: \"KRW\", en: \"South Korean won\", sv: \"Sydkoreansk won\", symbol: \"₩\", decimalPlaces: 0 },\n { code: \"THB\", en: \"Thai baht\", sv: \"Thailändsk baht\", symbol: \"฿\", decimalPlaces: 2 },\n {\n code: \"TWD\",\n en: \"New Taiwan dollar\",\n sv: \"Taiwanesisk dollar\",\n symbol: \"NT$\",\n decimalPlaces: 2,\n },\n { code: \"ILS\", en: \"Israeli new shekel\", sv: \"Israelisk shekel\", symbol: \"₪\", decimalPlaces: 2 },\n {\n code: \"AED\",\n en: \"United Arab Emirates dirham\",\n sv: \"Emiratisk dirham\",\n symbol: \"د.إ\",\n decimalPlaces: 2,\n },\n { code: \"SAR\", en: \"Saudi riyal\", sv: \"Saudisk riyal\", symbol: \"﷼\", decimalPlaces: 2 },\n { code: \"PHP\", en: \"Philippine peso\", sv: \"Filippinsk peso\", symbol: \"₱\", decimalPlaces: 2 },\n { code: \"IDR\", en: \"Indonesian rupiah\", sv: \"Indonesisk rupiah\", symbol: \"Rp\", decimalPlaces: 2 },\n { code: \"MYR\", en: \"Malaysian ringgit\", sv: \"Malaysisk ringgit\", symbol: \"RM\", decimalPlaces: 2 },\n { code: \"VND\", en: \"Vietnamese đồng\", sv: \"Vietnamesisk dong\", symbol: \"₫\", decimalPlaces: 0 },\n { code: \"UAH\", en: \"Ukrainian hryvnia\", sv: \"Ukrainsk hryvnia\", symbol: \"₴\", decimalPlaces: 2 },\n { code: \"EGP\", en: \"Egyptian pound\", sv: \"Egyptiskt pund\", symbol: \"E£\", decimalPlaces: 2 },\n { code: \"NGN\", en: \"Nigerian naira\", sv: \"Nigeriansk naira\", symbol: \"₦\", decimalPlaces: 2 },\n { code: \"KES\", en: \"Kenyan shilling\", sv: \"Kenyansk shilling\", symbol: \"KSh\", decimalPlaces: 2 },\n { code: \"COP\", en: \"Colombian peso\", sv: \"Colombiansk peso\", symbol: \"CO$\", decimalPlaces: 2 },\n { code: \"ARS\", en: \"Argentine peso\", sv: \"Argentinsk peso\", symbol: \"AR$\", decimalPlaces: 2 },\n { code: \"CLP\", en: \"Chilean peso\", sv: \"Chilensk peso\", symbol: \"CL$\", decimalPlaces: 0 },\n { code: \"PEN\", en: \"Peruvian sol\", sv: \"Peruansk sol\", symbol: \"S/.\", decimalPlaces: 2 },\n];\n\n/**\n * An ISO 4217 currency identified by its three-letter code (e.g. `SEK`, `EUR`).\n */\nexport class Currency {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Currency\",\n localizedName: \"Valuta\",\n emoji: \"\\u{1F4B1}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-4217-currency-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_4217\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly symbol: string;\n readonly decimalPlaces: number;\n\n private constructor(row: CurrencyRow) {\n this.code = row.code;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.symbol = row.symbol;\n this.decimalPlaces = row.decimalPlaces;\n }\n\n /** @internal */\n static _fromRow(row: CurrencyRow): Currency {\n return new Currency(row);\n }\n\n /** Display name in current UI culture (Swedish or English). */\n /**\n * The currency name as used in its issuing country. Falls back to\n * {@link englishName} when no issuing country is known.\n */\n get nativeName(): string {\n const country = Country.all.find(\n (c) => c.currencyCode != null && c.currencyCode.toUpperCase() === this.code.toUpperCase(),\n );\n if (country === undefined) return this.englishName;\n return country.nativeName === country.englishName ? this.englishName : this.localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): Currency | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n const byCode = BY_CODE.get(trimmed.toUpperCase());\n if (byCode) return byCode;\n const byName = BY_NAME.get(trimmed.toLowerCase());\n if (byName) return byName;\n return null;\n }\n\n static parse(input: string): Currency {\n const r = Currency.tryParse(input);\n if (r === null) throw new Error(\"Unknown currency.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Currency.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Currency.normalize(input) === input;\n }\n\n /** All known currencies. */\n static get all(): readonly Currency[] {\n return ALL_CURRENCIES;\n }\n\n /** @internal Lookup by symbol. */\n static tryParseSymbol(symbol: string | null | undefined): Currency | null {\n if (symbol == null || symbol.trim() === \"\") return null;\n return BY_SYMBOL.get(symbol.trim().toLowerCase()) ?? null;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Currency | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Currency | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n static get SEK(): Currency {\n return BY_CODE.get(\"SEK\")!;\n }\n static get EUR(): Currency {\n return BY_CODE.get(\"EUR\")!;\n }\n static get USD(): Currency {\n return BY_CODE.get(\"USD\")!;\n }\n static get NOK(): Currency {\n return BY_CODE.get(\"NOK\")!;\n }\n static get DKK(): Currency {\n return BY_CODE.get(\"DKK\")!;\n }\n static get GBP(): Currency {\n return BY_CODE.get(\"GBP\")!;\n }\n}\n\nconst ALL_CURRENCIES: readonly Currency[] = KNOWN_CURRENCIES.map((r) => Currency._fromRow(r));\n\nconst BY_CODE = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) BY_CODE.set(c.code.toUpperCase(), c);\n\nconst BY_NAME = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n BY_NAME.set(c.englishName.toLowerCase(), c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n}\n\nconst BY_SYMBOL = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n if (!BY_SYMBOL.has(c.symbol.toLowerCase())) BY_SYMBOL.set(c.symbol.toLowerCase(), c);\n}\n\n/**\n * Returns the primary currency for a country, or `null` when no association\n * is known. Resolves the country's first `currencyCodes` entry to a\n * {@link Currency} instance.\n */\nexport function getCurrencyForCountry(country: Country): Currency | null {\n const codes = country.currencyCodes;\n if (codes.length === 0) return null;\n const first = codes[0];\n if (first == null) return null;\n return Currency.tryParse(first);\n}\n","import { Continent } from \"./continent.js\";\n\n/**\n * Static country data: ISO 3166-1 alpha-2/alpha-3/numeric codes, English/Swedish/native names,\n * E.164 calling code, ccTLD, continent. Sourced from ISO 3166, ITU-T E.164, and IANA root db.\n */\nexport interface CountryRow {\n readonly alpha2: string;\n readonly alpha3: string;\n readonly numeric: number;\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly callingCode: string;\n readonly tld: string;\n readonly continent: Continent;\n}\n\nconst C = (\n alpha2: string,\n alpha3: string,\n numeric: number,\n en: string,\n sv: string,\n native: string,\n callingCode: string,\n tld: string,\n continent: Continent,\n): CountryRow => ({ alpha2, alpha3, numeric, en, sv, native, callingCode, tld, continent });\n\nexport const COUNTRY_ROWS: readonly CountryRow[] = [\n C(\"AF\", \"AFG\", 4, \"Afghanistan\", \"Afghanistan\", \"افغانستان\", \"93\", \".af\", Continent.Asia),\n C(\"AL\", \"ALB\", 8, \"Albania\", \"Albanien\", \"Shqipëria\", \"355\", \".al\", Continent.Europe),\n C(\"DZ\", \"DZA\", 12, \"Algeria\", \"Algeriet\", \"الجزائر\", \"213\", \".dz\", Continent.Africa),\n C(\n \"AS\",\n \"ASM\",\n 16,\n \"American Samoa\",\n \"Amerikanska Samoa\",\n \"American Samoa\",\n \"1\",\n \".as\",\n Continent.Oceania,\n ),\n C(\"AD\", \"AND\", 20, \"Andorra\", \"Andorra\", \"Andorra\", \"376\", \".ad\", Continent.Europe),\n C(\"AO\", \"AGO\", 24, \"Angola\", \"Angola\", \"Angola\", \"244\", \".ao\", Continent.Africa),\n C(\n \"AG\",\n \"ATG\",\n 28,\n \"Antigua and Barbuda\",\n \"Antigua och Barbuda\",\n \"Antigua and Barbuda\",\n \"1\",\n \".ag\",\n Continent.NorthAmerica,\n ),\n C(\"AR\", \"ARG\", 32, \"Argentina\", \"Argentina\", \"Argentina\", \"54\", \".ar\", Continent.SouthAmerica),\n C(\"AM\", \"ARM\", 51, \"Armenia\", \"Armenien\", \"Հայաստան\", \"374\", \".am\", Continent.Asia),\n C(\"AW\", \"ABW\", 533, \"Aruba\", \"Aruba\", \"Aruba\", \"297\", \".aw\", Continent.NorthAmerica),\n C(\"AU\", \"AUS\", 36, \"Australia\", \"Australien\", \"Australia\", \"61\", \".au\", Continent.Oceania),\n C(\"AT\", \"AUT\", 40, \"Austria\", \"Österrike\", \"Österreich\", \"43\", \".at\", Continent.Europe),\n C(\"AZ\", \"AZE\", 31, \"Azerbaijan\", \"Azerbajdzjan\", \"Azərbaycan\", \"994\", \".az\", Continent.Asia),\n C(\"BS\", \"BHS\", 44, \"Bahamas\", \"Bahamas\", \"Bahamas\", \"1\", \".bs\", Continent.NorthAmerica),\n C(\"BH\", \"BHR\", 48, \"Bahrain\", \"Bahrain\", \"البحرين\", \"973\", \".bh\", Continent.Asia),\n C(\"BD\", \"BGD\", 50, \"Bangladesh\", \"Bangladesh\", \"বাংলাদেশ\", \"880\", \".bd\", Continent.Asia),\n C(\"BB\", \"BRB\", 52, \"Barbados\", \"Barbados\", \"Barbados\", \"1\", \".bb\", Continent.NorthAmerica),\n C(\"BY\", \"BLR\", 112, \"Belarus\", \"Belarus\", \"Беларусь\", \"375\", \".by\", Continent.Europe),\n C(\"BE\", \"BEL\", 56, \"Belgium\", \"Belgien\", \"België\", \"32\", \".be\", Continent.Europe),\n C(\"BZ\", \"BLZ\", 84, \"Belize\", \"Belize\", \"Belize\", \"501\", \".bz\", Continent.NorthAmerica),\n C(\"BJ\", \"BEN\", 204, \"Benin\", \"Benin\", \"Bénin\", \"229\", \".bj\", Continent.Africa),\n C(\"BM\", \"BMU\", 60, \"Bermuda\", \"Bermuda\", \"Bermuda\", \"1\", \".bm\", Continent.NorthAmerica),\n C(\"BT\", \"BTN\", 64, \"Bhutan\", \"Bhutan\", \"འབྲུག\", \"975\", \".bt\", Continent.Asia),\n C(\"BO\", \"BOL\", 68, \"Bolivia\", \"Bolivia\", \"Bolivia\", \"591\", \".bo\", Continent.SouthAmerica),\n C(\n \"BA\",\n \"BIH\",\n 70,\n \"Bosnia and Herzegovina\",\n \"Bosnien och Hercegovina\",\n \"Bosna i Hercegovina\",\n \"387\",\n \".ba\",\n Continent.Europe,\n ),\n C(\"BW\", \"BWA\", 72, \"Botswana\", \"Botswana\", \"Botswana\", \"267\", \".bw\", Continent.Africa),\n C(\"BR\", \"BRA\", 76, \"Brazil\", \"Brasilien\", \"Brasil\", \"55\", \".br\", Continent.SouthAmerica),\n C(\"BN\", \"BRN\", 96, \"Brunei\", \"Brunei\", \"Brunei\", \"673\", \".bn\", Continent.Asia),\n C(\"BG\", \"BGR\", 100, \"Bulgaria\", \"Bulgarien\", \"България\", \"359\", \".bg\", Continent.Europe),\n C(\n \"BF\",\n \"BFA\",\n 854,\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"226\",\n \".bf\",\n Continent.Africa,\n ),\n C(\"BI\", \"BDI\", 108, \"Burundi\", \"Burundi\", \"Burundi\", \"257\", \".bi\", Continent.Africa),\n C(\"CV\", \"CPV\", 132, \"Cabo Verde\", \"Kap Verde\", \"Cabo Verde\", \"238\", \".cv\", Continent.Africa),\n C(\"KH\", \"KHM\", 116, \"Cambodia\", \"Kambodja\", \"កម្ពុជា\", \"855\", \".kh\", Continent.Asia),\n C(\"CM\", \"CMR\", 120, \"Cameroon\", \"Kamerun\", \"Cameroun\", \"237\", \".cm\", Continent.Africa),\n C(\"CA\", \"CAN\", 124, \"Canada\", \"Kanada\", \"Canada\", \"1\", \".ca\", Continent.NorthAmerica),\n C(\n \"CF\",\n \"CAF\",\n 140,\n \"Central African Republic\",\n \"Centralafrikanska republiken\",\n \"République centrafricaine\",\n \"236\",\n \".cf\",\n Continent.Africa,\n ),\n C(\"TD\", \"TCD\", 148, \"Chad\", \"Tchad\", \"Tchad\", \"235\", \".td\", Continent.Africa),\n C(\"CL\", \"CHL\", 152, \"Chile\", \"Chile\", \"Chile\", \"56\", \".cl\", Continent.SouthAmerica),\n C(\"CN\", \"CHN\", 156, \"China\", \"Kina\", \"中国\", \"86\", \".cn\", Continent.Asia),\n C(\"CO\", \"COL\", 170, \"Colombia\", \"Colombia\", \"Colombia\", \"57\", \".co\", Continent.SouthAmerica),\n C(\"KM\", \"COM\", 174, \"Comoros\", \"Komorerna\", \"Komori\", \"269\", \".km\", Continent.Africa),\n C(\"CG\", \"COG\", 178, \"Congo\", \"Kongo\", \"Congo\", \"242\", \".cg\", Continent.Africa),\n C(\n \"CD\",\n \"COD\",\n 180,\n \"Congo (Democratic Republic)\",\n \"Demokratiska republiken Kongo\",\n \"République démocratique du Congo\",\n \"243\",\n \".cd\",\n Continent.Africa,\n ),\n C(\n \"CR\",\n \"CRI\",\n 188,\n \"Costa Rica\",\n \"Costa Rica\",\n \"Costa Rica\",\n \"506\",\n \".cr\",\n Continent.NorthAmerica,\n ),\n C(\n \"CI\",\n \"CIV\",\n 384,\n \"Côte d'Ivoire\",\n \"Elfenbenskusten\",\n \"Côte d'Ivoire\",\n \"225\",\n \".ci\",\n Continent.Africa,\n ),\n C(\"HR\", \"HRV\", 191, \"Croatia\", \"Kroatien\", \"Hrvatska\", \"385\", \".hr\", Continent.Europe),\n C(\"CU\", \"CUB\", 192, \"Cuba\", \"Kuba\", \"Cuba\", \"53\", \".cu\", Continent.NorthAmerica),\n C(\"CW\", \"CUW\", 531, \"Curaçao\", \"Curaçao\", \"Curaçao\", \"599\", \".cw\", Continent.NorthAmerica),\n C(\"CY\", \"CYP\", 196, \"Cyprus\", \"Cypern\", \"Κύπρος\", \"357\", \".cy\", Continent.Europe),\n C(\"CZ\", \"CZE\", 203, \"Czechia\", \"Tjeckien\", \"Česko\", \"420\", \".cz\", Continent.Europe),\n C(\"DK\", \"DNK\", 208, \"Denmark\", \"Danmark\", \"Danmark\", \"45\", \".dk\", Continent.Europe),\n C(\"DJ\", \"DJI\", 262, \"Djibouti\", \"Djibouti\", \"Djibouti\", \"253\", \".dj\", Continent.Africa),\n C(\"DM\", \"DMA\", 212, \"Dominica\", \"Dominica\", \"Dominica\", \"1\", \".dm\", Continent.NorthAmerica),\n C(\n \"DO\",\n \"DOM\",\n 214,\n \"Dominican Republic\",\n \"Dominikanska republiken\",\n \"República Dominicana\",\n \"1\",\n \".do\",\n Continent.NorthAmerica,\n ),\n C(\"EC\", \"ECU\", 218, \"Ecuador\", \"Ecuador\", \"Ecuador\", \"593\", \".ec\", Continent.SouthAmerica),\n C(\"EG\", \"EGY\", 818, \"Egypt\", \"Egypten\", \"مصر\", \"20\", \".eg\", Continent.Africa),\n C(\n \"SV\",\n \"SLV\",\n 222,\n \"El Salvador\",\n \"El Salvador\",\n \"El Salvador\",\n \"503\",\n \".sv\",\n Continent.NorthAmerica,\n ),\n C(\n \"GQ\",\n \"GNQ\",\n 226,\n \"Equatorial Guinea\",\n \"Ekvatorialguinea\",\n \"Guinea Ecuatorial\",\n \"240\",\n \".gq\",\n Continent.Africa,\n ),\n C(\"ER\", \"ERI\", 232, \"Eritrea\", \"Eritrea\", \"ኤርትራ\", \"291\", \".er\", Continent.Africa),\n C(\"EE\", \"EST\", 233, \"Estonia\", \"Estland\", \"Eesti\", \"372\", \".ee\", Continent.Europe),\n C(\"SZ\", \"SWZ\", 748, \"Eswatini\", \"Eswatini\", \"eSwatini\", \"268\", \".sz\", Continent.Africa),\n C(\"ET\", \"ETH\", 231, \"Ethiopia\", \"Etiopien\", \"ኢትዮጵያ\", \"251\", \".et\", Continent.Africa),\n C(\"FJ\", \"FJI\", 242, \"Fiji\", \"Fiji\", \"Fiji\", \"679\", \".fj\", Continent.Oceania),\n C(\"FI\", \"FIN\", 246, \"Finland\", \"Finland\", \"Suomi\", \"358\", \".fi\", Continent.Europe),\n C(\"FR\", \"FRA\", 250, \"France\", \"Frankrike\", \"France\", \"33\", \".fr\", Continent.Europe),\n C(\"GA\", \"GAB\", 266, \"Gabon\", \"Gabon\", \"Gabon\", \"241\", \".ga\", Continent.Africa),\n C(\"GM\", \"GMB\", 270, \"Gambia\", \"Gambia\", \"Gambia\", \"220\", \".gm\", Continent.Africa),\n C(\"GE\", \"GEO\", 268, \"Georgia\", \"Georgien\", \"საქართველო\", \"995\", \".ge\", Continent.Asia),\n C(\"DE\", \"DEU\", 276, \"Germany\", \"Tyskland\", \"Deutschland\", \"49\", \".de\", Continent.Europe),\n C(\"GH\", \"GHA\", 288, \"Ghana\", \"Ghana\", \"Ghana\", \"233\", \".gh\", Continent.Africa),\n C(\"GI\", \"GIB\", 292, \"Gibraltar\", \"Gibraltar\", \"Gibraltar\", \"350\", \".gi\", Continent.Europe),\n C(\"GR\", \"GRC\", 300, \"Greece\", \"Grekland\", \"Ελλάδα\", \"30\", \".gr\", Continent.Europe),\n C(\n \"GL\",\n \"GRL\",\n 304,\n \"Greenland\",\n \"Grönland\",\n \"Kalaallit Nunaat\",\n \"299\",\n \".gl\",\n Continent.NorthAmerica,\n ),\n C(\"GD\", \"GRD\", 308, \"Grenada\", \"Grenada\", \"Grenada\", \"1\", \".gd\", Continent.NorthAmerica),\n C(\"GU\", \"GUM\", 316, \"Guam\", \"Guam\", \"Guam\", \"1\", \".gu\", Continent.Oceania),\n C(\"GT\", \"GTM\", 320, \"Guatemala\", \"Guatemala\", \"Guatemala\", \"502\", \".gt\", Continent.NorthAmerica),\n C(\"GG\", \"GGY\", 831, \"Guernsey\", \"Guernsey\", \"Guernsey\", \"44\", \".gg\", Continent.Europe),\n C(\"GN\", \"GIN\", 324, \"Guinea\", \"Guinea\", \"Guinée\", \"224\", \".gn\", Continent.Africa),\n C(\n \"GW\",\n \"GNB\",\n 624,\n \"Guinea-Bissau\",\n \"Guinea-Bissau\",\n \"Guiné-Bissau\",\n \"245\",\n \".gw\",\n Continent.Africa,\n ),\n C(\"GY\", \"GUY\", 328, \"Guyana\", \"Guyana\", \"Guyana\", \"592\", \".gy\", Continent.SouthAmerica),\n C(\"HT\", \"HTI\", 332, \"Haiti\", \"Haiti\", \"Haïti\", \"509\", \".ht\", Continent.NorthAmerica),\n C(\"HN\", \"HND\", 340, \"Honduras\", \"Honduras\", \"Honduras\", \"504\", \".hn\", Continent.NorthAmerica),\n C(\"HK\", \"HKG\", 344, \"Hong Kong\", \"Hongkong\", \"香港\", \"852\", \".hk\", Continent.Asia),\n C(\"HU\", \"HUN\", 348, \"Hungary\", \"Ungern\", \"Magyarország\", \"36\", \".hu\", Continent.Europe),\n C(\"IS\", \"ISL\", 352, \"Iceland\", \"Island\", \"Ísland\", \"354\", \".is\", Continent.Europe),\n C(\"IN\", \"IND\", 356, \"India\", \"Indien\", \"भारत\", \"91\", \".in\", Continent.Asia),\n C(\"ID\", \"IDN\", 360, \"Indonesia\", \"Indonesien\", \"Indonesia\", \"62\", \".id\", Continent.Asia),\n C(\"IR\", \"IRN\", 364, \"Iran\", \"Iran\", \"ایران\", \"98\", \".ir\", Continent.Asia),\n C(\"IQ\", \"IRQ\", 368, \"Iraq\", \"Irak\", \"العراق\", \"964\", \".iq\", Continent.Asia),\n C(\"IE\", \"IRL\", 372, \"Ireland\", \"Irland\", \"Éire\", \"353\", \".ie\", Continent.Europe),\n C(\"IM\", \"IMN\", 833, \"Isle of Man\", \"Isle of Man\", \"Isle of Man\", \"44\", \".im\", Continent.Europe),\n C(\"IL\", \"ISR\", 376, \"Israel\", \"Israel\", \"ישראל\", \"972\", \".il\", Continent.Asia),\n C(\"IT\", \"ITA\", 380, \"Italy\", \"Italien\", \"Italia\", \"39\", \".it\", Continent.Europe),\n C(\"JM\", \"JAM\", 388, \"Jamaica\", \"Jamaica\", \"Jamaica\", \"1\", \".jm\", Continent.NorthAmerica),\n C(\"JP\", \"JPN\", 392, \"Japan\", \"Japan\", \"日本\", \"81\", \".jp\", Continent.Asia),\n C(\"JE\", \"JEY\", 832, \"Jersey\", \"Jersey\", \"Jersey\", \"44\", \".je\", Continent.Europe),\n C(\"JO\", \"JOR\", 400, \"Jordan\", \"Jordanien\", \"الأردن\", \"962\", \".jo\", Continent.Asia),\n C(\"KZ\", \"KAZ\", 398, \"Kazakhstan\", \"Kazakstan\", \"Қазақстан\", \"7\", \".kz\", Continent.Asia),\n C(\"KE\", \"KEN\", 404, \"Kenya\", \"Kenya\", \"Kenya\", \"254\", \".ke\", Continent.Africa),\n C(\"KI\", \"KIR\", 296, \"Kiribati\", \"Kiribati\", \"Kiribati\", \"686\", \".ki\", Continent.Oceania),\n C(\"KP\", \"PRK\", 408, \"North Korea\", \"Nordkorea\", \"조선\", \"850\", \".kp\", Continent.Asia),\n C(\"KR\", \"KOR\", 410, \"South Korea\", \"Sydkorea\", \"대한민국\", \"82\", \".kr\", Continent.Asia),\n C(\"KW\", \"KWT\", 414, \"Kuwait\", \"Kuwait\", \"الكويت\", \"965\", \".kw\", Continent.Asia),\n C(\"KG\", \"KGZ\", 417, \"Kyrgyzstan\", \"Kirgizistan\", \"Кыргызстан\", \"996\", \".kg\", Continent.Asia),\n C(\"LA\", \"LAO\", 418, \"Laos\", \"Laos\", \"ລາວ\", \"856\", \".la\", Continent.Asia),\n C(\"LV\", \"LVA\", 428, \"Latvia\", \"Lettland\", \"Latvija\", \"371\", \".lv\", Continent.Europe),\n C(\"LB\", \"LBN\", 422, \"Lebanon\", \"Libanon\", \"لبنان\", \"961\", \".lb\", Continent.Asia),\n C(\"LS\", \"LSO\", 426, \"Lesotho\", \"Lesotho\", \"Lesotho\", \"266\", \".ls\", Continent.Africa),\n C(\"LR\", \"LBR\", 430, \"Liberia\", \"Liberia\", \"Liberia\", \"231\", \".lr\", Continent.Africa),\n C(\"LY\", \"LBY\", 434, \"Libya\", \"Libyen\", \"ليبيا\", \"218\", \".ly\", Continent.Africa),\n C(\n \"LI\",\n \"LIE\",\n 438,\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"423\",\n \".li\",\n Continent.Europe,\n ),\n C(\"LT\", \"LTU\", 440, \"Lithuania\", \"Litauen\", \"Lietuva\", \"370\", \".lt\", Continent.Europe),\n C(\"LU\", \"LUX\", 442, \"Luxembourg\", \"Luxemburg\", \"Lëtzebuerg\", \"352\", \".lu\", Continent.Europe),\n C(\"MO\", \"MAC\", 446, \"Macao\", \"Macao\", \"澳門\", \"853\", \".mo\", Continent.Asia),\n C(\"MG\", \"MDG\", 450, \"Madagascar\", \"Madagaskar\", \"Madagasikara\", \"261\", \".mg\", Continent.Africa),\n C(\"MW\", \"MWI\", 454, \"Malawi\", \"Malawi\", \"Malawi\", \"265\", \".mw\", Continent.Africa),\n C(\"MY\", \"MYS\", 458, \"Malaysia\", \"Malaysia\", \"Malaysia\", \"60\", \".my\", Continent.Asia),\n C(\"MV\", \"MDV\", 462, \"Maldives\", \"Maldiverna\", \"ދިވެހިރާއްޖެ\", \"960\", \".mv\", Continent.Asia),\n C(\"ML\", \"MLI\", 466, \"Mali\", \"Mali\", \"Mali\", \"223\", \".ml\", Continent.Africa),\n C(\"MT\", \"MLT\", 470, \"Malta\", \"Malta\", \"Malta\", \"356\", \".mt\", Continent.Europe),\n C(\n \"MH\",\n \"MHL\",\n 584,\n \"Marshall Islands\",\n \"Marshallöarna\",\n \"Marshall Islands\",\n \"692\",\n \".mh\",\n Continent.Oceania,\n ),\n C(\"MR\", \"MRT\", 478, \"Mauritania\", \"Mauretanien\", \"موريتانيا\", \"222\", \".mr\", Continent.Africa),\n C(\"MU\", \"MUS\", 480, \"Mauritius\", \"Mauritius\", \"Maurice\", \"230\", \".mu\", Continent.Africa),\n C(\"MX\", \"MEX\", 484, \"Mexico\", \"Mexiko\", \"México\", \"52\", \".mx\", Continent.NorthAmerica),\n C(\"FM\", \"FSM\", 583, \"Micronesia\", \"Mikronesien\", \"Micronesia\", \"691\", \".fm\", Continent.Oceania),\n C(\"MD\", \"MDA\", 498, \"Moldova\", \"Moldavien\", \"Moldova\", \"373\", \".md\", Continent.Europe),\n C(\"MC\", \"MCO\", 492, \"Monaco\", \"Monaco\", \"Monaco\", \"377\", \".mc\", Continent.Europe),\n C(\"MN\", \"MNG\", 496, \"Mongolia\", \"Mongoliet\", \"Монгол\", \"976\", \".mn\", Continent.Asia),\n C(\"ME\", \"MNE\", 499, \"Montenegro\", \"Montenegro\", \"Crna Gora\", \"382\", \".me\", Continent.Europe),\n C(\"MA\", \"MAR\", 504, \"Morocco\", \"Marocko\", \"المغرب\", \"212\", \".ma\", Continent.Africa),\n C(\"MZ\", \"MOZ\", 508, \"Mozambique\", \"Moçambique\", \"Moçambique\", \"258\", \".mz\", Continent.Africa),\n C(\"MM\", \"MMR\", 104, \"Myanmar\", \"Myanmar\", \"မြန်မာ\", \"95\", \".mm\", Continent.Asia),\n C(\"NA\", \"NAM\", 516, \"Namibia\", \"Namibia\", \"Namibia\", \"264\", \".na\", Continent.Africa),\n C(\"NR\", \"NRU\", 520, \"Nauru\", \"Nauru\", \"Nauru\", \"674\", \".nr\", Continent.Oceania),\n C(\"NP\", \"NPL\", 524, \"Nepal\", \"Nepal\", \"नेपाल\", \"977\", \".np\", Continent.Asia),\n C(\"NL\", \"NLD\", 528, \"Netherlands\", \"Nederländerna\", \"Nederland\", \"31\", \".nl\", Continent.Europe),\n C(\"NZ\", \"NZL\", 554, \"New Zealand\", \"Nya Zeeland\", \"Aotearoa\", \"64\", \".nz\", Continent.Oceania),\n C(\"NI\", \"NIC\", 558, \"Nicaragua\", \"Nicaragua\", \"Nicaragua\", \"505\", \".ni\", Continent.NorthAmerica),\n C(\"NE\", \"NER\", 562, \"Niger\", \"Niger\", \"Niger\", \"227\", \".ne\", Continent.Africa),\n C(\"NG\", \"NGA\", 566, \"Nigeria\", \"Nigeria\", \"Nigeria\", \"234\", \".ng\", Continent.Africa),\n C(\n \"MK\",\n \"MKD\",\n 807,\n \"North Macedonia\",\n \"Nordmakedonien\",\n \"Северна Македонија\",\n \"389\",\n \".mk\",\n Continent.Europe,\n ),\n C(\"NO\", \"NOR\", 578, \"Norway\", \"Norge\", \"Norge\", \"47\", \".no\", Continent.Europe),\n C(\"OM\", \"OMN\", 512, \"Oman\", \"Oman\", \"عمان\", \"968\", \".om\", Continent.Asia),\n C(\"PK\", \"PAK\", 586, \"Pakistan\", \"Pakistan\", \"پاکستان\", \"92\", \".pk\", Continent.Asia),\n C(\"PW\", \"PLW\", 585, \"Palau\", \"Palau\", \"Palau\", \"680\", \".pw\", Continent.Oceania),\n C(\"PS\", \"PSE\", 275, \"Palestine\", \"Palestina\", \"فلسطين\", \"970\", \".ps\", Continent.Asia),\n C(\"PA\", \"PAN\", 591, \"Panama\", \"Panama\", \"Panamá\", \"507\", \".pa\", Continent.NorthAmerica),\n C(\n \"PG\",\n \"PNG\",\n 598,\n \"Papua New Guinea\",\n \"Papua Nya Guinea\",\n \"Papua Niugini\",\n \"675\",\n \".pg\",\n Continent.Oceania,\n ),\n C(\"PY\", \"PRY\", 600, \"Paraguay\", \"Paraguay\", \"Paraguay\", \"595\", \".py\", Continent.SouthAmerica),\n C(\"PE\", \"PER\", 604, \"Peru\", \"Peru\", \"Perú\", \"51\", \".pe\", Continent.SouthAmerica),\n C(\"PH\", \"PHL\", 608, \"Philippines\", \"Filippinerna\", \"Pilipinas\", \"63\", \".ph\", Continent.Asia),\n C(\"PL\", \"POL\", 616, \"Poland\", \"Polen\", \"Polska\", \"48\", \".pl\", Continent.Europe),\n C(\"PT\", \"PRT\", 620, \"Portugal\", \"Portugal\", \"Portugal\", \"351\", \".pt\", Continent.Europe),\n C(\n \"PR\",\n \"PRI\",\n 630,\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"1\",\n \".pr\",\n Continent.NorthAmerica,\n ),\n C(\"QA\", \"QAT\", 634, \"Qatar\", \"Qatar\", \"قطر\", \"974\", \".qa\", Continent.Asia),\n C(\"RO\", \"ROU\", 642, \"Romania\", \"Rumänien\", \"România\", \"40\", \".ro\", Continent.Europe),\n C(\"RU\", \"RUS\", 643, \"Russia\", \"Ryssland\", \"Россия\", \"7\", \".ru\", Continent.Europe),\n C(\"RW\", \"RWA\", 646, \"Rwanda\", \"Rwanda\", \"Rwanda\", \"250\", \".rw\", Continent.Africa),\n C(\n \"KN\",\n \"KNA\",\n 659,\n \"Saint Kitts and Nevis\",\n \"Saint Kitts och Nevis\",\n \"Saint Kitts and Nevis\",\n \"1\",\n \".kn\",\n Continent.NorthAmerica,\n ),\n C(\n \"LC\",\n \"LCA\",\n 662,\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"1\",\n \".lc\",\n Continent.NorthAmerica,\n ),\n C(\n \"VC\",\n \"VCT\",\n 670,\n \"Saint Vincent and the Grenadines\",\n \"Saint Vincent och Grenadinerna\",\n \"Saint Vincent and the Grenadines\",\n \"1\",\n \".vc\",\n Continent.NorthAmerica,\n ),\n C(\"WS\", \"WSM\", 882, \"Samoa\", \"Samoa\", \"Sāmoa\", \"685\", \".ws\", Continent.Oceania),\n C(\"SM\", \"SMR\", 674, \"San Marino\", \"San Marino\", \"San Marino\", \"378\", \".sm\", Continent.Europe),\n C(\n \"ST\",\n \"STP\",\n 678,\n \"São Tomé and Príncipe\",\n \"São Tomé och Príncipe\",\n \"São Tomé e Príncipe\",\n \"239\",\n \".st\",\n Continent.Africa,\n ),\n C(\"SA\", \"SAU\", 682, \"Saudi Arabia\", \"Saudiarabien\", \"السعودية\", \"966\", \".sa\", Continent.Asia),\n C(\"SN\", \"SEN\", 686, \"Senegal\", \"Senegal\", \"Sénégal\", \"221\", \".sn\", Continent.Africa),\n C(\"RS\", \"SRB\", 688, \"Serbia\", \"Serbien\", \"Србија\", \"381\", \".rs\", Continent.Europe),\n C(\"SC\", \"SYC\", 690, \"Seychelles\", \"Seychellerna\", \"Seychelles\", \"248\", \".sc\", Continent.Africa),\n C(\n \"SL\",\n \"SLE\",\n 694,\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"232\",\n \".sl\",\n Continent.Africa,\n ),\n C(\"SG\", \"SGP\", 702, \"Singapore\", \"Singapore\", \"Singapore\", \"65\", \".sg\", Continent.Asia),\n C(\"SK\", \"SVK\", 703, \"Slovakia\", \"Slovakien\", \"Slovensko\", \"421\", \".sk\", Continent.Europe),\n C(\"SI\", \"SVN\", 705, \"Slovenia\", \"Slovenien\", \"Slovenija\", \"386\", \".si\", Continent.Europe),\n C(\n \"SB\",\n \"SLB\",\n 90,\n \"Solomon Islands\",\n \"Salomonöarna\",\n \"Solomon Islands\",\n \"677\",\n \".sb\",\n Continent.Oceania,\n ),\n C(\"SO\", \"SOM\", 706, \"Somalia\", \"Somalia\", \"Soomaaliya\", \"252\", \".so\", Continent.Africa),\n C(\"ZA\", \"ZAF\", 710, \"South Africa\", \"Sydafrika\", \"Suid-Afrika\", \"27\", \".za\", Continent.Africa),\n C(\"SS\", \"SSD\", 728, \"South Sudan\", \"Sydsudan\", \"South Sudan\", \"211\", \".ss\", Continent.Africa),\n C(\"ES\", \"ESP\", 724, \"Spain\", \"Spanien\", \"España\", \"34\", \".es\", Continent.Europe),\n C(\"LK\", \"LKA\", 144, \"Sri Lanka\", \"Sri Lanka\", \"ශ්රී ලංකාව\", \"94\", \".lk\", Continent.Asia),\n C(\"SD\", \"SDN\", 729, \"Sudan\", \"Sudan\", \"السودان\", \"249\", \".sd\", Continent.Africa),\n C(\"SR\", \"SUR\", 740, \"Suriname\", \"Surinam\", \"Suriname\", \"597\", \".sr\", Continent.SouthAmerica),\n C(\"SE\", \"SWE\", 752, \"Sweden\", \"Sverige\", \"Sverige\", \"46\", \".se\", Continent.Europe),\n C(\"CH\", \"CHE\", 756, \"Switzerland\", \"Schweiz\", \"Schweiz\", \"41\", \".ch\", Continent.Europe),\n C(\"SY\", \"SYR\", 760, \"Syria\", \"Syrien\", \"سوريا\", \"963\", \".sy\", Continent.Asia),\n C(\"TW\", \"TWN\", 158, \"Taiwan\", \"Taiwan\", \"臺灣\", \"886\", \".tw\", Continent.Asia),\n C(\"TJ\", \"TJK\", 762, \"Tajikistan\", \"Tadzjikistan\", \"Тоҷикистон\", \"992\", \".tj\", Continent.Asia),\n C(\"TZ\", \"TZA\", 834, \"Tanzania\", \"Tanzania\", \"Tanzania\", \"255\", \".tz\", Continent.Africa),\n C(\"TH\", \"THA\", 764, \"Thailand\", \"Thailand\", \"ประเทศไทย\", \"66\", \".th\", Continent.Asia),\n C(\"TL\", \"TLS\", 626, \"Timor-Leste\", \"Östtimor\", \"Timor-Leste\", \"670\", \".tl\", Continent.Asia),\n C(\"TG\", \"TGO\", 768, \"Togo\", \"Togo\", \"Togo\", \"228\", \".tg\", Continent.Africa),\n C(\"TO\", \"TON\", 776, \"Tonga\", \"Tonga\", \"Tonga\", \"676\", \".to\", Continent.Oceania),\n C(\n \"TT\",\n \"TTO\",\n 780,\n \"Trinidad and Tobago\",\n \"Trinidad och Tobago\",\n \"Trinidad and Tobago\",\n \"1\",\n \".tt\",\n Continent.NorthAmerica,\n ),\n C(\"TN\", \"TUN\", 788, \"Tunisia\", \"Tunisien\", \"تونس\", \"216\", \".tn\", Continent.Africa),\n C(\"TR\", \"TUR\", 792, \"Turkey\", \"Turkiet\", \"Türkiye\", \"90\", \".tr\", Continent.Asia),\n C(\"TM\", \"TKM\", 795, \"Turkmenistan\", \"Turkmenistan\", \"Türkmenistan\", \"993\", \".tm\", Continent.Asia),\n C(\"TV\", \"TUV\", 798, \"Tuvalu\", \"Tuvalu\", \"Tuvalu\", \"688\", \".tv\", Continent.Oceania),\n C(\"UG\", \"UGA\", 800, \"Uganda\", \"Uganda\", \"Uganda\", \"256\", \".ug\", Continent.Africa),\n C(\"UA\", \"UKR\", 804, \"Ukraine\", \"Ukraina\", \"Україна\", \"380\", \".ua\", Continent.Europe),\n C(\n \"AE\",\n \"ARE\",\n 784,\n \"United Arab Emirates\",\n \"Förenade Arabemiraten\",\n \"الإمارات\",\n \"971\",\n \".ae\",\n Continent.Asia,\n ),\n C(\n \"GB\",\n \"GBR\",\n 826,\n \"United Kingdom\",\n \"Storbritannien\",\n \"United Kingdom\",\n \"44\",\n \".uk\",\n Continent.Europe,\n ),\n C(\n \"US\",\n \"USA\",\n 840,\n \"United States\",\n \"Förenta staterna\",\n \"United States\",\n \"1\",\n \".us\",\n Continent.NorthAmerica,\n ),\n C(\"UY\", \"URY\", 858, \"Uruguay\", \"Uruguay\", \"Uruguay\", \"598\", \".uy\", Continent.SouthAmerica),\n C(\"UZ\", \"UZB\", 860, \"Uzbekistan\", \"Uzbekistan\", \"Oʻzbekiston\", \"998\", \".uz\", Continent.Asia),\n C(\"VU\", \"VUT\", 548, \"Vanuatu\", \"Vanuatu\", \"Vanuatu\", \"678\", \".vu\", Continent.Oceania),\n C(\n \"VA\",\n \"VAT\",\n 336,\n \"Vatican City\",\n \"Vatikanstaten\",\n \"Città del Vaticano\",\n \"379\",\n \".va\",\n Continent.Europe,\n ),\n C(\"VE\", \"VEN\", 862, \"Venezuela\", \"Venezuela\", \"Venezuela\", \"58\", \".ve\", Continent.SouthAmerica),\n C(\"VN\", \"VNM\", 704, \"Vietnam\", \"Vietnam\", \"Việt Nam\", \"84\", \".vn\", Continent.Asia),\n C(\"YE\", \"YEM\", 887, \"Yemen\", \"Jemen\", \"اليمن\", \"967\", \".ye\", Continent.Asia),\n C(\"ZM\", \"ZMB\", 894, \"Zambia\", \"Zambia\", \"Zambia\", \"260\", \".zm\", Continent.Africa),\n C(\"ZW\", \"ZWE\", 716, \"Zimbabwe\", \"Zimbabwe\", \"Zimbabwe\", \"263\", \".zw\", Continent.Africa),\n C(\"AX\", \"ALA\", 248, \"Åland Islands\", \"Åland\", \"Åland\", \"358\", \".ax\", Continent.Europe),\n C(\"FO\", \"FRO\", 234, \"Faroe Islands\", \"Färöarna\", \"Føroyar\", \"298\", \".fo\", Continent.Europe),\n C(\"XK\", \"XKX\", 0, \"Kosovo\", \"Kosovo\", \"Kosova\", \"383\", \".xk\", Continent.Europe),\n];\n","/** Geographic coordinates (latitude, longitude) for each country, sourced from Wikidata P625. */\nexport const COUNTRY_COORDINATES: Readonly<Record<string, readonly [number, number]>> =\n Object.freeze({\n AF: [33.0, 65.0],\n AL: [41.0, 20.0],\n DZ: [28.0, 3.0],\n AS: [-14.27, -170.7],\n AD: [42.5, 1.5],\n AO: [-12.5, 18.5],\n AG: [17.05, -61.8],\n AR: [-34.0, -64.0],\n AM: [40.0, 45.0],\n AW: [12.5, -69.97],\n AU: [-27.0, 133.0],\n AT: [47.33, 13.33],\n AZ: [40.5, 47.5],\n BS: [24.25, -76.0],\n BH: [26.0, 50.55],\n BD: [24.0, 90.0],\n BB: [13.17, -59.53],\n BY: [53.0, 28.0],\n BE: [50.83, 4.0],\n BZ: [17.25, -88.75],\n BJ: [9.5, 2.25],\n BM: [32.33, -64.75],\n BT: [27.5, 90.5],\n BO: [-17.0, -65.0],\n BA: [44.0, 18.0],\n BW: [-22.0, 24.0],\n BR: [-10.0, -55.0],\n BN: [4.5, 114.67],\n BG: [43.0, 25.0],\n BF: [13.0, -2.0],\n BI: [-3.5, 30.0],\n CV: [16.0, -24.0],\n KH: [13.0, 105.0],\n CM: [6.0, 12.0],\n CA: [60.0, -95.0],\n CF: [7.0, 21.0],\n TD: [15.0, 19.0],\n CL: [-30.0, -71.0],\n CN: [35.0, 105.0],\n CO: [4.0, -72.0],\n KM: [-12.17, 44.25],\n CG: [-1.0, 15.0],\n CD: [0.0, 25.0],\n CR: [10.0, -84.0],\n CI: [8.0, -5.0],\n HR: [45.17, 15.5],\n CU: [21.5, -80.0],\n CW: [12.17, -68.98],\n CY: [35.0, 33.0],\n CZ: [49.75, 15.5],\n DK: [56.0, 10.0],\n DJ: [11.5, 43.0],\n DM: [15.42, -61.33],\n DO: [19.0, -70.67],\n EC: [-2.0, -77.5],\n EG: [27.0, 30.0],\n SV: [13.83, -88.92],\n GQ: [2.0, 10.0],\n ER: [15.0, 39.0],\n EE: [59.0, 26.0],\n SZ: [-26.5, 31.5],\n ET: [8.0, 38.0],\n FJ: [-18.0, 175.0],\n FI: [64.0, 26.0],\n FR: [46.0, 2.0],\n GA: [-1.0, 11.75],\n GM: [13.47, -16.57],\n GE: [42.0, 43.5],\n DE: [51.0, 9.0],\n GH: [8.0, -2.0],\n GI: [36.13, -5.35],\n GR: [39.0, 22.0],\n GL: [72.0, -40.0],\n GD: [12.12, -61.67],\n GU: [13.47, 144.78],\n GT: [15.5, -90.25],\n GG: [49.45, -2.54],\n GN: [11.0, -10.0],\n GW: [12.0, -15.0],\n GY: [5.0, -59.0],\n HT: [19.0, -72.42],\n HN: [15.0, -86.5],\n HK: [22.25, 114.17],\n HU: [47.0, 20.0],\n IS: [65.0, -18.0],\n IN: [20.0, 77.0],\n ID: [-5.0, 120.0],\n IR: [32.0, 53.0],\n IQ: [33.0, 44.0],\n IE: [53.0, -8.0],\n IM: [54.23, -4.55],\n IL: [31.5, 34.75],\n IT: [42.83, 12.83],\n JM: [18.25, -77.5],\n JP: [36.0, 138.0],\n JE: [49.21, -2.13],\n JO: [31.0, 36.0],\n KZ: [48.0, 68.0],\n KE: [1.0, 38.0],\n KI: [1.42, 173.0],\n KP: [40.0, 127.0],\n KR: [37.0, 127.5],\n KW: [29.34, 47.66],\n KG: [41.0, 75.0],\n LA: [18.0, 105.0],\n LV: [57.0, 25.0],\n LB: [33.83, 35.83],\n LS: [-29.5, 28.5],\n LR: [6.5, -9.5],\n LY: [25.0, 17.0],\n LI: [47.17, 9.53],\n LT: [56.0, 24.0],\n LU: [49.75, 6.17],\n MO: [22.17, 113.55],\n MG: [-20.0, 47.0],\n MW: [-13.5, 34.0],\n MY: [2.5, 112.5],\n MV: [3.25, 73.0],\n ML: [17.0, -4.0],\n MT: [35.83, 14.58],\n MH: [9.0, 168.0],\n MR: [20.0, -12.0],\n MU: [-20.28, 57.55],\n MX: [23.0, -102.0],\n FM: [6.92, 158.25],\n MD: [47.0, 29.0],\n MC: [43.73, 7.42],\n MN: [46.0, 105.0],\n ME: [42.0, 19.0],\n MA: [32.0, -5.0],\n MZ: [-18.25, 35.0],\n MM: [22.0, 98.0],\n NA: [-22.0, 17.0],\n NR: [-0.53, 166.92],\n NP: [28.0, 84.0],\n NL: [52.5, 5.75],\n NZ: [-41.0, 174.0],\n NI: [13.0, -85.0],\n NE: [16.0, 8.0],\n NG: [10.0, 8.0],\n MK: [41.83, 22.0],\n NO: [62.0, 10.0],\n OM: [21.0, 57.0],\n PK: [30.0, 70.0],\n PW: [7.5, 134.5],\n PS: [32.0, 35.25],\n PA: [9.0, -80.0],\n PG: [-6.0, 147.0],\n PY: [-23.0, -58.0],\n PE: [-10.0, -76.0],\n PH: [13.0, 122.0],\n PL: [52.0, 20.0],\n PT: [39.5, -8.0],\n PR: [18.25, -66.5],\n QA: [25.5, 51.25],\n RO: [46.0, 25.0],\n RU: [60.0, 100.0],\n RW: [-2.0, 30.0],\n KN: [17.33, -62.75],\n LC: [13.88, -61.13],\n VC: [13.25, -61.2],\n WS: [-13.58, -172.33],\n SM: [43.77, 12.42],\n ST: [1.0, 7.0],\n SA: [25.0, 45.0],\n SN: [14.0, -14.0],\n RS: [44.0, 21.0],\n SC: [-4.58, 55.67],\n SL: [8.5, -11.5],\n SG: [1.37, 103.8],\n SK: [48.67, 19.5],\n SI: [46.12, 14.82],\n SB: [-8.0, 159.0],\n SO: [10.0, 49.0],\n ZA: [-29.0, 24.0],\n SS: [8.0, 30.0],\n ES: [40.0, -4.0],\n LK: [7.0, 81.0],\n SD: [15.0, 30.0],\n SR: [4.0, -56.0],\n SE: [62.0, 15.0],\n CH: [47.0, 8.0],\n SY: [35.0, 38.0],\n TW: [23.5, 121.0],\n TJ: [39.0, 71.0],\n TZ: [-6.0, 35.0],\n TH: [15.0, 100.0],\n TL: [-8.55, 125.73],\n TG: [8.0, 1.17],\n TO: [-20.0, -175.0],\n TT: [11.0, -61.0],\n TN: [34.0, 9.0],\n TR: [39.0, 35.0],\n TM: [40.0, 60.0],\n TV: [-8.0, 178.0],\n UG: [1.0, 32.0],\n UA: [49.0, 32.0],\n AE: [24.0, 54.0],\n GB: [54.0, -2.0],\n US: [38.0, -97.0],\n UY: [-33.0, -56.0],\n UZ: [41.0, 64.0],\n VU: [-16.0, 167.0],\n VA: [41.9, 12.45],\n VE: [8.0, -66.0],\n VN: [16.0, 106.0],\n YE: [15.0, 48.0],\n ZM: [-15.0, 30.0],\n ZW: [-20.0, 30.0],\n AX: [60.12, 19.9],\n FO: [62.0, -7.0],\n XK: [42.67, 21.17],\n } as const);\n","import { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\ninterface RawCapital {\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst RAW: Readonly<Record<string, RawCapital>> = {\n AF: { en: \"Kabul\", sv: \"Kabul\", native: \"کابل\", lat: 34.53, lon: 69.17 },\n AL: { en: \"Tirana\", sv: \"Tirana\", native: \"Tiranë\", lat: 41.33, lon: 19.82 },\n DZ: { en: \"Algiers\", sv: \"Alger\", native: \"الجزائر\", lat: 36.75, lon: 3.04 },\n AD: {\n en: \"Andorra la Vella\",\n sv: \"Andorra la Vella\",\n native: \"Andorra la Vella\",\n lat: 42.51,\n lon: 1.52,\n },\n AO: { en: \"Luanda\", sv: \"Luanda\", native: \"Luanda\", lat: -8.84, lon: 13.23 },\n AG: { en: \"St. John's\", sv: \"Saint John's\", native: \"St. John's\", lat: 17.12, lon: -61.85 },\n AR: { en: \"Buenos Aires\", sv: \"Buenos Aires\", native: \"Buenos Aires\", lat: -34.61, lon: -58.38 },\n AM: { en: \"Yerevan\", sv: \"Jerevan\", native: \"Երևան\", lat: 40.18, lon: 44.51 },\n AU: { en: \"Canberra\", sv: \"Canberra\", native: \"Canberra\", lat: -35.28, lon: 149.13 },\n AT: { en: \"Vienna\", sv: \"Wien\", native: \"Wien\", lat: 48.21, lon: 16.37 },\n AZ: { en: \"Baku\", sv: \"Baku\", native: \"Bakı\", lat: 40.41, lon: 49.87 },\n BS: { en: \"Nassau\", sv: \"Nassau\", native: \"Nassau\", lat: 25.06, lon: -77.34 },\n BH: { en: \"Manama\", sv: \"Manama\", native: \"المنامة\", lat: 26.23, lon: 50.59 },\n BD: { en: \"Dhaka\", sv: \"Dhaka\", native: \"ঢাকা\", lat: 23.71, lon: 90.41 },\n BB: { en: \"Bridgetown\", sv: \"Bridgetown\", native: \"Bridgetown\", lat: 13.1, lon: -59.62 },\n BY: { en: \"Minsk\", sv: \"Minsk\", native: \"Мінск\", lat: 53.9, lon: 27.57 },\n BE: { en: \"Brussels\", sv: \"Bryssel\", native: \"Bruxelles\", lat: 50.85, lon: 4.35 },\n BZ: { en: \"Belmopan\", sv: \"Belmopan\", native: \"Belmopan\", lat: 17.25, lon: -88.77 },\n BJ: { en: \"Porto-Novo\", sv: \"Porto-Novo\", native: \"Porto-Novo\", lat: 6.5, lon: 2.6 },\n BT: { en: \"Thimphu\", sv: \"Thimphu\", native: \"ཐིམ་ཕུ\", lat: 27.47, lon: 89.64 },\n BO: { en: \"Sucre\", sv: \"Sucre\", native: \"Sucre\", lat: -19.04, lon: -65.26 },\n BA: { en: \"Sarajevo\", sv: \"Sarajevo\", native: \"Sarajevo\", lat: 43.86, lon: 18.41 },\n BW: { en: \"Gaborone\", sv: \"Gaborone\", native: \"Gaborone\", lat: -24.65, lon: 25.91 },\n BR: { en: \"Brasília\", sv: \"Brasília\", native: \"Brasília\", lat: -15.79, lon: -47.88 },\n BN: {\n en: \"Bandar Seri Begawan\",\n sv: \"Bandar Seri Begawan\",\n native: \"Bandar Seri Begawan\",\n lat: 4.94,\n lon: 114.95,\n },\n BG: { en: \"Sofia\", sv: \"Sofia\", native: \"София\", lat: 42.7, lon: 23.32 },\n BF: { en: \"Ouagadougou\", sv: \"Ouagadougou\", native: \"Ouagadougou\", lat: 12.37, lon: -1.52 },\n BI: { en: \"Gitega\", sv: \"Gitega\", native: \"Gitega\", lat: -3.43, lon: 29.93 },\n CV: { en: \"Praia\", sv: \"Praia\", native: \"Praia\", lat: 14.92, lon: -23.51 },\n KH: { en: \"Phnom Penh\", sv: \"Phnom Penh\", native: \"ភ្នំពេញ\", lat: 11.56, lon: 104.93 },\n CM: { en: \"Yaoundé\", sv: \"Yaoundé\", native: \"Yaoundé\", lat: 3.87, lon: 11.52 },\n CA: { en: \"Ottawa\", sv: \"Ottawa\", native: \"Ottawa\", lat: 45.42, lon: -75.7 },\n CF: { en: \"Bangui\", sv: \"Bangui\", native: \"Bangui\", lat: 4.37, lon: 18.59 },\n TD: { en: \"N'Djamena\", sv: \"N'Djamena\", native: \"N'Djamena\", lat: 12.11, lon: 15.05 },\n CL: { en: \"Santiago\", sv: \"Santiago\", native: \"Santiago\", lat: -33.45, lon: -70.67 },\n CN: { en: \"Beijing\", sv: \"Peking\", native: \"北京\", lat: 39.91, lon: 116.39 },\n CO: { en: \"Bogotá\", sv: \"Bogotá\", native: \"Bogotá\", lat: 4.71, lon: -74.07 },\n KM: { en: \"Moroni\", sv: \"Moroni\", native: \"Moroni\", lat: -11.7, lon: 43.26 },\n CG: { en: \"Brazzaville\", sv: \"Brazzaville\", native: \"Brazzaville\", lat: -4.27, lon: 15.28 },\n CD: { en: \"Kinshasa\", sv: \"Kinshasa\", native: \"Kinshasa\", lat: -4.32, lon: 15.31 },\n CR: { en: \"San José\", sv: \"San José\", native: \"San José\", lat: 9.93, lon: -84.08 },\n CI: { en: \"Yamoussoukro\", sv: \"Yamoussoukro\", native: \"Yamoussoukro\", lat: 6.82, lon: -5.28 },\n HR: { en: \"Zagreb\", sv: \"Zagreb\", native: \"Zagreb\", lat: 45.81, lon: 15.98 },\n CU: { en: \"Havana\", sv: \"Havanna\", native: \"La Habana\", lat: 23.13, lon: -82.38 },\n CY: { en: \"Nicosia\", sv: \"Nicosia\", native: \"Λευκωσία\", lat: 35.17, lon: 33.37 },\n CZ: { en: \"Prague\", sv: \"Prag\", native: \"Praha\", lat: 50.09, lon: 14.42 },\n DK: { en: \"Copenhagen\", sv: \"Köpenhamn\", native: \"København\", lat: 55.68, lon: 12.57 },\n DJ: { en: \"Djibouti\", sv: \"Djibouti\", native: \"Djibouti\", lat: 11.59, lon: 43.15 },\n DM: { en: \"Roseau\", sv: \"Roseau\", native: \"Roseau\", lat: 15.3, lon: -61.39 },\n DO: { en: \"Santo Domingo\", sv: \"Santo Domingo\", native: \"Santo Domingo\", lat: 18.47, lon: -69.9 },\n EC: { en: \"Quito\", sv: \"Quito\", native: \"Quito\", lat: -0.18, lon: -78.47 },\n EG: { en: \"Cairo\", sv: \"Kairo\", native: \"القاهرة\", lat: 30.04, lon: 31.24 },\n SV: { en: \"San Salvador\", sv: \"San Salvador\", native: \"San Salvador\", lat: 13.69, lon: -89.19 },\n GQ: { en: \"Malabo\", sv: \"Malabo\", native: \"Malabo\", lat: 3.75, lon: 8.78 },\n ER: { en: \"Asmara\", sv: \"Asmara\", native: \"ኣስመራ\", lat: 15.33, lon: 38.93 },\n EE: { en: \"Tallinn\", sv: \"Tallinn\", native: \"Tallinn\", lat: 59.44, lon: 24.75 },\n SZ: { en: \"Mbabane\", sv: \"Mbabane\", native: \"Mbabane\", lat: -26.32, lon: 31.13 },\n ET: { en: \"Addis Ababa\", sv: \"Addis Abeba\", native: \"አዲስ አበባ\", lat: 9.02, lon: 38.75 },\n FJ: { en: \"Suva\", sv: \"Suva\", native: \"Suva\", lat: -18.14, lon: 178.44 },\n FI: { en: \"Helsinki\", sv: \"Helsingfors\", native: \"Helsinki\", lat: 60.17, lon: 24.94 },\n FR: { en: \"Paris\", sv: \"Paris\", native: \"Paris\", lat: 48.86, lon: 2.35 },\n GA: { en: \"Libreville\", sv: \"Libreville\", native: \"Libreville\", lat: 0.39, lon: 9.45 },\n GM: { en: \"Banjul\", sv: \"Banjul\", native: \"Banjul\", lat: 13.45, lon: -16.58 },\n GE: { en: \"Tbilisi\", sv: \"Tbilisi\", native: \"თბილისი\", lat: 41.69, lon: 44.8 },\n DE: { en: \"Berlin\", sv: \"Berlin\", native: \"Berlin\", lat: 52.52, lon: 13.41 },\n GH: { en: \"Accra\", sv: \"Accra\", native: \"Accra\", lat: 5.56, lon: -0.19 },\n GR: { en: \"Athens\", sv: \"Aten\", native: \"Αθήνα\", lat: 37.98, lon: 23.73 },\n GD: { en: \"St. George's\", sv: \"Saint George's\", native: \"St. George's\", lat: 12.05, lon: -61.75 },\n GT: {\n en: \"Guatemala City\",\n sv: \"Guatemala City\",\n native: \"Ciudad de Guatemala\",\n lat: 14.63,\n lon: -90.51,\n },\n GN: { en: \"Conakry\", sv: \"Conakry\", native: \"Conakry\", lat: 9.54, lon: -13.68 },\n GW: { en: \"Bissau\", sv: \"Bissau\", native: \"Bissau\", lat: 11.86, lon: -15.6 },\n GY: { en: \"Georgetown\", sv: \"Georgetown\", native: \"Georgetown\", lat: 6.8, lon: -58.16 },\n HT: { en: \"Port-au-Prince\", sv: \"Port-au-Prince\", native: \"Pòtoprens\", lat: 18.54, lon: -72.34 },\n HN: { en: \"Tegucigalpa\", sv: \"Tegucigalpa\", native: \"Tegucigalpa\", lat: 14.1, lon: -87.22 },\n HK: { en: \"Hong Kong\", sv: \"Hongkong\", native: \"香港\", lat: 22.28, lon: 114.16 },\n HU: { en: \"Budapest\", sv: \"Budapest\", native: \"Budapest\", lat: 47.5, lon: 19.04 },\n IS: { en: \"Reykjavik\", sv: \"Reykjavik\", native: \"Reykjavík\", lat: 64.14, lon: -21.9 },\n IN: { en: \"New Delhi\", sv: \"New Delhi\", native: \"नई दिल्ली\", lat: 28.61, lon: 77.21 },\n ID: { en: \"Jakarta\", sv: \"Jakarta\", native: \"Jakarta\", lat: -6.21, lon: 106.85 },\n IR: { en: \"Tehran\", sv: \"Teheran\", native: \"تهران\", lat: 35.69, lon: 51.39 },\n IQ: { en: \"Baghdad\", sv: \"Bagdad\", native: \"بغداد\", lat: 33.34, lon: 44.4 },\n IE: { en: \"Dublin\", sv: \"Dublin\", native: \"Baile Átha Cliath\", lat: 53.35, lon: -6.26 },\n IL: { en: \"Jerusalem\", sv: \"Jerusalem\", native: \"ירושלים\", lat: 31.77, lon: 35.23 },\n IT: { en: \"Rome\", sv: \"Rom\", native: \"Roma\", lat: 41.9, lon: 12.5 },\n JM: { en: \"Kingston\", sv: \"Kingston\", native: \"Kingston\", lat: 18.0, lon: -76.79 },\n JP: { en: \"Tokyo\", sv: \"Tokyo\", native: \"東京\", lat: 35.68, lon: 139.69 },\n JO: { en: \"Amman\", sv: \"Amman\", native: \"عمّان\", lat: 31.95, lon: 35.93 },\n KZ: { en: \"Astana\", sv: \"Astana\", native: \"Астана\", lat: 51.17, lon: 71.43 },\n KE: { en: \"Nairobi\", sv: \"Nairobi\", native: \"Nairobi\", lat: -1.29, lon: 36.82 },\n KI: { en: \"Tarawa\", sv: \"Tarawa\", native: \"Tarawa\", lat: 1.45, lon: 173.0 },\n KP: { en: \"Pyongyang\", sv: \"Pyongyang\", native: \"평양\", lat: 39.02, lon: 125.75 },\n KR: { en: \"Seoul\", sv: \"Seoul\", native: \"서울\", lat: 37.57, lon: 126.98 },\n KW: { en: \"Kuwait City\", sv: \"Kuwait City\", native: \"مدينة الكويت\", lat: 29.37, lon: 47.98 },\n KG: { en: \"Bishkek\", sv: \"Bisjkek\", native: \"Бишкек\", lat: 42.87, lon: 74.59 },\n LA: { en: \"Vientiane\", sv: \"Vientiane\", native: \"ວຽງຈັນ\", lat: 17.97, lon: 102.63 },\n LV: { en: \"Riga\", sv: \"Riga\", native: \"Rīga\", lat: 56.95, lon: 24.11 },\n LB: { en: \"Beirut\", sv: \"Beirut\", native: \"بيروت\", lat: 33.89, lon: 35.5 },\n LS: { en: \"Maseru\", sv: \"Maseru\", native: \"Maseru\", lat: -29.31, lon: 27.48 },\n LR: { en: \"Monrovia\", sv: \"Monrovia\", native: \"Monrovia\", lat: 6.3, lon: -10.8 },\n LY: { en: \"Tripoli\", sv: \"Tripoli\", native: \"طرابلس\", lat: 32.9, lon: 13.18 },\n LI: { en: \"Vaduz\", sv: \"Vaduz\", native: \"Vaduz\", lat: 47.14, lon: 9.52 },\n LT: { en: \"Vilnius\", sv: \"Vilnius\", native: \"Vilnius\", lat: 54.69, lon: 25.28 },\n LU: { en: \"Luxembourg City\", sv: \"Luxemburg\", native: \"Lëtzebuerg\", lat: 49.61, lon: 6.13 },\n MO: { en: \"Macao\", sv: \"Macao\", native: \"澳門\", lat: 22.2, lon: 113.54 },\n MG: { en: \"Antananarivo\", sv: \"Antananarivo\", native: \"Antananarivo\", lat: -18.91, lon: 47.53 },\n MW: { en: \"Lilongwe\", sv: \"Lilongwe\", native: \"Lilongwe\", lat: -13.97, lon: 33.79 },\n MY: { en: \"Kuala Lumpur\", sv: \"Kuala Lumpur\", native: \"Kuala Lumpur\", lat: 3.14, lon: 101.69 },\n MV: { en: \"Malé\", sv: \"Malé\", native: \"މާލެ\", lat: 4.18, lon: 73.51 },\n ML: { en: \"Bamako\", sv: \"Bamako\", native: \"Bamako\", lat: 12.65, lon: -8.0 },\n MT: { en: \"Valletta\", sv: \"Valletta\", native: \"Valletta\", lat: 35.9, lon: 14.51 },\n MH: { en: \"Majuro\", sv: \"Majuro\", native: \"Majuro\", lat: 7.09, lon: 171.38 },\n MR: { en: \"Nouakchott\", sv: \"Nouakchott\", native: \"نواكشوط\", lat: 18.09, lon: -15.98 },\n MU: { en: \"Port Louis\", sv: \"Port Louis\", native: \"Port Louis\", lat: -20.16, lon: 57.5 },\n MX: { en: \"Mexico City\", sv: \"Mexico City\", native: \"Ciudad de México\", lat: 19.43, lon: -99.13 },\n FM: { en: \"Palikir\", sv: \"Palikir\", native: \"Palikir\", lat: 6.92, lon: 158.16 },\n MD: { en: \"Chișinău\", sv: \"Chișinău\", native: \"Chișinău\", lat: 47.01, lon: 28.86 },\n MC: { en: \"Monaco\", sv: \"Monaco\", native: \"Monaco\", lat: 43.73, lon: 7.42 },\n MN: { en: \"Ulaanbaatar\", sv: \"Ulaanbaatar\", native: \"Улаанбаатар\", lat: 47.91, lon: 106.91 },\n ME: { en: \"Podgorica\", sv: \"Podgorica\", native: \"Podgorica\", lat: 42.44, lon: 19.26 },\n MA: { en: \"Rabat\", sv: \"Rabat\", native: \"الرباط\", lat: 34.01, lon: -6.84 },\n MZ: { en: \"Maputo\", sv: \"Maputo\", native: \"Maputo\", lat: -25.97, lon: 32.57 },\n MM: { en: \"Naypyidaw\", sv: \"Naypyidaw\", native: \"နေပြည်တော်\", lat: 19.76, lon: 96.07 },\n NA: { en: \"Windhoek\", sv: \"Windhoek\", native: \"Windhoek\", lat: -22.57, lon: 17.08 },\n NR: { en: \"Yaren\", sv: \"Yaren\", native: \"Yaren\", lat: -0.55, lon: 166.93 },\n NP: { en: \"Kathmandu\", sv: \"Kathmandu\", native: \"काठमाडौं\", lat: 27.7, lon: 85.32 },\n NL: { en: \"Amsterdam\", sv: \"Amsterdam\", native: \"Amsterdam\", lat: 52.37, lon: 4.9 },\n NZ: { en: \"Wellington\", sv: \"Wellington\", native: \"Wellington\", lat: -41.29, lon: 174.78 },\n NI: { en: \"Managua\", sv: \"Managua\", native: \"Managua\", lat: 12.15, lon: -86.27 },\n NE: { en: \"Niamey\", sv: \"Niamey\", native: \"Niamey\", lat: 13.51, lon: 2.11 },\n NG: { en: \"Abuja\", sv: \"Abuja\", native: \"Abuja\", lat: 9.06, lon: 7.49 },\n MK: { en: \"Skopje\", sv: \"Skopje\", native: \"Скопје\", lat: 42.0, lon: 21.43 },\n NO: { en: \"Oslo\", sv: \"Oslo\", native: \"Oslo\", lat: 59.91, lon: 10.75 },\n OM: { en: \"Muscat\", sv: \"Muskat\", native: \"مسقط\", lat: 23.59, lon: 58.54 },\n PK: { en: \"Islamabad\", sv: \"Islamabad\", native: \"اسلام آباد\", lat: 33.69, lon: 73.04 },\n PW: { en: \"Ngerulmud\", sv: \"Ngerulmud\", native: \"Ngerulmud\", lat: 7.5, lon: 134.62 },\n PS: { en: \"Ramallah\", sv: \"Ramallah\", native: \"رام الله\", lat: 31.9, lon: 35.2 },\n PA: { en: \"Panama City\", sv: \"Panama City\", native: \"Ciudad de Panamá\", lat: 8.98, lon: -79.52 },\n PG: { en: \"Port Moresby\", sv: \"Port Moresby\", native: \"Port Moresby\", lat: -9.48, lon: 147.15 },\n PY: { en: \"Asunción\", sv: \"Asunción\", native: \"Asunción\", lat: -25.26, lon: -57.58 },\n PE: { en: \"Lima\", sv: \"Lima\", native: \"Lima\", lat: -12.05, lon: -77.04 },\n PH: { en: \"Manila\", sv: \"Manila\", native: \"Maynila\", lat: 14.6, lon: 120.98 },\n PL: { en: \"Warsaw\", sv: \"Warszawa\", native: \"Warszawa\", lat: 52.23, lon: 21.01 },\n PT: { en: \"Lisbon\", sv: \"Lissabon\", native: \"Lisboa\", lat: 38.72, lon: -9.14 },\n PR: { en: \"San Juan\", sv: \"San Juan\", native: \"San Juan\", lat: 18.47, lon: -66.11 },\n QA: { en: \"Doha\", sv: \"Doha\", native: \"الدوحة\", lat: 25.29, lon: 51.53 },\n RO: { en: \"Bucharest\", sv: \"Bukarest\", native: \"București\", lat: 44.43, lon: 26.1 },\n RU: { en: \"Moscow\", sv: \"Moskva\", native: \"Москва\", lat: 55.76, lon: 37.62 },\n RW: { en: \"Kigali\", sv: \"Kigali\", native: \"Kigali\", lat: -1.94, lon: 30.06 },\n KN: { en: \"Basseterre\", sv: \"Basseterre\", native: \"Basseterre\", lat: 17.3, lon: -62.72 },\n LC: { en: \"Castries\", sv: \"Castries\", native: \"Castries\", lat: 14.01, lon: -61.0 },\n VC: { en: \"Kingstown\", sv: \"Kingstown\", native: \"Kingstown\", lat: 13.15, lon: -61.22 },\n WS: { en: \"Apia\", sv: \"Apia\", native: \"Apia\", lat: -13.83, lon: -171.76 },\n SM: { en: \"San Marino\", sv: \"San Marino\", native: \"San Marino\", lat: 43.94, lon: 12.45 },\n ST: { en: \"São Tomé\", sv: \"São Tomé\", native: \"São Tomé\", lat: 0.34, lon: 6.73 },\n SA: { en: \"Riyadh\", sv: \"Riyadh\", native: \"الرياض\", lat: 24.69, lon: 46.72 },\n SN: { en: \"Dakar\", sv: \"Dakar\", native: \"Dakar\", lat: 14.69, lon: -17.44 },\n RS: { en: \"Belgrade\", sv: \"Belgrad\", native: \"Београд\", lat: 44.82, lon: 20.46 },\n SC: { en: \"Victoria\", sv: \"Victoria\", native: \"Victoria\", lat: -4.62, lon: 55.45 },\n SL: { en: \"Freetown\", sv: \"Freetown\", native: \"Freetown\", lat: 8.48, lon: -13.23 },\n SG: { en: \"Singapore\", sv: \"Singapore\", native: \"Singapore\", lat: 1.29, lon: 103.85 },\n SK: { en: \"Bratislava\", sv: \"Bratislava\", native: \"Bratislava\", lat: 48.14, lon: 17.11 },\n SI: { en: \"Ljubljana\", sv: \"Ljubljana\", native: \"Ljubljana\", lat: 46.05, lon: 14.51 },\n SB: { en: \"Honiara\", sv: \"Honiara\", native: \"Honiara\", lat: -9.43, lon: 159.96 },\n SO: { en: \"Mogadishu\", sv: \"Mogadishu\", native: \"Muqdisho\", lat: 2.05, lon: 45.32 },\n ZA: { en: \"Pretoria\", sv: \"Pretoria\", native: \"Pretoria\", lat: -25.75, lon: 28.19 },\n SS: { en: \"Juba\", sv: \"Juba\", native: \"Juba\", lat: 4.85, lon: 31.58 },\n ES: { en: \"Madrid\", sv: \"Madrid\", native: \"Madrid\", lat: 40.42, lon: -3.7 },\n LK: {\n en: \"Sri Jayawardenepura Kotte\",\n sv: \"Sri Jayawardenepura Kotte\",\n native: \"ශ්රී ජයවර්ධනපුර කෝට්ටේ\",\n lat: 6.89,\n lon: 79.92,\n },\n SD: { en: \"Khartoum\", sv: \"Khartoum\", native: \"الخرطوم\", lat: 15.59, lon: 32.53 },\n SR: { en: \"Paramaribo\", sv: \"Paramaribo\", native: \"Paramaribo\", lat: 5.83, lon: -55.17 },\n SE: { en: \"Stockholm\", sv: \"Stockholm\", native: \"Stockholm\", lat: 59.33, lon: 18.07 },\n CH: { en: \"Bern\", sv: \"Bern\", native: \"Bern\", lat: 46.95, lon: 7.45 },\n SY: { en: \"Damascus\", sv: \"Damaskus\", native: \"دمشق\", lat: 33.51, lon: 36.29 },\n TW: { en: \"Taipei\", sv: \"Taipei\", native: \"臺北\", lat: 25.03, lon: 121.57 },\n TJ: { en: \"Dushanbe\", sv: \"Dusjanbe\", native: \"Душанбе\", lat: 38.56, lon: 68.77 },\n TZ: { en: \"Dodoma\", sv: \"Dodoma\", native: \"Dodoma\", lat: -6.16, lon: 35.75 },\n TH: { en: \"Bangkok\", sv: \"Bangkok\", native: \"กรุงเทพมหานคร\", lat: 13.76, lon: 100.5 },\n TL: { en: \"Dili\", sv: \"Dili\", native: \"Dili\", lat: -8.56, lon: 125.57 },\n TG: { en: \"Lomé\", sv: \"Lomé\", native: \"Lomé\", lat: 6.14, lon: 1.21 },\n TO: { en: \"Nukuʻalofa\", sv: \"Nukuʻalofa\", native: \"Nukuʻalofa\", lat: -21.21, lon: -175.2 },\n TT: {\n en: \"Port of Spain\",\n sv: \"Port of Spain\",\n native: \"Port of Spain\",\n lat: 10.66,\n lon: -61.51,\n },\n TN: { en: \"Tunis\", sv: \"Tunis\", native: \"تونس\", lat: 36.81, lon: 10.17 },\n TR: { en: \"Ankara\", sv: \"Ankara\", native: \"Ankara\", lat: 39.93, lon: 32.86 },\n TM: { en: \"Ashgabat\", sv: \"Asjchabad\", native: \"Aşgabat\", lat: 37.95, lon: 58.38 },\n TV: { en: \"Funafuti\", sv: \"Funafuti\", native: \"Funafuti\", lat: -8.52, lon: 179.2 },\n UG: { en: \"Kampala\", sv: \"Kampala\", native: \"Kampala\", lat: 0.31, lon: 32.58 },\n UA: { en: \"Kyiv\", sv: \"Kiev\", native: \"Київ\", lat: 50.45, lon: 30.52 },\n AE: { en: \"Abu Dhabi\", sv: \"Abu Dhabi\", native: \"أبو ظبي\", lat: 24.45, lon: 54.65 },\n GB: { en: \"London\", sv: \"London\", native: \"London\", lat: 51.51, lon: -0.13 },\n US: {\n en: \"Washington, D.C.\",\n sv: \"Washington, D.C.\",\n native: \"Washington, D.C.\",\n lat: 38.9,\n lon: -77.04,\n },\n UY: { en: \"Montevideo\", sv: \"Montevideo\", native: \"Montevideo\", lat: -34.88, lon: -56.19 },\n UZ: { en: \"Tashkent\", sv: \"Tasjkent\", native: \"Toshkent\", lat: 41.3, lon: 69.28 },\n VU: { en: \"Port Vila\", sv: \"Port Vila\", native: \"Port Vila\", lat: -17.74, lon: 168.31 },\n VA: {\n en: \"Vatican City\",\n sv: \"Vatikanstaden\",\n native: \"Città del Vaticano\",\n lat: 41.9,\n lon: 12.45,\n },\n VE: { en: \"Caracas\", sv: \"Caracas\", native: \"Caracas\", lat: 10.49, lon: -66.9 },\n VN: { en: \"Hanoi\", sv: \"Hanoi\", native: \"Hà Nội\", lat: 21.03, lon: 105.85 },\n YE: { en: \"Sana'a\", sv: \"Sana'a\", native: \"صنعاء\", lat: 15.35, lon: 44.21 },\n ZM: { en: \"Lusaka\", sv: \"Lusaka\", native: \"Lusaka\", lat: -15.39, lon: 28.32 },\n ZW: { en: \"Harare\", sv: \"Harare\", native: \"Harare\", lat: -17.83, lon: 31.05 },\n AX: { en: \"Mariehamn\", sv: \"Mariehamn\", native: \"Mariehamn\", lat: 60.1, lon: 19.94 },\n FO: { en: \"Tórshavn\", sv: \"Torshamn\", native: \"Tórshavn\", lat: 62.01, lon: -6.77 },\n XK: { en: \"Pristina\", sv: \"Pristina\", native: \"Prishtinë\", lat: 42.66, lon: 21.17 },\n GI: { en: \"Gibraltar\", sv: \"Gibraltar\", native: \"Gibraltar\", lat: 36.14, lon: -5.35 },\n GL: { en: \"Nuuk\", sv: \"Nuuk\", native: \"Nuuk\", lat: 64.17, lon: -51.74 },\n GG: {\n en: \"St. Peter Port\",\n sv: \"Saint Peter Port\",\n native: \"St. Peter Port\",\n lat: 49.46,\n lon: -2.54,\n },\n IM: { en: \"Douglas\", sv: \"Douglas\", native: \"Douglas\", lat: 54.15, lon: -4.48 },\n JE: { en: \"St. Helier\", sv: \"Saint Helier\", native: \"St. Helier\", lat: 49.19, lon: -2.1 },\n};\n\n/** Returns the {@link CountryCapital} for the given alpha-2 code, or `null` if unknown. */\nexport function getCountryCapital(alpha2: string): CountryCapital | null {\n const r = RAW[alpha2];\n if (!r) return null;\n return new CountryCapital(r.en, r.sv, r.native, GeoCoordinate.create(r.lat, r.lon));\n}\n","/** EU/EEA/Schengen/Nordic/SEPA membership and currency overrides. */\n\nconst set = (codes: readonly string[]): ReadonlySet<string> => {\n const s = new Set<string>();\n for (const c of codes) s.add(c.toUpperCase());\n return s;\n};\n\nexport const EU_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n]);\n\nexport const EEA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n]);\n\nexport const SCHENGEN_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"CH\",\n]);\n\nexport const NORDIC_COUNTRIES: ReadonlySet<string> = set([\"DK\", \"FI\", \"IS\", \"NO\", \"SE\"]);\n\nexport const SEPA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"AL\",\n \"AD\",\n \"MD\",\n \"MC\",\n \"ME\",\n \"MK\",\n \"SM\",\n \"RS\",\n \"CH\",\n \"GB\",\n \"VA\",\n \"GG\",\n \"IM\",\n \"JE\",\n]);\n\n/** ISO 4217 currency codes per ISO 3166 country, with overrides for territories. */\nexport const COUNTRY_CURRENCIES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"AFN\"],\n AL: [\"ALL\"],\n DZ: [\"DZD\"],\n AS: [\"USD\"],\n AD: [\"EUR\"],\n AO: [\"AOA\"],\n AG: [\"XCD\"],\n AR: [\"ARS\"],\n AM: [\"AMD\"],\n AW: [\"AWG\"],\n AU: [\"AUD\"],\n AT: [\"EUR\"],\n AZ: [\"AZN\"],\n BS: [\"BSD\"],\n BH: [\"BHD\"],\n BD: [\"BDT\"],\n BB: [\"BBD\"],\n BY: [\"BYN\"],\n BE: [\"EUR\"],\n BZ: [\"BZD\"],\n BJ: [\"XOF\"],\n BM: [\"BMD\"],\n BT: [\"BTN\"],\n BO: [\"BOB\"],\n BA: [\"BAM\"],\n BW: [\"BWP\"],\n BR: [\"BRL\"],\n BN: [\"BND\"],\n BG: [\"BGN\"],\n BF: [\"XOF\"],\n BI: [\"BIF\"],\n CV: [\"CVE\"],\n KH: [\"KHR\"],\n CM: [\"XAF\"],\n CA: [\"CAD\"],\n CF: [\"XAF\"],\n TD: [\"XAF\"],\n CL: [\"CLP\"],\n CN: [\"CNY\"],\n CO: [\"COP\"],\n KM: [\"KMF\"],\n CG: [\"XAF\"],\n CD: [\"CDF\"],\n CR: [\"CRC\"],\n CI: [\"XOF\"],\n HR: [\"EUR\"],\n CU: [\"CUP\"],\n CW: [\"ANG\"],\n CY: [\"EUR\"],\n CZ: [\"CZK\"],\n DK: [\"DKK\"],\n DJ: [\"DJF\"],\n DM: [\"XCD\"],\n DO: [\"DOP\"],\n EC: [\"USD\"],\n EG: [\"EGP\"],\n SV: [\"USD\"],\n GQ: [\"XAF\"],\n ER: [\"ERN\"],\n EE: [\"EUR\"],\n SZ: [\"SZL\"],\n ET: [\"ETB\"],\n FJ: [\"FJD\"],\n FI: [\"EUR\"],\n FR: [\"EUR\"],\n GA: [\"XAF\"],\n GM: [\"GMD\"],\n GE: [\"GEL\"],\n DE: [\"EUR\"],\n GH: [\"GHS\"],\n GI: [\"GIP\"],\n GR: [\"EUR\"],\n GL: [\"DKK\"],\n GD: [\"XCD\"],\n GU: [\"USD\"],\n GT: [\"GTQ\"],\n GG: [\"GBP\"],\n GN: [\"GNF\"],\n GW: [\"XOF\"],\n GY: [\"GYD\"],\n HT: [\"HTG\"],\n HN: [\"HNL\"],\n HK: [\"HKD\"],\n HU: [\"HUF\"],\n IS: [\"ISK\"],\n IN: [\"INR\"],\n ID: [\"IDR\"],\n IR: [\"IRR\"],\n IQ: [\"IQD\"],\n IE: [\"EUR\"],\n IM: [\"GBP\"],\n IL: [\"ILS\"],\n IT: [\"EUR\"],\n JM: [\"JMD\"],\n JP: [\"JPY\"],\n JE: [\"GBP\"],\n JO: [\"JOD\"],\n KZ: [\"KZT\"],\n KE: [\"KES\"],\n KI: [\"AUD\"],\n KP: [\"KPW\"],\n KR: [\"KRW\"],\n KW: [\"KWD\"],\n KG: [\"KGS\"],\n LA: [\"LAK\"],\n LV: [\"EUR\"],\n LB: [\"LBP\"],\n LS: [\"LSL\"],\n LR: [\"LRD\"],\n LY: [\"LYD\"],\n LI: [\"CHF\"],\n LT: [\"EUR\"],\n LU: [\"EUR\"],\n MO: [\"MOP\"],\n MG: [\"MGA\"],\n MW: [\"MWK\"],\n MY: [\"MYR\"],\n MV: [\"MVR\"],\n ML: [\"XOF\"],\n MT: [\"EUR\"],\n MH: [\"USD\"],\n MR: [\"MRU\"],\n MU: [\"MUR\"],\n MX: [\"MXN\"],\n FM: [\"USD\"],\n MD: [\"MDL\"],\n MC: [\"EUR\"],\n MN: [\"MNT\"],\n ME: [\"EUR\"],\n MA: [\"MAD\"],\n MZ: [\"MZN\"],\n MM: [\"MMK\"],\n NA: [\"NAD\"],\n NR: [\"AUD\"],\n NP: [\"NPR\"],\n NL: [\"EUR\"],\n NZ: [\"NZD\"],\n NI: [\"NIO\"],\n NE: [\"XOF\"],\n NG: [\"NGN\"],\n MK: [\"MKD\"],\n NO: [\"NOK\"],\n OM: [\"OMR\"],\n PK: [\"PKR\"],\n PW: [\"USD\"],\n PS: [\"ILS\"],\n PA: [\"PAB\"],\n PG: [\"PGK\"],\n PY: [\"PYG\"],\n PE: [\"PEN\"],\n PH: [\"PHP\"],\n PL: [\"PLN\"],\n PT: [\"EUR\"],\n PR: [\"USD\"],\n QA: [\"QAR\"],\n RO: [\"RON\"],\n RU: [\"RUB\"],\n RW: [\"RWF\"],\n KN: [\"XCD\"],\n LC: [\"XCD\"],\n VC: [\"XCD\"],\n WS: [\"WST\"],\n SM: [\"EUR\"],\n ST: [\"STN\"],\n SA: [\"SAR\"],\n SN: [\"XOF\"],\n RS: [\"RSD\"],\n SC: [\"SCR\"],\n SL: [\"SLE\"],\n SG: [\"SGD\"],\n SK: [\"EUR\"],\n SI: [\"EUR\"],\n SB: [\"SBD\"],\n SO: [\"SOS\"],\n ZA: [\"ZAR\"],\n SS: [\"SSP\"],\n ES: [\"EUR\"],\n LK: [\"LKR\"],\n SD: [\"SDG\"],\n SR: [\"SRD\"],\n SE: [\"SEK\"],\n CH: [\"CHF\"],\n SY: [\"SYP\"],\n TW: [\"TWD\"],\n TJ: [\"TJS\"],\n TZ: [\"TZS\"],\n TH: [\"THB\"],\n TL: [\"USD\"],\n TG: [\"XOF\"],\n TO: [\"TOP\"],\n TT: [\"TTD\"],\n TN: [\"TND\"],\n TR: [\"TRY\"],\n TM: [\"TMT\"],\n TV: [\"AUD\"],\n UG: [\"UGX\"],\n UA: [\"UAH\"],\n AE: [\"AED\"],\n GB: [\"GBP\"],\n US: [\"USD\"],\n UY: [\"UYU\"],\n UZ: [\"UZS\"],\n VU: [\"VUV\"],\n VA: [\"EUR\"],\n VE: [\"VES\"],\n VN: [\"VND\"],\n YE: [\"YER\"],\n ZM: [\"ZMW\"],\n ZW: [\"ZWG\"],\n AX: [\"EUR\"],\n FO: [\"DKK\"],\n XK: [\"EUR\"],\n} as const);\n\n/** ISO 639-1 official language codes per country. */\nexport const COUNTRY_LANGUAGES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"ps\", \"fa\"],\n AL: [\"sq\"],\n DZ: [\"ar\"],\n AD: [\"ca\"],\n AO: [\"pt\"],\n AG: [\"en\"],\n AR: [\"es\"],\n AM: [\"hy\"],\n AU: [\"en\"],\n AT: [\"de\"],\n AZ: [\"az\"],\n BS: [\"en\"],\n BH: [\"ar\"],\n BD: [\"bn\"],\n BB: [\"en\"],\n BY: [\"be\", \"ru\"],\n BE: [\"nl\", \"fr\", \"de\"],\n BZ: [\"en\"],\n BJ: [\"fr\"],\n BT: [\"dz\"],\n BO: [\"es\", \"qu\", \"ay\"],\n BA: [\"bs\", \"hr\", \"sr\"],\n BW: [\"en\", \"tn\"],\n BR: [\"pt\"],\n BN: [\"ms\"],\n BG: [\"bg\"],\n BF: [\"fr\"],\n BI: [\"rn\", \"fr\"],\n CV: [\"pt\"],\n KH: [\"km\"],\n CM: [\"fr\", \"en\"],\n CA: [\"en\", \"fr\"],\n CF: [\"fr\", \"sg\"],\n TD: [\"fr\", \"ar\"],\n CL: [\"es\"],\n CN: [\"zh\"],\n CO: [\"es\"],\n KM: [\"ar\", \"fr\"],\n CG: [\"fr\"],\n CD: [\"fr\"],\n CR: [\"es\"],\n CI: [\"fr\"],\n HR: [\"hr\"],\n CU: [\"es\"],\n CY: [\"el\", \"tr\"],\n CZ: [\"cs\"],\n DK: [\"da\"],\n DJ: [\"fr\", \"ar\"],\n DM: [\"en\"],\n DO: [\"es\"],\n EC: [\"es\"],\n EG: [\"ar\"],\n SV: [\"es\"],\n GQ: [\"es\", \"fr\", \"pt\"],\n ER: [\"ti\", \"ar\", \"en\"],\n EE: [\"et\"],\n SZ: [\"en\", \"ss\"],\n ET: [\"am\"],\n FJ: [\"en\", \"fj\"],\n FI: [\"fi\", \"sv\"],\n FR: [\"fr\"],\n GA: [\"fr\"],\n GM: [\"en\"],\n GE: [\"ka\"],\n DE: [\"de\"],\n GH: [\"en\"],\n GR: [\"el\"],\n GD: [\"en\"],\n GT: [\"es\"],\n GN: [\"fr\"],\n GW: [\"pt\"],\n GY: [\"en\"],\n HT: [\"ht\", \"fr\"],\n HN: [\"es\"],\n HU: [\"hu\"],\n IS: [\"is\"],\n IN: [\"hi\", \"en\"],\n ID: [\"id\"],\n IR: [\"fa\"],\n IQ: [\"ar\", \"ku\"],\n IE: [\"en\", \"ga\"],\n IL: [\"he\", \"ar\"],\n IT: [\"it\"],\n JM: [\"en\"],\n JP: [\"ja\"],\n JO: [\"ar\"],\n KZ: [\"kk\", \"ru\"],\n KE: [\"en\", \"sw\"],\n KI: [\"en\"],\n KP: [\"ko\"],\n KR: [\"ko\"],\n KW: [\"ar\"],\n KG: [\"ky\", \"ru\"],\n LA: [\"lo\"],\n LV: [\"lv\"],\n LB: [\"ar\", \"fr\"],\n LS: [\"en\", \"st\"],\n LR: [\"en\"],\n LY: [\"ar\"],\n LI: [\"de\"],\n LT: [\"lt\"],\n LU: [\"lb\", \"fr\", \"de\"],\n MG: [\"mg\", \"fr\"],\n MW: [\"en\", \"ny\"],\n MY: [\"ms\"],\n MV: [\"dv\"],\n ML: [\"fr\"],\n MT: [\"mt\", \"en\"],\n MH: [\"en\", \"mh\"],\n MR: [\"ar\"],\n MU: [\"en\"],\n MX: [\"es\"],\n MD: [\"ro\"],\n MC: [\"fr\"],\n MN: [\"mn\"],\n ME: [\"sr\"],\n MA: [\"ar\"],\n MZ: [\"pt\"],\n MM: [\"my\"],\n NA: [\"en\"],\n NR: [\"en\", \"na\"],\n NP: [\"ne\"],\n NL: [\"nl\"],\n NZ: [\"en\", \"mi\"],\n NI: [\"es\"],\n NE: [\"fr\"],\n NG: [\"en\"],\n MK: [\"mk\"],\n NO: [\"no\", \"nb\", \"nn\"],\n OM: [\"ar\"],\n PK: [\"ur\", \"en\"],\n PW: [\"en\"],\n PA: [\"es\"],\n PG: [\"en\"],\n PY: [\"es\", \"gn\"],\n PE: [\"es\", \"qu\"],\n PH: [\"tl\", \"en\"],\n PL: [\"pl\"],\n PT: [\"pt\"],\n QA: [\"ar\"],\n RO: [\"ro\"],\n RU: [\"ru\"],\n RW: [\"rw\", \"fr\", \"en\"],\n KN: [\"en\"],\n LC: [\"en\"],\n VC: [\"en\"],\n WS: [\"sm\", \"en\"],\n SM: [\"it\"],\n ST: [\"pt\"],\n SA: [\"ar\"],\n SN: [\"fr\"],\n RS: [\"sr\"],\n SC: [\"en\", \"fr\"],\n SL: [\"en\"],\n SG: [\"en\", \"ms\", \"zh\", \"ta\"],\n SK: [\"sk\"],\n SI: [\"sl\"],\n SB: [\"en\"],\n SO: [\"so\", \"ar\"],\n ZA: [\"en\", \"af\", \"zu\"],\n SS: [\"en\"],\n ES: [\"es\"],\n LK: [\"si\", \"ta\"],\n SD: [\"ar\", \"en\"],\n SR: [\"nl\"],\n SE: [\"sv\"],\n CH: [\"de\", \"fr\", \"it\", \"rm\"],\n SY: [\"ar\"],\n TW: [\"zh\"],\n TJ: [\"tg\"],\n TZ: [\"sw\", \"en\"],\n TH: [\"th\"],\n TL: [\"pt\"],\n TG: [\"fr\"],\n TO: [\"en\", \"to\"],\n TT: [\"en\"],\n TN: [\"ar\"],\n TR: [\"tr\"],\n TM: [\"tk\"],\n TV: [\"en\"],\n UG: [\"en\", \"sw\"],\n UA: [\"uk\"],\n AE: [\"ar\"],\n GB: [\"en\"],\n US: [\"en\"],\n UY: [\"es\"],\n UZ: [\"uz\"],\n VU: [\"en\", \"fr\", \"bi\"],\n VA: [\"it\", \"la\"],\n VE: [\"es\"],\n VN: [\"vi\"],\n YE: [\"ar\"],\n ZM: [\"en\"],\n ZW: [\"en\", \"sn\", \"nd\"],\n AS: [\"en\", \"sm\"],\n AW: [\"nl\"],\n BM: [\"en\"],\n CW: [\"nl\"],\n FO: [\"fo\", \"da\"],\n GI: [\"en\"],\n GL: [\"kl\", \"da\"],\n GG: [\"en\"],\n GU: [\"en\"],\n HK: [\"zh\", \"en\"],\n IM: [\"en\"],\n JE: [\"en\"],\n XK: [\"sq\", \"sr\"],\n MO: [\"zh\", \"pt\"],\n PR: [\"es\", \"en\"],\n} as const);\n\n/** Aliases for Country.tryParse — common alternative names not in the canonical list. */\nexport const COUNTRY_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n USA: \"US\",\n UK: \"GB\",\n Holland: \"NL\",\n \"Czech Republic\": \"CZ\",\n \"Ivory Coast\": \"CI\",\n Burma: \"MM\",\n Swaziland: \"SZ\",\n Persia: \"IR\",\n \"Great Britain\": \"GB\",\n England: \"GB\",\n UAE: \"AE\",\n \"South Korea\": \"KR\",\n \"North Korea\": \"KP\",\n \"Republic of Ireland\": \"IE\",\n Suisse: \"CH\",\n Svizzera: \"CH\",\n Belgique: \"BE\",\n Noreg: \"NO\",\n Vitryssland: \"BY\",\n});\n\n/**\n * Country alpha-2 codes that own each shared phone calling code (`+1` is shared\n * by US, Canada, Caribbean countries; `+44` by UK, Guernsey, Isle of Man,\n * Jersey; `+7` by Russia and Kazakhstan). The first entry is the primary.\n */\nexport const PRIMARY_BY_CALLING_CODE: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"44\": \"GB\",\n \"7\": \"RU\",\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Currency } from \"../finance/currency.js\";\nimport { Continent } from \"./continent.js\";\nimport { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { Language } from \"./language.js\";\nimport { COUNTRY_ROWS, type CountryRow } from \"./country-data.js\";\nimport { COUNTRY_COORDINATES } from \"./country-coordinates.js\";\nimport { getCountryCapital } from \"./country-capitals.js\";\nimport {\n COUNTRY_ALIASES,\n COUNTRY_CURRENCIES,\n COUNTRY_LANGUAGES,\n EEA_COUNTRIES,\n EU_COUNTRIES,\n NORDIC_COUNTRIES,\n PRIMARY_BY_CALLING_CODE,\n SCHENGEN_COUNTRIES,\n SEPA_COUNTRIES,\n} from \"./country-metadata.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A neighboring country with its distance from a reference point (kilometers). */\nexport interface CountryDistance {\n readonly country: Country;\n readonly distanceKilometers: number;\n}\n\n/**\n * A country identified by its English name, Swedish name, local name (endonym),\n * or ISO 3166-1 codes. Each country exposes its phone calling code, ccTLD,\n * continent, European classifications (EU, EEA, Schengen, Nordics, SEPA), and\n * currency metadata. Parsing accepts English/Swedish/local names, alpha-2 and\n * alpha-3 codes, and common aliases (USA, UK, Holland, etc.).\n */\nexport class Country {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Country\",\n localizedName: \"Land\",\n emoji: \"\\u{1F30D}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-3166-country-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_3166-1\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://www.iana.org/domains/root/db\",\n \"https://www.wikidata.org/wiki/Property:P625\",\n \"https://www.wikidata.org/wiki/Property:P36\",\n \"https://www.wikidata.org/wiki/Property:P47\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly numericCode: number;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly callingCode: string;\n readonly topLevelDomain: string;\n readonly continent: Continent;\n readonly currencyCodes: readonly string[];\n readonly languageCodes: readonly string[];\n\n private constructor(row: CountryRow) {\n this.alpha2Code = row.alpha2;\n this.alpha3Code = row.alpha3;\n this.numericCode = row.numeric;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.nativeName = row.native;\n this.callingCode = row.callingCode;\n this.topLevelDomain = row.tld;\n this.continent = row.continent;\n this.currencyCodes = COUNTRY_CURRENCIES[row.alpha2] ?? [];\n this.languageCodes = COUNTRY_LANGUAGES[row.alpha2] ?? [];\n }\n\n /** The canonical value of this country: its ISO 3166-1 alpha-2 code. */\n get value(): string {\n return this.alpha2Code;\n }\n\n /** Display name in the current culture (Swedish or English). */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n /** Culture-independent display form. Always the English name. */\n get formatted(): string {\n return this.englishName;\n }\n\n /** Geographic coordinate of the country (centroid, from Wikidata P625). */\n get coordinate(): GeoCoordinate {\n const c = COUNTRY_COORDINATES[this.alpha2Code];\n if (!c) throw new Error(`No coordinate for country ${this.alpha2Code}.`);\n return GeoCoordinate.create(c[0], c[1]);\n }\n\n /** Approximate latitude (WGS 84) of the country centroid. */\n get latitude(): number {\n return this.coordinate.latitude;\n }\n\n /** Approximate longitude (WGS 84) of the country centroid. */\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n /** Capital city, or `null` for entries without a capital (e.g. Antarctica). */\n get capital(): CountryCapital | null {\n return getCountryCapital(this.alpha2Code);\n }\n\n get isInEuropeanUnion(): boolean {\n return EU_COUNTRIES.has(this.alpha2Code);\n }\n get isInEea(): boolean {\n return EEA_COUNTRIES.has(this.alpha2Code);\n }\n get isInSchengen(): boolean {\n return SCHENGEN_COUNTRIES.has(this.alpha2Code);\n }\n get isInNordics(): boolean {\n return NORDIC_COUNTRIES.has(this.alpha2Code);\n }\n get isInSepa(): boolean {\n return SEPA_COUNTRIES.has(this.alpha2Code);\n }\n\n /** True when the euro is among the country's legal tenders. */\n get usesEuro(): boolean {\n return this.currencyCodes.includes(\"EUR\");\n }\n\n /** Primary ISO 4217 currency code, or `null` when unknown. */\n get currencyCode(): string | null {\n return this.currencyCodes[0] ?? null;\n }\n\n /**\n * Primary legal-tender currency, or `null` when unknown. Countries with\n * several legal tenders (Cuba, Panama, Namibia) return the first; use\n * {@link currencies} for the full list.\n */\n get currency(): Currency | null {\n const code = this.currencyCode;\n return code == null ? null : Currency.tryParse(code);\n }\n\n /** All recognized currencies for this country, in priority order. */\n get currencies(): readonly Currency[] {\n return Object.freeze(\n this.currencyCodes\n .map((code) => Currency.tryParse(code))\n .filter((c): c is Currency => c !== null),\n );\n }\n\n /**\n * Primary official language, or `null` when unknown. Countries with several\n * official languages (Belgium, Switzerland) return the most widely spoken;\n * use {@link officialLanguages} for the full list.\n */\n get primaryLanguage(): Language | null {\n const code = this.languageCodes[0];\n return code == null ? null : Language.tryParse(code);\n }\n\n /** All official languages of the country, in priority order. */\n get officialLanguages(): readonly Language[] {\n return Object.freeze(\n this.languageCodes\n .map((code) => Language.tryParse(code))\n .filter((l): l is Language => l !== null),\n );\n }\n\n static tryParse(input: string | null | undefined): Country | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const direct = lookupCi(sanitized);\n if (direct) return direct;\n\n if (sanitized.length > 4 && sanitized.slice(0, 4).toLowerCase() === \"the \") {\n const without = sanitized.slice(4);\n const stripped = lookupCi(without);\n if (stripped) return stripped;\n }\n return null;\n }\n\n static parse(input: string): Country {\n const r = Country.tryParse(input);\n if (r === null) throw new Error(\"Unknown country.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Country.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Country.normalize(input) === input;\n }\n\n /** Look up a country by its phone calling code. Primary owner wins for shared codes. */\n static tryFindByCallingCode(callingCode: string | null | undefined): Country | null {\n if (callingCode == null) return null;\n const trimmed = callingCode.trim();\n if (trimmed.length === 0) return null;\n return BY_CALLING_CODE.get(trimmed) ?? null;\n }\n\n /** All known countries. */\n static get all(): readonly Country[] {\n return ALL_COUNTRIES;\n }\n\n /**\n * Returns countries within `radiusKm` of this country, ordered by distance.\n */\n findNeighbors(radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n return Country.findNeighbors(this.coordinate, radiusKm).filter((d) => d.country !== this);\n }\n\n /** Returns countries within `radiusKm` of `coordinate`, ordered by distance. */\n static findNeighbors(coordinate: GeoCoordinate, radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: CountryDistance[] = [];\n for (const c of ALL_COUNTRIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, c.coordinate);\n if (dist <= radiusKm) out.push({ country: c, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n /**\n * Scans unstructured text for country names (4+ chars, word-bounded). Low confidence\n * because country names can occur in non-geographic contexts.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Country>[] {\n if (!text) return [];\n const out: TextCandidate<Country>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const country = Country.tryParse(m[0]);\n if (!country) continue;\n out.push(\n new TextCandidate<Country>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Country\",\n category: TextCandidateCategory.Geography,\n normalizedForm: country.toNormalizedString(),\n formattedForm: country.toString(),\n maskedForm: country.localizedName,\n confidence: TextMatchConfidence.Low,\n value: country,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Country | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n compareTo(other: Country | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n static get Sweden(): Country {\n return getByAlpha2(\"SE\");\n }\n static get Norway(): Country {\n return getByAlpha2(\"NO\");\n }\n static get Finland(): Country {\n return getByAlpha2(\"FI\");\n }\n static get Denmark(): Country {\n return getByAlpha2(\"DK\");\n }\n static get Iceland(): Country {\n return getByAlpha2(\"IS\");\n }\n static get Germany(): Country {\n return getByAlpha2(\"DE\");\n }\n static get Poland(): Country {\n return getByAlpha2(\"PL\");\n }\n static get Estonia(): Country {\n return getByAlpha2(\"EE\");\n }\n static get Lithuania(): Country {\n return getByAlpha2(\"LT\");\n }\n static get Latvia(): Country {\n return getByAlpha2(\"LV\");\n }\n static get Romania(): Country {\n return getByAlpha2(\"RO\");\n }\n static get Bulgaria(): Country {\n return getByAlpha2(\"BG\");\n }\n static get CzechRepublic(): Country {\n return getByAlpha2(\"CZ\");\n }\n static get Spain(): Country {\n return getByAlpha2(\"ES\");\n }\n static get Netherlands(): Country {\n return getByAlpha2(\"NL\");\n }\n static get Greece(): Country {\n return getByAlpha2(\"GR\");\n }\n static get Italy(): Country {\n return getByAlpha2(\"IT\");\n }\n static get Slovenia(): Country {\n return getByAlpha2(\"SI\");\n }\n static get Croatia(): Country {\n return getByAlpha2(\"HR\");\n }\n static get Portugal(): Country {\n return getByAlpha2(\"PT\");\n }\n static get Hungary(): Country {\n return getByAlpha2(\"HU\");\n }\n static get France(): Country {\n return getByAlpha2(\"FR\");\n }\n static get Slovakia(): Country {\n return getByAlpha2(\"SK\");\n }\n static get Belgium(): Country {\n return getByAlpha2(\"BE\");\n }\n static get UnitedKingdom(): Country {\n return getByAlpha2(\"GB\");\n }\n static get Austria(): Country {\n return getByAlpha2(\"AT\");\n }\n static get Cyprus(): Country {\n return getByAlpha2(\"CY\");\n }\n static get Switzerland(): Country {\n return getByAlpha2(\"CH\");\n }\n static get Ireland(): Country {\n return getByAlpha2(\"IE\");\n }\n static get Luxembourg(): Country {\n return getByAlpha2(\"LU\");\n }\n static get Malta(): Country {\n return getByAlpha2(\"MT\");\n }\n static get Liechtenstein(): Country {\n return getByAlpha2(\"LI\");\n }\n\n /** @internal */\n static _fromRow(row: CountryRow): Country {\n return new Country(row);\n }\n}\n\nconst ALL_COUNTRIES: readonly Country[] = COUNTRY_ROWS.map((r) => Country._fromRow(r));\n\nconst BY_ALPHA2 = new Map<string, Country>();\nconst BY_NAME = new Map<string, Country>();\nconst BY_CALLING_CODE = new Map<string, Country>();\n\nfor (const c of ALL_COUNTRIES) {\n BY_ALPHA2.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha3Code.toUpperCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n if (!BY_NAME.has(c.localizedName.toLowerCase())) BY_NAME.set(c.localizedName.toLowerCase(), c);\n if (\n c.nativeName.toLowerCase() !== c.englishName.toLowerCase() &&\n !BY_NAME.has(c.nativeName.toLowerCase())\n ) {\n BY_NAME.set(c.nativeName.toLowerCase(), c);\n }\n if (!BY_CALLING_CODE.has(c.callingCode)) BY_CALLING_CODE.set(c.callingCode, c);\n}\n\nfor (const [aliasOrCode, alpha2] of Object.entries(COUNTRY_ALIASES)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_NAME.set(aliasOrCode.toLowerCase(), target);\n}\n\nfor (const [code, alpha2] of Object.entries(PRIMARY_BY_CALLING_CODE)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_CALLING_CODE.set(code, target);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= 4)\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n\nfunction getByAlpha2(code: string): Country {\n const c = BY_ALPHA2.get(code.toUpperCase());\n if (!c) throw new Error(`Unknown country code ${code}.`);\n return c;\n}\n\nfunction lookupCi(input: string): Country | null {\n const upper = input.toUpperCase();\n const a2 = BY_ALPHA2.get(upper);\n if (a2) return a2;\n const lower = input.toLowerCase();\n return BY_NAME.get(lower) ?? BY_NAME.get(upper) ?? null;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A Swedish county (`län`), keyed by SCB's 2-digit county code. */\nexport class SwedishCounty {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"County\",\n localizedName: \"Län\",\n emoji: \"\\u{1F3DB}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/\",\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/counties-and-municipalities-in-numerical-order/\",\n ]),\n });\n\n readonly code: string;\n readonly localizedName: string;\n readonly englishName: string;\n readonly coordinate: GeoCoordinate;\n\n private constructor(code: string, localized: string, english: string, coord: GeoCoordinate) {\n this.code = code;\n this.localizedName = localized;\n this.englishName = english;\n this.coordinate = coord;\n }\n\n get latitude(): number {\n return this.coordinate.latitude;\n }\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): SwedishCounty | null {\n if (input == null) return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(trimmed);\n if (digits.length === 2 && BY_CODE.has(digits)) return BY_CODE.get(digits)!;\n\n return BY_NAME.get(trimmed.toLowerCase()) ?? null;\n }\n\n static parse(input: string): SwedishCounty {\n const r = SwedishCounty.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish county.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCounty.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishCounty.tryParse(input);\n if (r) return r.localizedName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishCounty.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCounty.normalize(input) === input;\n }\n\n /** All 21 Swedish counties. */\n static get all(): readonly SwedishCounty[] {\n return ALL_COUNTIES;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCounty>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCounty>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const county = SwedishCounty.tryParse(m[0]);\n if (!county) continue;\n out.push(\n new TextCandidate<SwedishCounty>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCounty\",\n category: TextCandidateCategory.Geography,\n normalizedForm: county.toNormalizedString(),\n formattedForm: county.toString(),\n maskedForm: county.localizedName,\n confidence: TextMatchConfidence.Low,\n value: county,\n }),\n );\n }\n return out;\n }\n\n /** Distance in kilometers between two counties (by county seat). */\n static distanceKilometers(a: SwedishCounty, b: SwedishCounty): number {\n return GeoCoordinate.distanceKilometers(a.coordinate, b.coordinate);\n }\n\n distanceKilometersTo(other: SwedishCounty | GeoCoordinate): number {\n const target = other instanceof SwedishCounty ? other.coordinate : other;\n return GeoCoordinate.distanceKilometers(this.coordinate, target);\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toLocalString(): string {\n return this.localizedName;\n }\n\n equals(other: SwedishCounty | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: SwedishCounty | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n /** @internal */\n static _new(code: string, sv: string, en: string, c: GeoCoordinate): SwedishCounty {\n return new SwedishCounty(code, sv, en, c);\n }\n}\n\ninterface CountyDef {\n readonly code: string;\n readonly sv: string;\n readonly en: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst COUNTY_DEFS: readonly CountyDef[] = [\n { code: \"01\", sv: \"Stockholms län\", en: \"Stockholm County\", lat: 59.3275, lon: 18.054719 },\n { code: \"03\", sv: \"Uppsala län\", en: \"Uppsala County\", lat: 59.866667, lon: 17.633333 },\n {\n code: \"04\",\n sv: \"Södermanlands län\",\n en: \"Södermanland County\",\n lat: 58.752778,\n lon: 17.008611,\n },\n { code: \"05\", sv: \"Östergötlands län\", en: \"Östergötland County\", lat: 58.4, lon: 15.616667 },\n { code: \"06\", sv: \"Jönköpings län\", en: \"Jönköping County\", lat: 57.783333, lon: 14.2 },\n { code: \"07\", sv: \"Kronobergs län\", en: \"Kronoberg County\", lat: 56.883333, lon: 14.8 },\n { code: \"08\", sv: \"Kalmar län\", en: \"Kalmar County\", lat: 56.666667, lon: 16.366667 },\n { code: \"09\", sv: \"Gotlands län\", en: \"Gotland County\", lat: 57.615278, lon: 18.280556 },\n { code: \"10\", sv: \"Blekinge län\", en: \"Blekinge County\", lat: 56.183333, lon: 15.65 },\n { code: \"12\", sv: \"Skåne län\", en: \"Skåne County\", lat: 55.565, lon: 13.018611 },\n { code: \"13\", sv: \"Hallands län\", en: \"Halland County\", lat: 56.666667, lon: 12.85 },\n {\n code: \"14\",\n sv: \"Västra Götalands län\",\n en: \"Västra Götaland County\",\n lat: 57.7,\n lon: 11.933333,\n },\n { code: \"17\", sv: \"Värmlands län\", en: \"Värmland County\", lat: 59.383333, lon: 13.533333 },\n { code: \"18\", sv: \"Örebro län\", en: \"Örebro County\", lat: 59.273889, lon: 15.213333 },\n { code: \"19\", sv: \"Västmanlands län\", en: \"Västmanland County\", lat: 59.616667, lon: 16.533333 },\n { code: \"20\", sv: \"Dalarnas län\", en: \"Dalarna County\", lat: 60.6, lon: 15.633333 },\n { code: \"21\", sv: \"Gävleborgs län\", en: \"Gävleborg County\", lat: 60.666667, lon: 17.166667 },\n {\n code: \"22\",\n sv: \"Västernorrlands län\",\n en: \"Västernorrland County\",\n lat: 62.633333,\n lon: 17.933333,\n },\n { code: \"23\", sv: \"Jämtlands län\", en: \"Jämtland County\", lat: 63.183333, lon: 14.666667 },\n { code: \"24\", sv: \"Västerbottens län\", en: \"Västerbotten County\", lat: 63.833333, lon: 20.25 },\n { code: \"25\", sv: \"Norrbottens län\", en: \"Norrbotten County\", lat: 65.584444, lon: 22.153889 },\n];\n\nconst ALL_COUNTIES: readonly SwedishCounty[] = COUNTY_DEFS.map((d) =>\n SwedishCounty._new(d.code, d.sv, d.en, GeoCoordinate.create(d.lat, d.lon)),\n);\n\nconst BY_CODE = new Map<string, SwedishCounty>();\nconst BY_NAME = new Map<string, SwedishCounty>();\n\nfor (const c of ALL_COUNTIES) {\n BY_CODE.set(c.code, c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n\n const sv = c.localizedName;\n if (sv.endsWith(\" län\")) {\n const baseSv = sv.slice(0, -4);\n if (!BY_NAME.has(baseSv.toLowerCase())) BY_NAME.set(baseSv.toLowerCase(), c);\n addGenitive(baseSv, c);\n }\n const en = c.englishName;\n if (en.endsWith(\" County\")) {\n const baseEn = en.slice(0, -7);\n if (!BY_NAME.has(baseEn.toLowerCase())) BY_NAME.set(baseEn.toLowerCase(), c);\n addGenitive(baseEn, c);\n }\n}\n\nfunction addGenitive(name: string, county: SwedishCounty): void {\n if (name.endsWith(\"s\") || name.endsWith(\"S\")) return;\n const key = (name + \"s\").toLowerCase();\n if (!BY_NAME.has(key)) BY_NAME.set(key, county);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .sort((a, b) => b.length - a.length)\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n","// Swedish municipality (kommun) data — code, name, county code, type, etc.\n// Originally generated from the .NET source; now maintained by hand in this repo.\n\nexport interface MunicipalityRow {\n readonly code: string;\n readonly name: string;\n readonly englishName?: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nexport const MUNICIPALITY_ROWS: readonly MunicipalityRow[] = [\n { code: \"0114\", name: \"Upplands Väsby\", lat: 59.516667, lon: 17.9 },\n { code: \"0115\", name: \"Vallentuna\", lat: 59.583333, lon: 18.2 },\n { code: \"0117\", name: \"Österåker\", lat: 59.5, lon: 18.45 },\n { code: \"0120\", name: \"Värmdö\", lat: 59.316667, lon: 18.566667 },\n { code: \"0123\", name: \"Järfälla\", lat: 59.433333, lon: 17.833333 },\n { code: \"0125\", name: \"Ekerö\", lat: 59.35, lon: 17.683333 },\n { code: \"0126\", name: \"Huddinge\", lat: 59.233333, lon: 17.983333 },\n { code: \"0127\", name: \"Botkyrka\", lat: 59.2, lon: 17.833333 },\n { code: \"0128\", name: \"Salem\", lat: 59.233333, lon: 17.683333 },\n { code: \"0136\", name: \"Haninge\", lat: 59.166667, lon: 18.133333 },\n { code: \"0138\", name: \"Tyresö\", lat: 59.233333, lon: 18.216667 },\n { code: \"0139\", name: \"Upplands-Bro\", lat: 59.533333, lon: 17.666667 },\n { code: \"0140\", name: \"Nykvarn\", lat: 59.183333, lon: 17.4 },\n { code: \"0160\", name: \"Täby\", lat: 59.4439, lon: 18.06872 },\n { code: \"0162\", name: \"Danderyd\", lat: 59.4, lon: 18.083333 },\n { code: \"0163\", name: \"Sollentuna\", lat: 59.45, lon: 17.916667 },\n { code: \"0180\", name: \"Stockholm\", lat: 59.3275, lon: 18.054719 },\n { code: \"0181\", name: \"Södertälje\", lat: 59.1, lon: 17.516667 },\n { code: \"0182\", name: \"Nacka\", lat: 59.316667, lon: 18.166667 },\n { code: \"0183\", name: \"Sundbyberg\", lat: 59.363333, lon: 17.965556 },\n { code: \"0184\", name: \"Solna\", lat: 59.366667, lon: 18.016667 },\n { code: \"0186\", name: \"Lidingö\", lat: 59.36303, lon: 18.15096 },\n { code: \"0187\", name: \"Vaxholm\", lat: 59.4, lon: 18.283333 },\n { code: \"0188\", name: \"Norrtälje\", lat: 59.766667, lon: 18.7 },\n { code: \"0191\", name: \"Sigtuna\", lat: 59.633333, lon: 17.883333 },\n { code: \"0192\", name: \"Nynäshamn\", lat: 58.933333, lon: 17.883333 },\n { code: \"0305\", name: \"Håbo\", lat: 59.567778, lon: 17.529722 },\n { code: \"0319\", name: \"Älvkarleby\", lat: 60.624444, lon: 17.416111 },\n { code: \"0330\", name: \"Knivsta\", lat: 59.716667, lon: 17.8 },\n { code: \"0331\", name: \"Heby\", lat: 59.933333, lon: 16.883333 },\n { code: \"0360\", name: \"Tierp\", lat: 60.344444, lon: 17.513056 },\n { code: \"0380\", name: \"Uppsala\", lat: 59.866667, lon: 17.633333 },\n { code: \"0381\", name: \"Enköping\", lat: 59.635556, lon: 17.076389 },\n { code: \"0382\", name: \"Östhammar\", lat: 60.258889, lon: 18.373611 },\n { code: \"0428\", name: \"Vingåker\", lat: 59.033333, lon: 15.866667 },\n { code: \"0461\", name: \"Gnesta\", lat: 59.0475, lon: 17.312222 },\n { code: \"0480\", name: \"Nyköping\", lat: 58.752778, lon: 17.008611 },\n { code: \"0481\", name: \"Oxelösund\", lat: 58.666667, lon: 17.116667 },\n { code: \"0482\", name: \"Flen\", lat: 59.058333, lon: 16.588889 },\n { code: \"0483\", name: \"Katrineholm\", lat: 58.995556, lon: 16.206111 },\n { code: \"0484\", name: \"Eskilstuna\", lat: 59.370556, lon: 16.512778 },\n { code: \"0486\", name: \"Strängnäs\", lat: 59.376944, lon: 17.035278 },\n { code: \"0488\", name: \"Trosa\", lat: 58.893889, lon: 17.552222 },\n { code: \"0509\", name: \"Ödeshög\", lat: 58.230833, lon: 14.652778 },\n { code: \"0512\", name: \"Ydre\", lat: 57.827222, lon: 15.273889 },\n { code: \"0513\", name: \"Kinda\", lat: 57.989167, lon: 15.627222 },\n { code: \"0560\", name: \"Boxholm\", lat: 58.196389, lon: 15.051944 },\n { code: \"0561\", name: \"Åtvidaberg\", lat: 58.201667, lon: 15.998056 },\n { code: \"0562\", name: \"Finspång\", lat: 58.709167, lon: 15.786944 },\n { code: \"0563\", name: \"Valdemarsvik\", lat: 58.205556, lon: 16.601944 },\n { code: \"0580\", name: \"Linköping\", lat: 58.4, lon: 15.616667 },\n { code: \"0581\", name: \"Norrköping\", lat: 58.591944, lon: 16.185556 },\n { code: \"0582\", name: \"Söderköping\", lat: 58.480278, lon: 16.3225 },\n { code: \"0583\", name: \"Motala\", lat: 58.536389, lon: 15.0375 },\n { code: \"0584\", name: \"Vadstena\", lat: 58.448333, lon: 14.889722 },\n { code: \"0586\", name: \"Mjölby\", lat: 58.325, lon: 15.130556 },\n { code: \"0604\", name: \"Aneby\", lat: 57.833333, lon: 14.8 },\n { code: \"0617\", name: \"Gnosjö\", lat: 57.366667, lon: 13.733333 },\n { code: \"0642\", name: \"Mullsjö\", lat: 57.916667, lon: 13.883333 },\n { code: \"0643\", name: \"Habo\", lat: 57.916667, lon: 14.066667 },\n { code: \"0662\", name: \"Gislaved\", lat: 57.3, lon: 13.533333 },\n { code: \"0665\", name: \"Vaggeryd\", lat: 57.5, lon: 14.116667 },\n { code: \"0680\", name: \"Jönköping\", lat: 57.783333, lon: 14.2 },\n { code: \"0682\", name: \"Nässjö\", lat: 57.65, lon: 14.683333 },\n { code: \"0683\", name: \"Värnamo\", lat: 57.183333, lon: 14.033333 },\n { code: \"0684\", name: \"Sävsjö\", lat: 57.4, lon: 14.666667 },\n { code: \"0685\", name: \"Vetlanda\", lat: 57.433333, lon: 15.066667 },\n { code: \"0686\", name: \"Eksjö\", lat: 57.666667, lon: 14.966667 },\n { code: \"0687\", name: \"Tranås\", lat: 58.033333, lon: 14.966667 },\n { code: \"0760\", name: \"Uppvidinge\", lat: 57.166667, lon: 15.333333 },\n { code: \"0761\", name: \"Lessebo\", lat: 56.75, lon: 15.266667 },\n { code: \"0763\", name: \"Tingsryd\", lat: 56.533333, lon: 14.983333 },\n { code: \"0764\", name: \"Alvesta\", lat: 56.9, lon: 14.55 },\n { code: \"0765\", name: \"Älmhult\", lat: 56.55, lon: 14.133333 },\n { code: \"0767\", name: \"Markaryd\", lat: 56.466667, lon: 13.6 },\n { code: \"0780\", name: \"Växjö\", lat: 56.883333, lon: 14.8 },\n { code: \"0781\", name: \"Ljungby\", lat: 56.833333, lon: 13.933333 },\n { code: \"0821\", name: \"Högsby\", lat: 57.166667, lon: 16.033333 },\n { code: \"0834\", name: \"Torsås\", lat: 56.4, lon: 16 },\n { code: \"0840\", name: \"Mörbylånga\", lat: 56.516667, lon: 16.383333 },\n { code: \"0860\", name: \"Hultsfred\", lat: 57.483333, lon: 15.833333 },\n { code: \"0861\", name: \"Mönsterås\", lat: 57.033333, lon: 16.45 },\n { code: \"0862\", name: \"Emmaboda\", lat: 56.616667, lon: 15.55 },\n { code: \"0880\", name: \"Kalmar\", lat: 56.666667, lon: 16.366667 },\n { code: \"0881\", name: \"Nybro\", lat: 56.733333, lon: 15.9 },\n { code: \"0882\", name: \"Oskarshamn\", lat: 57.266667, lon: 16.45 },\n { code: \"0883\", name: \"Västervik\", lat: 57.75, lon: 16.633333 },\n { code: \"0884\", name: \"Vimmerby\", lat: 57.666667, lon: 15.85 },\n { code: \"0885\", name: \"Borgholm\", lat: 56.878056, lon: 16.661667 },\n { code: \"0980\", name: \"Gotland\", lat: 57.615278, lon: 18.280556 },\n { code: \"1060\", name: \"Olofström\", lat: 56.266667, lon: 14.533333 },\n { code: \"1080\", name: \"Karlskrona\", lat: 56.183333, lon: 15.65 },\n { code: \"1081\", name: \"Ronneby\", lat: 56.2, lon: 15.283333 },\n { code: \"1082\", name: \"Karlshamn\", lat: 56.166667, lon: 14.85 },\n { code: \"1083\", name: \"Sölvesborg\", lat: 56.05, lon: 14.583333 },\n { code: \"1214\", name: \"Svalöv\", lat: 55.916667, lon: 13.116667 },\n { code: \"1230\", name: \"Staffanstorp\", lat: 55.633333, lon: 13.2 },\n { code: \"1231\", name: \"Burlöv\", lat: 55.633333, lon: 13.066667 },\n { code: \"1233\", name: \"Vellinge\", lat: 55.466667, lon: 13.016667 },\n { code: \"1256\", name: \"Östra Göinge\", lat: 56.25, lon: 14.066667 },\n { code: \"1257\", name: \"Örkelljunga\", lat: 56.283333, lon: 13.283333 },\n { code: \"1260\", name: \"Bjuv\", lat: 56.083333, lon: 12.916667 },\n { code: \"1261\", name: \"Kävlinge\", lat: 55.8, lon: 13.116667 },\n { code: \"1262\", name: \"Lomma\", lat: 55.666667, lon: 13.083333 },\n { code: \"1263\", name: \"Svedala\", lat: 55.5, lon: 13.233333 },\n { code: \"1264\", name: \"Skurup\", lat: 55.483333, lon: 13.5 },\n { code: \"1265\", name: \"Sjöbo\", lat: 55.633333, lon: 13.7 },\n { code: \"1266\", name: \"Hörby\", lat: 55.85, lon: 13.65 },\n { code: \"1267\", name: \"Höör\", lat: 55.933333, lon: 13.55 },\n { code: \"1270\", name: \"Tomelilla\", lat: 55.55, lon: 13.95 },\n { code: \"1272\", name: \"Bromölla\", lat: 56.05, lon: 14.466667 },\n { code: \"1273\", name: \"Osby\", lat: 56.366667, lon: 13.983333 },\n { code: \"1275\", name: \"Perstorp\", lat: 56.133333, lon: 13.383333 },\n { code: \"1276\", name: \"Klippan\", lat: 56.133333, lon: 13.133333 },\n { code: \"1277\", name: \"Åstorp\", lat: 56.133333, lon: 12.95 },\n { code: \"1278\", name: \"Båstad\", lat: 56.416667, lon: 12.866667 },\n { code: \"1280\", name: \"Malmö\", lat: 55.565, lon: 13.018611 },\n { code: \"1281\", name: \"Lund\", lat: 55.7, lon: 13.2 },\n { code: \"1282\", name: \"Landskrona\", lat: 55.866667, lon: 12.85 },\n { code: \"1283\", name: \"Helsingborg\", lat: 56.05, lon: 12.716667 },\n { code: \"1284\", name: \"Höganäs\", lat: 56.2, lon: 12.566667 },\n { code: \"1285\", name: \"Eslöv\", lat: 55.833333, lon: 13.3 },\n { code: \"1286\", name: \"Ystad\", lat: 55.416667, lon: 13.833333 },\n { code: \"1287\", name: \"Trelleborg\", lat: 55.366667, lon: 13.166667 },\n { code: \"1290\", name: \"Kristianstad\", lat: 56.033333, lon: 14.15 },\n { code: \"1291\", name: \"Simrishamn\", lat: 55.55, lon: 14.35 },\n { code: \"1292\", name: \"Ängelholm\", lat: 56.25, lon: 12.85 },\n { code: \"1293\", name: \"Hässleholm\", lat: 56.166667, lon: 13.766667 },\n { code: \"1315\", name: \"Hylte\", lat: 57, lon: 13.25 },\n { code: \"1380\", name: \"Halmstad\", lat: 56.666667, lon: 12.85 },\n { code: \"1381\", name: \"Laholm\", lat: 56.516667, lon: 13.033333 },\n { code: \"1382\", name: \"Falkenberg\", lat: 56.916667, lon: 12.5 },\n { code: \"1383\", name: \"Varberg\", lat: 57.1, lon: 12.25 },\n { code: \"1384\", name: \"Kungsbacka\", lat: 57.483333, lon: 12.066667 },\n { code: \"1401\", name: \"Härryda\", lat: 57.666667, lon: 12.116667 },\n { code: \"1402\", name: \"Partille\", lat: 57.733333, lon: 12.1 },\n { code: \"1407\", name: \"Öckerö\", lat: 57.711111, lon: 11.647222 },\n { code: \"1415\", name: \"Stenungsund\", lat: 58.083333, lon: 11.816667 },\n { code: \"1419\", name: \"Tjörn\", lat: 58, lon: 11.55 },\n { code: \"1421\", name: \"Orust\", lat: 58.233333, lon: 11.683333 },\n { code: \"1427\", name: \"Sotenäs\", lat: 58.366667, lon: 11.25 },\n { code: \"1430\", name: \"Munkedal\", lat: 58.483333, lon: 11.683333 },\n { code: \"1435\", name: \"Tanum\", lat: 58.716667, lon: 11.316667 },\n { code: \"1438\", name: \"Dals-Ed\", lat: 58.916667, lon: 11.916667 },\n { code: \"1439\", name: \"Färgelanda\", lat: 58.566667, lon: 11.983333 },\n { code: \"1440\", name: \"Ale\", lat: 57.925, lon: 12.086944 },\n { code: \"1441\", name: \"Lerum\", lat: 57.766667, lon: 12.3 },\n { code: \"1442\", name: \"Vårgårda\", lat: 58.033333, lon: 12.8 },\n { code: \"1443\", name: \"Bollebygd\", lat: 57.666667, lon: 12.566667 },\n { code: \"1444\", name: \"Grästorp\", lat: 58.333333, lon: 12.666667 },\n { code: \"1445\", name: \"Essunga\", lat: 58.183333, lon: 12.716667 },\n { code: \"1446\", name: \"Karlsborg\", lat: 58.533333, lon: 14.516667 },\n { code: \"1447\", name: \"Gullspång\", lat: 58.983333, lon: 14.116667 },\n { code: \"1452\", name: \"Tranemo\", lat: 57.483333, lon: 13.35 },\n { code: \"1460\", name: \"Bengtsfors\", lat: 59.033333, lon: 12.216667 },\n { code: \"1461\", name: \"Mellerud\", lat: 58.7, lon: 12.466667 },\n { code: \"1462\", name: \"Lilla Edet\", lat: 58.133333, lon: 12.133333 },\n { code: \"1463\", name: \"Mark\", lat: 57.516667, lon: 12.683333 },\n { code: \"1465\", name: \"Svenljunga\", lat: 57.5, lon: 13.116667 },\n { code: \"1466\", name: \"Herrljunga\", lat: 58.083333, lon: 13.033333 },\n { code: \"1470\", name: \"Vara\", lat: 58.266667, lon: 12.95 },\n { code: \"1471\", name: \"Götene\", lat: 58.533333, lon: 13.483333 },\n { code: \"1472\", name: \"Tibro\", lat: 58.416667, lon: 14.166667 },\n { code: \"1473\", name: \"Töreboda\", lat: 58.716667, lon: 14.133333 },\n { code: \"1480\", name: \"Göteborg\", englishName: \"Gothenburg\", lat: 57.7, lon: 11.933333 },\n { code: \"1481\", name: \"Mölndal\", lat: 57.654167, lon: 12.019167 },\n { code: \"1482\", name: \"Kungälv\", lat: 57.866667, lon: 11.966667 },\n { code: \"1484\", name: \"Lysekil\", lat: 58.283333, lon: 11.433333 },\n { code: \"1485\", name: \"Uddevalla\", lat: 58.35, lon: 11.916667 },\n { code: \"1486\", name: \"Strömstad\", lat: 58.933333, lon: 11.166667 },\n { code: \"1487\", name: \"Vänersborg\", lat: 58.383333, lon: 12.316667 },\n { code: \"1488\", name: \"Trollhättan\", lat: 58.283333, lon: 12.283333 },\n { code: \"1489\", name: \"Alingsås\", lat: 57.933333, lon: 12.533333 },\n { code: \"1490\", name: \"Borås\", lat: 57.716667, lon: 12.933333 },\n { code: \"1491\", name: \"Ulricehamn\", lat: 57.791667, lon: 13.412778 },\n { code: \"1492\", name: \"Åmål\", lat: 59.05, lon: 12.7 },\n { code: \"1493\", name: \"Mariestad\", lat: 58.7, lon: 13.816667 },\n { code: \"1494\", name: \"Lidköping\", lat: 58.5, lon: 13.183333 },\n { code: \"1495\", name: \"Skara\", lat: 58.383333, lon: 13.433333 },\n { code: \"1496\", name: \"Skövde\", lat: 58.383333, lon: 13.85 },\n { code: \"1497\", name: \"Hjo\", lat: 58.3, lon: 14.283333 },\n { code: \"1498\", name: \"Tidaholm\", lat: 58.183333, lon: 13.95 },\n { code: \"1499\", name: \"Falköping\", lat: 58.166667, lon: 13.55 },\n { code: \"1715\", name: \"Kil\", lat: 59.5, lon: 13.316389 },\n { code: \"1730\", name: \"Eda\", lat: 59.883333, lon: 12.283333 },\n { code: \"1737\", name: \"Torsby\", lat: 60.133333, lon: 13 },\n { code: \"1760\", name: \"Storfors\", lat: 59.533333, lon: 14.266667 },\n { code: \"1761\", name: \"Hammarö\", lat: 59.333333, lon: 13.433333 },\n { code: \"1762\", name: \"Munkfors\", lat: 59.833333, lon: 13.533333 },\n { code: \"1763\", name: \"Forshaga\", lat: 59.533333, lon: 13.466667 },\n { code: \"1764\", name: \"Grums\", lat: 59.351667, lon: 13.111389 },\n { code: \"1765\", name: \"Årjäng\", lat: 59.383333, lon: 12.133333 },\n { code: \"1766\", name: \"Sunne\", lat: 59.833333, lon: 13.133333 },\n { code: \"1780\", name: \"Karlstad\", lat: 59.383333, lon: 13.533333 },\n { code: \"1781\", name: \"Kristinehamn\", lat: 59.3, lon: 14.116667 },\n { code: \"1782\", name: \"Filipstad\", lat: 59.716667, lon: 14.166667 },\n { code: \"1783\", name: \"Hagfors\", lat: 60.033333, lon: 13.65 },\n { code: \"1784\", name: \"Arvika\", lat: 59.65, lon: 12.583333 },\n { code: \"1785\", name: \"Säffle\", lat: 59.133333, lon: 12.933333 },\n { code: \"1814\", name: \"Lekeberg\", lat: 59.166667, lon: 14.866667 },\n { code: \"1860\", name: \"Laxå\", lat: 58.988611, lon: 14.6175 },\n { code: \"1861\", name: \"Hallsberg\", lat: 59.066667, lon: 15.116667 },\n { code: \"1862\", name: \"Degerfors\", lat: 59.233333, lon: 14.433333 },\n { code: \"1863\", name: \"Hällefors\", lat: 59.766667, lon: 14.516667 },\n { code: \"1864\", name: \"Ljusnarsberg\", lat: 59.866667, lon: 14.983333 },\n { code: \"1880\", name: \"Örebro\", lat: 59.273889, lon: 15.213333 },\n { code: \"1881\", name: \"Kumla\", lat: 59.116667, lon: 15.133333 },\n { code: \"1882\", name: \"Askersund\", lat: 58.883333, lon: 14.9 },\n { code: \"1883\", name: \"Karlskoga\", lat: 59.325, lon: 14.525 },\n { code: \"1884\", name: \"Nora\", lat: 59.516667, lon: 15.033333 },\n { code: \"1885\", name: \"Lindesberg\", lat: 59.583333, lon: 15.25 },\n { code: \"1904\", name: \"Skinnskatteberg\", lat: 59.833333, lon: 15.683333 },\n { code: \"1907\", name: \"Surahammar\", lat: 59.716667, lon: 16.216667 },\n { code: \"1960\", name: \"Kungsör\", lat: 59.416667, lon: 16.083333 },\n { code: \"1961\", name: \"Hallstahammar\", lat: 59.616667, lon: 16.25 },\n { code: \"1962\", name: \"Norberg\", lat: 60.083333, lon: 15.95 },\n { code: \"1980\", name: \"Västerås\", lat: 59.616667, lon: 16.533333 },\n { code: \"1981\", name: \"Sala\", lat: 59.920417, lon: 16.606111 },\n { code: \"1982\", name: \"Fagersta\", lat: 60, lon: 15.816667 },\n { code: \"1983\", name: \"Köping\", lat: 59.513056, lon: 15.998611 },\n { code: \"1984\", name: \"Arboga\", lat: 59.4, lon: 15.833333 },\n { code: \"2021\", name: \"Vansbro\", lat: 60.516667, lon: 14.216667 },\n { code: \"2023\", name: \"Malung-Sälen\", lat: 60.683333, lon: 13.733333 },\n { code: \"2026\", name: \"Gagnef\", lat: 60.55, lon: 15.133333 },\n { code: \"2029\", name: \"Leksand\", lat: 60.733333, lon: 15 },\n { code: \"2031\", name: \"Rättvik\", lat: 60.883333, lon: 15.133333 },\n { code: \"2034\", name: \"Orsa\", lat: 61.116667, lon: 14.616667 },\n { code: \"2039\", name: \"Älvdalen\", lat: 61.233333, lon: 14.033333 },\n { code: \"2061\", name: \"Smedjebacken\", lat: 60.133333, lon: 15.416667 },\n { code: \"2062\", name: \"Mora\", lat: 61.016667, lon: 14.533333 },\n { code: \"2080\", name: \"Falun\", lat: 60.6, lon: 15.633333 },\n { code: \"2081\", name: \"Borlänge\", lat: 60.482778, lon: 15.436389 },\n { code: \"2082\", name: \"Säter\", lat: 60.35, lon: 15.75 },\n { code: \"2083\", name: \"Hedemora\", lat: 60.283333, lon: 15.983333 },\n { code: \"2084\", name: \"Avesta\", lat: 60.145556, lon: 16.168333 },\n { code: \"2085\", name: \"Ludvika\", lat: 60.133333, lon: 15.183333 },\n { code: \"2101\", name: \"Ockelbo\", lat: 60.883333, lon: 16.716667 },\n { code: \"2104\", name: \"Hofors\", lat: 60.55, lon: 16.283333 },\n { code: \"2121\", name: \"Ovanåker\", lat: 61.383333, lon: 15.816667 },\n { code: \"2132\", name: \"Nordanstig\", lat: 61.983333, lon: 17.066667 },\n { code: \"2161\", name: \"Ljusdal\", lat: 61.833333, lon: 16.083333 },\n { code: \"2180\", name: \"Gävle\", lat: 60.666667, lon: 17.166667 },\n { code: \"2181\", name: \"Sandviken\", lat: 60.616667, lon: 16.783333 },\n { code: \"2182\", name: \"Söderhamn\", lat: 61.3, lon: 17.083333 },\n { code: \"2183\", name: \"Bollnäs\", lat: 61.35, lon: 16.4 },\n { code: \"2184\", name: \"Hudiksvall\", lat: 61.733333, lon: 17.116667 },\n { code: \"2260\", name: \"Ånge\", lat: 62.516667, lon: 15.616667 },\n { code: \"2262\", name: \"Timrå\", lat: 62.5, lon: 17.333333 },\n { code: \"2280\", name: \"Härnösand\", lat: 62.633333, lon: 17.933333 },\n { code: \"2281\", name: \"Sundsvall\", lat: 62.4, lon: 17.316667 },\n { code: \"2282\", name: \"Kramfors\", lat: 62.932167, lon: 17.777167 },\n { code: \"2283\", name: \"Sollefteå\", lat: 63.166667, lon: 17.266667 },\n { code: \"2284\", name: \"Örnsköldsvik\", lat: 63.283333, lon: 18.733333 },\n { code: \"2303\", name: \"Ragunda\", lat: 63.1, lon: 16.35 },\n { code: \"2305\", name: \"Bräcke\", lat: 62.75, lon: 15.416667 },\n { code: \"2309\", name: \"Krokom\", lat: 63.316667, lon: 14.5 },\n { code: \"2313\", name: \"Strömsund\", lat: 63.85, lon: 15.583333 },\n { code: \"2321\", name: \"Åre\", lat: 63.35, lon: 13.466667 },\n { code: \"2326\", name: \"Berg\", lat: 62.766667, lon: 14.45 },\n { code: \"2361\", name: \"Härjedalen\", lat: 62.033333, lon: 14.35 },\n { code: \"2380\", name: \"Östersund\", lat: 63.183333, lon: 14.666667 },\n { code: \"2401\", name: \"Nordmaling\", lat: 63.566667, lon: 19.5 },\n { code: \"2403\", name: \"Bjurholm\", lat: 63.916667, lon: 19.216667 },\n { code: \"2404\", name: \"Vindeln\", lat: 64.2, lon: 19.716667 },\n { code: \"2409\", name: \"Robertsfors\", lat: 64.192014, lon: 20.849513 },\n { code: \"2417\", name: \"Norsjö\", lat: 64.916667, lon: 19.483333 },\n { code: \"2418\", name: \"Malå\", lat: 65.183333, lon: 18.75 },\n { code: \"2421\", name: \"Storuman\", lat: 65.1, lon: 17.1 },\n { code: \"2422\", name: \"Sorsele\", lat: 65.533333, lon: 17.533333 },\n { code: \"2425\", name: \"Dorotea\", lat: 64.266667, lon: 16.416667 },\n { code: \"2460\", name: \"Vännäs\", lat: 63.916667, lon: 19.75 },\n { code: \"2462\", name: \"Vilhelmina\", lat: 64.616667, lon: 16.65 },\n { code: \"2463\", name: \"Åsele\", lat: 64.15, lon: 17.35 },\n { code: \"2480\", name: \"Umeå\", lat: 63.833333, lon: 20.25 },\n { code: \"2481\", name: \"Lycksele\", lat: 64.6, lon: 18.666667 },\n { code: \"2482\", name: \"Skellefteå\", lat: 64.75, lon: 20.95 },\n { code: \"2505\", name: \"Arvidsjaur\", lat: 65.583333, lon: 19.116667 },\n { code: \"2506\", name: \"Arjeplog\", lat: 66.033333, lon: 17.95 },\n { code: \"2510\", name: \"Jokkmokk\", lat: 66.616667, lon: 19.833333 },\n { code: \"2513\", name: \"Överkalix\", lat: 66.35, lon: 22.883333 },\n { code: \"2514\", name: \"Kalix\", lat: 65.85, lon: 23.166667 },\n { code: \"2518\", name: \"Övertorneå\", lat: 66.383333, lon: 23.666667 },\n { code: \"2521\", name: \"Pajala\", lat: 67.183333, lon: 23.366667 },\n { code: \"2523\", name: \"Gällivare\", lat: 67.133333, lon: 20.65 },\n { code: \"2560\", name: \"Älvsbyn\", lat: 65.683333, lon: 21.016667 },\n { code: \"2580\", name: \"Luleå\", lat: 65.584444, lon: 22.153889 },\n { code: \"2581\", name: \"Piteå\", lat: 65.333333, lon: 21.5 },\n { code: \"2582\", name: \"Boden\", lat: 65.833333, lon: 21.716667 },\n { code: \"2583\", name: \"Haparanda\", lat: 65.833333, lon: 24.133333 },\n { code: \"2584\", name: \"Kiruna\", lat: 67.854722, lon: 20.222778 },\n];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { SwedishCounty } from \"./swedish-county.js\";\nimport { MUNICIPALITY_ROWS } from \"./swedish-municipality-data.js\";\n\nconst MAX_INPUT_LENGTH = 100;\nconst MIN_SCAN_NAME_LENGTH = 4;\n\nexport interface MunicipalityDistance {\n readonly municipality: SwedishMunicipality;\n readonly distanceKilometers: number;\n}\n\n/** A Swedish municipality (`kommun`), keyed by SCB's 4-digit municipality code. */\nexport class SwedishMunicipality {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Municipality\",\n localizedName: \"Kommun\",\n emoji: \"\\u{1F3D8}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.scb.se/en/finding-statistics/regional-statistics/regional-divisions/counties-and-municipalities/counties-and-municipalities-in-numerical-order/\",\n ]),\n });\n\n readonly code: string;\n readonly localizedName: string;\n readonly englishName: string;\n readonly county: SwedishCounty;\n readonly coordinate: GeoCoordinate;\n\n private constructor(\n code: string,\n localized: string,\n english: string,\n county: SwedishCounty,\n coord: GeoCoordinate,\n ) {\n this.code = code;\n this.localizedName = localized;\n this.englishName = english;\n this.county = county;\n this.coordinate = coord;\n }\n\n get countyCode(): string {\n return this.county.code;\n }\n get latitude(): number {\n return this.coordinate.latitude;\n }\n get longitude(): number {\n return this.coordinate.longitude;\n }\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): SwedishMunicipality | null {\n if (input == null) return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(trimmed);\n if (digits.length === 4 && BY_CODE.has(digits)) return BY_CODE.get(digits)!;\n\n return BY_NAME.get(trimmed.toLowerCase()) ?? null;\n }\n\n static parse(input: string): SwedishMunicipality {\n const r = SwedishMunicipality.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish municipality.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishMunicipality.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishMunicipality.tryParse(input);\n if (r) return r.localizedName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishMunicipality.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishMunicipality.normalize(input) === input;\n }\n\n /** All 290 Swedish municipalities, ordered by code. */\n static get all(): readonly SwedishMunicipality[] {\n return ALL_MUNICIPALITIES;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishMunicipality>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishMunicipality>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const municipality = SwedishMunicipality.tryParse(m[0]);\n if (!municipality) continue;\n out.push(\n new TextCandidate<SwedishMunicipality>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishMunicipality\",\n category: TextCandidateCategory.Geography,\n normalizedForm: municipality.toNormalizedString(),\n formattedForm: municipality.toString(),\n maskedForm: municipality.localizedName,\n confidence: TextMatchConfidence.Low,\n value: municipality,\n }),\n );\n }\n return out;\n }\n\n static distanceKilometers(a: SwedishMunicipality, b: SwedishMunicipality): number {\n return GeoCoordinate.distanceKilometers(a.coordinate, b.coordinate);\n }\n\n distanceKilometersTo(other: SwedishMunicipality | GeoCoordinate): number {\n const target = other instanceof SwedishMunicipality ? other.coordinate : other;\n return GeoCoordinate.distanceKilometers(this.coordinate, target);\n }\n\n findNeighbors(radiusKm: number): readonly MunicipalityDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: MunicipalityDistance[] = [];\n for (const m of ALL_MUNICIPALITIES) {\n if (m === this) continue;\n const dist = GeoCoordinate.distanceKilometers(this.coordinate, m.coordinate);\n if (dist <= radiusKm) out.push({ municipality: m, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n static findNeighbors(\n coordinate: GeoCoordinate,\n radiusKm: number,\n ): readonly MunicipalityDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: MunicipalityDistance[] = [];\n for (const m of ALL_MUNICIPALITIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, m.coordinate);\n if (dist <= radiusKm) out.push({ municipality: m, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toLocalString(): string {\n return this.localizedName;\n }\n\n equals(other: SwedishMunicipality | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: SwedishMunicipality | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n /** @internal */\n static _new(\n code: string,\n sv: string,\n en: string,\n county: SwedishCounty,\n coord: GeoCoordinate,\n ): SwedishMunicipality {\n return new SwedishMunicipality(code, sv, en, county, coord);\n }\n}\n\nconst ALL_MUNICIPALITIES: readonly SwedishMunicipality[] = MUNICIPALITY_ROWS.map((r) => {\n const county = SwedishCounty.parse(r.code.slice(0, 2));\n const coord = GeoCoordinate.create(r.lat, r.lon);\n return SwedishMunicipality._new(r.code, r.name, r.englishName ?? r.name, county, coord);\n})\n .slice()\n .sort((a, b) => a.code.localeCompare(b.code));\n\nconst BY_CODE = new Map<string, SwedishMunicipality>();\nconst BY_NAME = new Map<string, SwedishMunicipality>();\n\nfor (const m of ALL_MUNICIPALITIES) {\n BY_CODE.set(m.code, m);\n BY_NAME.set(m.localizedName.toLowerCase(), m);\n if (m.englishName.toLowerCase() !== m.localizedName.toLowerCase()) {\n BY_NAME.set(m.englishName.toLowerCase(), m);\n }\n addGenitive(m.localizedName, m);\n if (m.englishName.toLowerCase() !== m.localizedName.toLowerCase()) {\n addGenitive(m.englishName, m);\n }\n}\n\nfunction addGenitive(name: string, m: SwedishMunicipality): void {\n if (name.endsWith(\"s\") || name.endsWith(\"S\")) return;\n const key = (name + \"s\").toLowerCase();\n if (!BY_NAME.has(key)) BY_NAME.set(key, m);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= MIN_SCAN_NAME_LENGTH)\n .sort((a, b) => b.length - a.length)\n .map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n // Unicode-aware word boundaries: \\b in JS is ASCII-only even with /u, so\n // we use look-around on Unicode letters/digits to mimic .NET's \\b behaviour.\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\nconst NAME_PATTERN =\n /^(?:[\\p{L}\\p{M}]{2,}|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\n/**\n * The postal city (`postort`) is the locality associated with a postal code.\n * Normalization applies Swedish-aware title casing.\n */\nexport class AddressCity {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"City\",\n localizedName: \"Postort\",\n emoji: \"\\u{1F3D9}\\uFE0F\",\n sources: Object.freeze([\"https://www.postnord.se/\"]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): AddressCity | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = collapseWhitespace(input);\n if (cleaned.length === 0 || cleaned.length > MAX_INPUT_LENGTH) return null;\n const capitalized = capitalizeEachWord(cleaned);\n if ([...capitalized].some(isDisallowed)) return null;\n if (!NAME_PATTERN.test(capitalized)) return null;\n return new AddressCity(capitalized);\n }\n\n static parse(input: string): AddressCity {\n const r = AddressCity.tryParse(input);\n if (r === null) throw new Error(\"Invalid city name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressCity.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressCity.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressCity.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressCity.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: AddressCity | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressCity | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input\n .split(\" \")\n .filter(Boolean)\n .map((w) => capitalizeHyphenated(w))\n .join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n\nfunction isDisallowed(c: string): boolean {\n return /[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\p{Cn}]/u.test(c);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\nconst ADDRESS_PATTERN = /^[\\p{L}0-9\\s,.:'/-]+$/u;\nconst CARE_OF = /^c[/.]o\\.?\\s+/i;\nconst APARTMENT = /[,\\s]+(?:lgh\\.?|lägenhet|apt\\.?)\\s*(\\d+\\w*)\\s*$/iu;\nconst BOX = /^(?:p\\.?o\\.?\\s*)?box\\s+(\\d{1,7})\\s*$/i;\nconst STREET_NUMBER = /^(.*?)\\s+(\\d+[A-ZÅÄÖ]*)$/u;\n\n/**\n * A street address (`gatuadress`). Extracts care-of (c/o), apartment number\n * (lgh/apt), and post box (Box) when present.\n */\nexport class AddressStreet {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Street Address\",\n localizedName: \"Gatuadress\",\n emoji: \"\\u{1F6E3}\\uFE0F\",\n sources: Object.freeze([\"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: string;\n readonly streetName: string | null;\n readonly streetNumber: string | null;\n readonly apartmentNumber: string | null;\n readonly careOf: string | null;\n readonly postBox: string | null;\n\n private constructor(\n street: string,\n streetName: string | null,\n streetNumber: string | null,\n apartmentNumber: string | null,\n careOf: string | null,\n postBox: string | null,\n ) {\n this.street = street;\n this.streetName = streetName;\n this.streetNumber = streetNumber;\n this.apartmentNumber = apartmentNumber;\n this.careOf = careOf;\n this.postBox = postBox;\n }\n\n get isPostBox(): boolean {\n return this.postBox !== null;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { city?: string | null; zipCode?: string | null },\n ): AddressStreet | null {\n if (input == null || input.trim() === \"\") return null;\n\n let text = collapseWhitespace(input);\n if (text.length === 0 || text.length > MAX_INPUT_LENGTH) return null;\n\n let careOf: string | null = null;\n const co = text.match(CARE_OF);\n if (co) {\n const after = text.slice(co[0].length);\n const comma = after.indexOf(\",\");\n if (comma >= 0) {\n careOf = after.slice(0, comma).trim();\n text = after.slice(comma + 1).trim();\n } else {\n careOf = after.trim();\n text = \"\";\n }\n if (careOf.trim() === \"\") careOf = null;\n }\n\n if (text.trim() !== \"\") {\n const boxText = collapseWhitespace(text.replace(/,/g, \" \"));\n const boxMatch = boxText.match(BOX);\n if (boxMatch) {\n const postBox = boxMatch[1]!;\n return new AddressStreet(`Box ${postBox}`, null, null, null, careOf, postBox);\n }\n }\n\n if (text.trim() === \"\") {\n if (careOf !== null) {\n return new AddressStreet(`c/o ${careOf}`, null, null, null, careOf, null);\n }\n return null;\n }\n\n let apartment: string | null = null;\n const apt = text.match(APARTMENT);\n if (apt) {\n apartment = apt[1]!;\n text = text.slice(0, apt.index!).trim();\n }\n\n const normalized = normalizeStreet(text, options?.city ?? null, options?.zipCode ?? null);\n if (!validateStreet(normalized)) return null;\n\n let streetName: string | null = null;\n let streetNumber: string | null = null;\n const num = normalized.match(STREET_NUMBER);\n if (num) {\n streetName = num[1]!;\n streetNumber = num[2]!;\n }\n\n return new AddressStreet(normalized, streetName, streetNumber, apartment, careOf, null);\n }\n\n static parse(input: string): AddressStreet {\n const r = AddressStreet.tryParse(input);\n if (r === null) throw new Error(\"Invalid street address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressStreet.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressStreet.tryParse(input);\n if (r) return r.street;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressStreet.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressStreet.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.street;\n }\n toString(): string {\n return this.street;\n }\n\n equals(other: AddressStreet | null | undefined): boolean {\n return other != null && this.street === other.street;\n }\n compareTo(other: AddressStreet | null | undefined): number {\n if (other == null) return 1;\n return this.street < other.street ? -1 : this.street > other.street ? 1 : 0;\n }\n}\n\nfunction normalizeStreet(input: string, city: string | null, zip: string | null): string {\n let cleaned = collapseWhitespace(input);\n if (cleaned === \"\") return \"\";\n cleaned = collapseWhitespace(cleaned.replace(/,/g, \" \"));\n cleaned = cleaned.replace(/(\\p{L})(\\d+\\p{L}*)$/u, \"$1 $2\");\n cleaned = collapseWhitespace(cleaned);\n let stripped = removeTrailingCityAndZip(cleaned, city, zip);\n if (shouldSentenceCase(stripped)) stripped = toSentenceCase(stripped);\n stripped = uppercaseHouseNumberSuffixes(stripped);\n return stripped;\n}\n\nfunction validateStreet(addr: string): boolean {\n if (!addr || addr.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(addr)) return false;\n if (addr !== addr.trim()) return false;\n if (addr.includes(\" \")) return false;\n if (addr.length < 5 || addr.length > 50) return false;\n if (/[\\p{Cn}]/u.test(addr)) return false;\n return ADDRESS_PATTERN.test(addr);\n}\n\nfunction shouldSentenceCase(input: string): boolean {\n if (!input || input.trim() === \"\") return false;\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return false;\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(PrimitivesDefaults.culture));\n let firstLetterIndex = -1;\n for (let i = 0; i < input.length; i++) {\n if (/\\p{L}/u.test(input[i]!)) {\n firstLetterIndex = i;\n break;\n }\n }\n if (firstLetterIndex === -1) return allUpper;\n const startsWithUpper =\n input[firstLetterIndex] ===\n input[firstLetterIndex]!.toLocaleUpperCase(PrimitivesDefaults.culture);\n return allUpper || !startsWithUpper;\n}\n\nfunction toSentenceCase(input: string): string {\n if (!input || input.trim() === \"\") return \"\";\n const culture = PrimitivesDefaults.culture;\n const lowered = input.toLocaleLowerCase(culture);\n let out = lowered;\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n out = lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n break;\n }\n }\n return uppercaseHouseNumberSuffixes(out);\n}\n\nfunction uppercaseHouseNumberSuffixes(input: string): string {\n return input.replace(\n /(\\d+)(\\p{L}+)(?=[^\\p{L}\\d]|$)/gu,\n (_, d: string, s: string) => d + s.toLocaleUpperCase(PrimitivesDefaults.culture),\n );\n}\n\nfunction removeTrailingCityAndZip(street: string, city: string | null, zip: string | null): string {\n const cityNorm = city == null ? \"\" : collapseWhitespace(city);\n const zipNorm = zip == null ? \"\" : collapseWhitespace(zip);\n const cityU = cityNorm.toUpperCase();\n const zipU = zipNorm.toUpperCase();\n const zipNoSpaceU = zipNorm.replace(/ /g, \"\").toUpperCase();\n const orig = collapseWhitespace(street.replace(/,/g, \" \"));\n const upper = orig.toUpperCase();\n\n const has = (s: string) => s.length > 0;\n const removeTail = (s: string, tail: number) =>\n tail <= 0 || tail > s.length ? s : collapseWhitespace(s.slice(0, s.length - tail));\n\n if (has(cityU) && has(zipU) && upper.endsWith(` ${zipU} ${cityU}`))\n return removeTail(orig, (zipU + \" \" + cityU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU} ${cityU}`))\n return removeTail(orig, (zipNoSpaceU + \" \" + cityU).length);\n if (has(cityU) && has(zipU) && upper.endsWith(` ${cityU} ${zipU}`))\n return removeTail(orig, (cityU + \" \" + zipU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${cityU} ${zipNoSpaceU}`))\n return removeTail(orig, (cityU + \" \" + zipNoSpaceU).length);\n if (has(cityU) && upper.endsWith(` ${cityU}`)) return removeTail(orig, cityU.length);\n if (has(zipU) && upper.endsWith(` ${zipU}`)) return removeTail(orig, zipU.length);\n if (has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU}`))\n return removeTail(orig, zipNoSpaceU.length);\n return orig;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SWEDISH_DIGITS = /^\\d{5}$/;\nconst INTERNATIONAL =\n /^(?:[0-9]{3}|[0-9]{4}|[0-9]{3}\\s?[0-9]{2}|[0-9]{6}|[0-9]{7}|[0-9]{4}\\s?[A-Z]{2}|[A-Z]{3}\\s?[0-9]{4}|980[0-9]{2}|(?:[A-Z][0-9]|[A-Z][0-9][A-Z]|[A-Z]{2}[0-9]|[A-Z]{2}[0-9][A-Z])\\s?[0-9][A-Z]{2}|[A-Z0-9]{7}|[A-Z]{2}[0-9]{3}|LT-?[0-9]{5}|LV-?[0-9]{4}|MD-?[0-9]{4}|DK[-\\s]?[0-9]{4})$/;\n\nconst SCAN = /(?<!\\d)\\d{3}\\s?\\d{2}(?!\\d)/g;\n\n/**\n * A postal code (`postnummer`). Swedish 5-digit codes (formatted `NNN NN`) and\n * many international formats (Danish `DK-9000`, Dutch `1012 AB`, British `W1A 1AB`)\n * are accepted.\n */\nexport class AddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Zip Code\",\n localizedName: \"Postnummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly country: Country | null;\n\n private constructor(value: string, formatted: string, country: Country | null) {\n this.value = value;\n this.formatted = formatted;\n this.country = country;\n }\n\n get isSwedish(): boolean {\n return this.country?.alpha2Code === \"SE\";\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): AddressZipCode | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const country = options?.country ?? null;\n const effectiveCountry = country?.alpha2Code ?? PrimitivesDefaults.countryAlpha2Code;\n\n if (country?.alpha2Code === \"SE\") return AddressZipCode.tryParseSwedish(sanitized);\n\n if (country) {\n const intl = AddressZipCode.tryParseInternational(sanitized, country);\n if (intl) return intl;\n return null;\n }\n\n if (effectiveCountry === \"SE\") {\n return (\n AddressZipCode.tryParseSwedish(sanitized) ?? AddressZipCode.tryParseInternational(sanitized)\n );\n }\n return (\n AddressZipCode.tryParseInternational(sanitized) ?? AddressZipCode.tryParseSwedish(sanitized)\n );\n }\n\n static parse(input: string, options?: { country?: Country | null }): AddressZipCode {\n const r = AddressZipCode.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid zip code.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): boolean {\n return AddressZipCode.tryParse(input, options) !== null;\n }\n\n /** Parse as a Swedish 5-digit postal code only. */\n static tryParseSwedish(input: string | null | undefined): AddressZipCode | null {\n if (input == null) return null;\n let cleaned = input.toString();\n for (let i = 0; i < cleaned.length; i++) {\n if (/\\p{L}/u.test(cleaned[i]!)) {\n cleaned = cleaned.slice(0, i).trimEnd();\n break;\n }\n }\n if (cleaned.length === 0) return null;\n const digits = keepDigits(cleaned);\n if (!SWEDISH_DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n return new AddressZipCode(digits, formatted, Country.Sweden);\n }\n\n /** Parse as a non-Swedish international postal code. */\n static tryParseInternational(\n input: string | null | undefined,\n country: Country | null = null,\n ): AddressZipCode | null {\n if (input == null) return null;\n const trimmed = input.toString();\n if (trimmed.length === 0) return null;\n if (/[\\p{Cc}]/u.test(trimmed)) return null;\n if (![...trimmed].every((c) => /[\\p{L}\\p{N}]/u.test(c) || /\\s/.test(c) || c === \"-\")) {\n return null;\n }\n const normalized = normalizeInternational(trimmed);\n if (!normalized) return null;\n if (!INTERNATIONAL.test(normalized)) return null;\n const resolved = country ?? inferCountryFromPrefix(normalized);\n return new AddressZipCode(normalized, normalized, resolved);\n }\n\n static format(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressZipCode.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<AddressZipCode>[] {\n if (!text) return [];\n const out: TextCandidate<AddressZipCode>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const zip = AddressZipCode.tryParseSwedish(m[0]);\n if (!zip) continue;\n out.push(\n new TextCandidate<AddressZipCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"AddressZipCode\",\n category: TextCandidateCategory.Contact,\n normalizedForm: zip.toNormalizedString(),\n formattedForm: zip.toString(),\n maskedForm: maskZip(zip),\n confidence: TextMatchConfidence.Low,\n value: zip,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n equals(other: AddressZipCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressZipCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction normalizeInternational(input: string): string {\n let cleaned = input.trim().toUpperCase().replace(/\\s+/g, \"\");\n const digits = keepDigits(cleaned);\n if (cleaned.startsWith(\"DK\") && digits.length === 4) return `DK-${digits}`;\n if (cleaned.startsWith(\"LV\") && digits.length === 4) return `LV-${digits}`;\n if (cleaned.startsWith(\"MD\") && digits.length === 4) return `MD-${digits}`;\n if (cleaned.startsWith(\"AD\") && digits.length === 3) return `AD${digits}`;\n cleaned = cleaned.replace(/[^A-Z0-9-]/g, \"\");\n if (/^\\d+-\\d+$/.test(cleaned)) return cleaned.replace(/-/g, \"\");\n return cleaned;\n}\n\nfunction inferCountryFromPrefix(normalized: string): Country | null {\n if (normalized.startsWith(\"DK-\")) return Country.Denmark;\n if (normalized.startsWith(\"LV-\")) return Country.Latvia;\n if (normalized.startsWith(\"MD-\")) return Country.tryParse(\"MD\");\n if (normalized.startsWith(\"AD\") && normalized.length === 5 && /^\\d+$/.test(normalized.slice(2))) {\n return Country.tryParse(\"AD\");\n }\n return null;\n}\n\n/** Internal masking for zip codes used in scan results. */\nexport function maskZip(zip: AddressZipCode): string {\n const f = zip.formatted;\n return f.replace(/\\d/g, \"*\");\n}\n","import type { Country } from \"../geography/index.js\";\nimport type { Address } from \"./address.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\n\n/**\n * A country-specific address implementation, registered by the module that\n * defines it.\n *\n * `Address` lives below the country-specific address types in the import graph,\n * so it cannot reference them directly. Each implementation registers itself on\n * module load instead, mirroring the static registry the .NET `Address` type\n * builds at type-initialization time.\n *\n * Registration happens in `registerDefaultCountryAddresses()`, which every\n * package entry point calls via `contact/index.ts`. Code inside this package\n * that deep-imports `address.ts` alone will only see the countries it\n * registered itself.\n */\nexport interface CountryAddressRegistration {\n readonly country: Country;\n readonly tryWrap: (address: Address) => ICountryAddress | null;\n readonly formatZip: (value: string) => string | null;\n}\n\nconst registry = new Map<string, CountryAddressRegistration>();\n\n/** Registration order determines the order of `Address.supportedCountryAddressTypes`. */\nexport function registerCountryAddress(registration: CountryAddressRegistration): void {\n registry.set(registration.country.alpha2Code.toUpperCase(), registration);\n}\n\nexport function getCountryAddressRegistration(\n alpha2Code: string,\n): CountryAddressRegistration | null {\n return registry.get(alpha2Code.toUpperCase()) ?? null;\n}\n\nexport function getRegisteredCountryAddressCountries(): readonly Country[] {\n return Object.freeze([...registry.values()].map((r) => r.country));\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\nimport {\n getCountryAddressRegistration,\n getRegisteredCountryAddressCountries,\n} from \"./country-address-registry.js\";\n\nconst MAX_INPUT_LENGTH = 1000;\n\n/** A complete address combining street, zip, city and country. */\nexport class Address {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Address\",\n localizedName: \"Adress\",\n emoji: \"\\u{1F3E0}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://www.lantmateriet.se/\",\n \"https://www.iso.org/iso-3166-country-codes.html\",\n ]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: AddressZipCode | null;\n readonly city: AddressCity | null;\n readonly country: Country | null;\n\n constructor(\n street: AddressStreet,\n zipCode: AddressZipCode | null = null,\n city: AddressCity | null = null,\n country: Country | null = null,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.country = country;\n }\n\n get careOf(): string | null {\n return this.street.careOf;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n static tryParse(input: string | null | undefined): Address | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): Address | null;\n static tryParse(arg: unknown): Address | null {\n if (typeof arg === \"object\" && arg !== null) {\n const p = arg as {\n street?: string | null;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n };\n const cityM = p.city != null && p.city.trim() !== \"\" ? AddressCity.tryParse(p.city) : null;\n const zipM =\n p.zipCode != null && p.zipCode.trim() !== \"\" ? AddressZipCode.tryParse(p.zipCode) : null;\n const countryM =\n p.country != null && p.country.trim() !== \"\" ? Country.tryParse(p.country) : null;\n if (p.zipCode != null && p.zipCode.trim() !== \"\" && zipM === null) return null;\n if (p.city != null && p.city.trim() !== \"\" && cityM === null) return null;\n if (p.country != null && p.country.trim() !== \"\" && countryM === null) return null;\n const streetM = AddressStreet.tryParse(p.street, {\n city: cityM?.value ?? null,\n zipCode: zipM?.formatted ?? zipM?.value ?? null,\n });\n if (streetM === null) return null;\n return new Address(streetM, zipM, cityM, countryM);\n }\n\n const input = arg as string | null | undefined;\n if (input == null || input.trim() === \"\") return null;\n const trimmed = input.trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const segments = splitSegments(trimmed);\n if (segments.length === 0) return null;\n\n let country: Country | null = null;\n country = consumeCountry(segments, country);\n\n let zipCode: AddressZipCode | null = null;\n let city: AddressCity | null = null;\n if (segments.length > 0) {\n const r = consumeZipAndCity(segments);\n if (r) {\n zipCode = r.zipCode;\n city = r.city;\n }\n }\n\n let streetText = segments.join(\", \");\n if (zipCode === null || city === null) {\n const ext = extractTrailingZipCity(streetText);\n if (ext) {\n streetText = ext.street;\n zipCode = zipCode ?? ext.zipCode;\n city = city ?? ext.city;\n }\n }\n\n if (streetText.trim() === \"\") return null;\n const street = AddressStreet.tryParse(streetText, {\n city: city?.value ?? null,\n zipCode: zipCode?.formatted ?? zipCode?.value ?? null,\n });\n if (street === null) return null;\n return new Address(street, zipCode, city, country);\n }\n\n static parse(input: string): Address {\n const r = Address.tryParse(input);\n if (r === null) throw new Error(\"Invalid address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Address.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Address.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish-style addresses.\n *\n * Results are heuristic candidates and can include false positives. Zip-code\n * anchored matches receive medium confidence, while street-only matches\n * receive low confidence.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Address>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<Address>[] = [];\n const covered: Array<[number, number]> = [];\n\n collectAddressMatches(\n text,\n ZIP_ANCHORED_SCAN_PATTERN,\n TextMatchConfidence.Medium,\n results,\n covered,\n );\n collectAddressMatches(\n text,\n STREET_ONLY_SCAN_PATTERN,\n TextMatchConfidence.Low,\n results,\n covered,\n );\n\n return results.sort((a, b) => a.startIndex - b.startIndex);\n }\n\n toNormalizedString(): string {\n const parts: string[] = [this.buildStreetLine()];\n if (this.zipCode) parts.push(this.zipCode.value);\n if (this.city) parts.push(this.city.value);\n if (this.country) parts.push(this.country.alpha2Code);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const useEnglish = !PrimitivesDefaults.useLocalizedDisplayNames;\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) lines.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n lines.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return lines.join(\"\\n\");\n }\n\n toDisplayString(): string {\n return this.buildSingleLine(!PrimitivesDefaults.useLocalizedDisplayNames);\n }\n toEnglishString(): string {\n return this.buildSingleLine(true);\n }\n toNativeString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && !isSweden(this.country)) parts.push(this.country.nativeName);\n return parts.join(\", \");\n }\n\n toString(): string {\n return this.toDisplayString();\n }\n\n toDomesticString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) parts.push(locality);\n return parts.join(\", \");\n }\n\n /**\n * Multi-line form without the country line, using the country's own zip-code\n * formatting when a country-specific address type is registered.\n */\n toDomesticMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) lines.push(locality);\n return lines.join(\"\\n\");\n }\n\n /**\n * Wraps this address in its country-specific type when the country is known\n * and an implementation is registered, otherwise `null`.\n */\n asCountryAddress(): ICountryAddress | null {\n if (this.country === null) return null;\n return getCountryAddressRegistration(this.country.alpha2Code)?.tryWrap(this) ?? null;\n }\n\n /** Countries that have a dedicated country-specific address type. */\n static get supportedCountryAddressTypes(): readonly Country[] {\n return getRegisteredCountryAddressCountries();\n }\n\n private buildStreetLine(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n return parts.join(\", \");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n private buildLocalityLine(): string | null {\n let s = \"\";\n if (this.zipCode) s += this.zipCode.formatted;\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private buildDomesticLocalityLine(): string | null {\n let s = this.countryFormattedZip() ?? this.zipCode?.formatted ?? \"\";\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private countryFormattedZip(): string | null {\n if (this.zipCode === null || this.country === null) return null;\n return (\n getCountryAddressRegistration(this.country.alpha2Code)?.formatZip(this.zipCode.value) ?? null\n );\n }\n\n private buildSingleLine(useEnglish: boolean): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n parts.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return parts.join(\", \");\n }\n}\n\nfunction isSweden(c: Country): boolean {\n return c.alpha2Code.toUpperCase() === \"SE\";\n}\n\nconst STREET_SUFFIX_PATTERN = String.raw`(?:gatan|gata|vägen|väg|allén|allé|torget|torg|platsen|plats|stigen|stig|gränden|gränd|gången|gång|leden|led|backen|backe|kajen|kaj|bron|plan|stråket|terrassen|ringen|parken|hamnen)`;\n\nconst STREET_NAME_PATTERN =\n String.raw`(?:[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]+\\s+)*[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]*` +\n STREET_SUFFIX_PATTERN;\n\nconst ZIP_ANCHORED_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>(?:c\\/o\\s+[\\p{L}\\p{M} .'-]+,\\s*)?` +\n STREET_NAME_PATTERN +\n String.raw`\\s+\\d{1,4}[\\p{L}]?,?\\s+\\d{3}\\s?\\d{2}\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+(?:\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+)*(?:,\\s*(?:SE|Sverige|Sweden))?)`,\n \"gu\",\n);\n\nconst STREET_ONLY_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>` + STREET_NAME_PATTERN + String.raw`\\s+\\d{1,4}[\\p{L}]?)`,\n \"gu\",\n);\n\nfunction collectAddressMatches(\n text: string,\n pattern: RegExp,\n confidence: TextMatchConfidence,\n results: TextCandidate<Address>[],\n covered: Array<[number, number]>,\n): void {\n pattern.lastIndex = 0;\n for (const match of text.matchAll(pattern)) {\n const candidateText = match.groups?.candidate ?? match[0];\n const startIndex = match.index ?? 0;\n const endIndex = startIndex + candidateText.length;\n if (covered.some(([start, end]) => startIndex < end && start < endIndex)) continue;\n\n const value = Address.tryParse(candidateText);\n if (!value) continue;\n\n covered.push([startIndex, endIndex]);\n results.push(\n new TextCandidate({\n startIndex,\n length: candidateText.length,\n originalText: candidateText,\n typeName: \"Address\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskAddressForScan(value),\n confidence,\n value,\n }),\n );\n }\n}\n\nfunction maskAddressForScan(address: Address): string {\n return address.toString().replace(/\\d/g, \"*\");\n}\n\nfunction splitSegments(input: string): string[] {\n return input\n .replace(/\\r/g, \"\\n\")\n .split(/[\\n,]/)\n .map((s) => collapseWhitespace(s))\n .filter((s) => s !== \"\");\n}\n\nfunction consumeCountry(segments: string[], current: Country | null): Country | null {\n if (segments.length === 0 || current !== null) return current;\n const last = segments[segments.length - 1]!;\n const direct = Country.tryParse(last);\n if (direct) {\n segments.pop();\n return direct;\n }\n const tokens = last.split(\" \").filter((t) => t !== \"\");\n for (let n = Math.min(5, tokens.length); n >= 1; n--) {\n const suffix = tokens.slice(tokens.length - n).join(\" \");\n const parsed = Country.tryParse(suffix);\n if (!parsed) continue;\n const prefix = tokens.slice(0, tokens.length - n).join(\" \");\n if (prefix.trim() === \"\") segments.pop();\n else segments[segments.length - 1] = prefix;\n return parsed;\n }\n return current;\n}\n\nfunction consumeZipAndCity(\n segments: string[],\n): { zipCode: AddressZipCode; city: AddressCity } | null {\n if (segments.length === 0) return null;\n const last = segments[segments.length - 1]!;\n const r = parseZipAndCity(last);\n if (!r) return null;\n segments.pop();\n return r;\n}\n\nfunction parseZipAndCity(input: string): { zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const zip = tokens.slice(0, n).join(\" \");\n const city = tokens.slice(n).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n const c = AddressCity.tryParse(city);\n if (z && c) return { zipCode: z, city: c };\n }\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const cityP = tokens.slice(0, tokens.length - n).join(\" \");\n const zipS = tokens.slice(tokens.length - n).join(\" \");\n const z = AddressZipCode.tryParse(zipS);\n const c = AddressCity.tryParse(cityP);\n if (z && c) return { zipCode: z, city: c };\n }\n return null;\n}\n\nfunction extractTrailingZipCity(\n input: string,\n): { street: string; zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 3) return null;\n for (let zipStart = tokens.length - 2; zipStart >= 1; zipStart--) {\n for (let zipCount = 1; zipCount <= Math.min(3, tokens.length - zipStart - 1); zipCount++) {\n const zip = tokens.slice(zipStart, zipStart + zipCount).join(\" \");\n const city = tokens.slice(zipStart + zipCount).join(\" \");\n const street = tokens.slice(0, zipStart).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n if (!z) continue;\n const c = AddressCity.tryParse(city);\n if (!c) continue;\n if (street.trim() === \"\") continue;\n return { street, zipCode: z, city: c };\n }\n }\n return null;\n}\n","import { Country } from \"../geography/index.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\n\n/** Common interface for all country-specific zip code types. */\nexport interface ICountryAddressZipCode {\n readonly country: Country;\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n toNormalizedString(): string;\n toString(): string;\n}\n\n/** Common interface for all country-specific address types. */\nexport interface ICountryAddress {\n readonly country: Country;\n readonly street: AddressStreet;\n readonly countryZipCode: ICountryAddressZipCode;\n readonly city: AddressCity;\n readonly address: Address;\n readonly careOf: string | null;\n readonly postBox: string | null;\n readonly isPostBox: boolean;\n readonly value: string;\n readonly formatted: string;\n toNormalizedString(): string;\n toMultilineString(): string;\n toString(): string;\n}\n\n/** Abstract base class for country-specific zip code types. */\nexport abstract class CountryAddressZipCodeBase implements ICountryAddressZipCode {\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n\n abstract get country(): Country;\n\n protected constructor(value: string, formatted: string, zipCode: AddressZipCode) {\n this.value = value;\n this.formatted = formatted;\n this.zipCode = zipCode;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n}\n\n/** Abstract base class for country-specific address types. */\nexport abstract class CountryAddressBase implements ICountryAddress {\n readonly street: AddressStreet;\n readonly city: AddressCity;\n readonly address: Address;\n\n abstract get countryZipCode(): ICountryAddressZipCode;\n\n get country(): Country {\n return this.address.country!;\n }\n get careOf(): string | null {\n return this.street.careOf;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n protected constructor(street: AddressStreet, city: AddressCity, address: Address) {\n this.street = street;\n this.city = city;\n this.address = address;\n }\n\n toNormalizedString(): string {\n return this.address.toNormalizedString();\n }\n\n toString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.street.street);\n parts.push(`${this.countryZipCode.formatted} ${this.city.value}`);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.street.street);\n lines.push(`${this.countryZipCode.formatted} ${this.city.value}`);\n return lines.join(\"\\n\");\n }\n}\n\n/**\n * Validates and unwraps a generic {@link Address} for a specific country, then constructs\n * a typed country-specific address. Used by every `XxxAddress.tryParse` implementation.\n */\nexport function tryWrapCountryAddress<TZip, TAddr>(\n address: Address,\n alpha2: string,\n defaultCountry: Country,\n tryParseZip: (value: string) => TZip | null,\n factory: (street: AddressStreet, zip: TZip, city: AddressCity, address: Address) => TAddr,\n): TAddr | null {\n if (address.country && address.country.alpha2Code.toUpperCase() !== alpha2.toUpperCase()) {\n return null;\n }\n if (address.zipCode === null || address.city === null) return null;\n const zip = tryParseZip(address.zipCode.value);\n if (zip === null) return null;\n const withCountry =\n address.country !== null\n ? address\n : new Address(address.street, address.zipCode, address.city, defaultCountry);\n return factory(address.street, zip, address.city, withCountry);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport {\n CountryAddressBase,\n ICountryAddress,\n ICountryAddressZipCode,\n tryWrapCountryAddress,\n} from \"./country-address.js\";\nimport { CountryZipCodeStatic } from \"./country-zip-code-factory.js\";\n\nexport interface CountryAddressConfig<TZip extends ICountryAddressZipCode> {\n englishName: string;\n localizedName: string;\n emoji: string;\n sources: readonly string[];\n country: Country;\n invalidMessage: string;\n zipCode: CountryZipCodeStatic<TZip>;\n}\n\nclass CountryAddress<TZip extends ICountryAddressZipCode> extends CountryAddressBase {\n readonly zipCode: TZip;\n constructor(street: AddressStreet, zipCode: TZip, city: AddressCity, address: Address) {\n super(street, city, address);\n this.zipCode = zipCode;\n }\n override get countryZipCode(): ICountryAddressZipCode {\n return this.zipCode;\n }\n}\n\nexport interface CountryAddressStatic<TZip extends ICountryAddressZipCode> {\n readonly typeInfo: PrimitiveTypeInfo;\n readonly country: Country;\n /** The country's zip-code type. Used by the country-address registry. */\n readonly zipCodeType: CountryZipCodeStatic<TZip>;\n /** Wraps an already-parsed {@link Address}. Used by the country-address registry. */\n tryWrap(address: Address): (ICountryAddress & { readonly zipCode: TZip }) | null;\n tryParse(input: string | null | undefined): (ICountryAddress & { readonly zipCode: TZip }) | null;\n tryParseStructured(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): (ICountryAddress & { readonly zipCode: TZip }) | null;\n parse(input: string): ICountryAddress;\n isValid(input: string | null | undefined): boolean;\n format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n isNormalized(input: string | null | undefined): boolean;\n}\n\nexport function defineCountryAddress<TZip extends ICountryAddressZipCode>(\n config: CountryAddressConfig<TZip>,\n): CountryAddressStatic<TZip> {\n const typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: config.englishName,\n localizedName: config.localizedName,\n emoji: config.emoji,\n sources: Object.freeze([...config.sources]),\n });\n\n const tryWrap = (address: Address): CountryAddress<TZip> | null =>\n tryWrapCountryAddress(\n address,\n config.country.alpha2Code,\n config.country,\n (v) => config.zipCode.tryParse(v),\n (s, z, c, a) => new CountryAddress<TZip>(s, z, c, a),\n );\n\n const tryParse = (input: string | null | undefined): CountryAddress<TZip> | null => {\n const a = Address.tryParse(input);\n if (a === null) return null;\n return tryWrap(a);\n };\n\n const stat: CountryAddressStatic<TZip> = {\n typeInfo,\n country: config.country,\n zipCodeType: config.zipCode,\n tryWrap,\n tryParse,\n tryParseStructured(parts) {\n const a = Address.tryParse(parts);\n if (a === null) return null;\n return tryWrap(a);\n },\n parse(input) {\n const r = tryParse(input);\n if (r === null) throw new Error(config.invalidMessage);\n return r;\n },\n isValid(input) {\n return tryParse(input) !== null;\n },\n format(input, options) {\n const r = 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 normalize(input, options) {\n const r = tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n },\n isNormalized(input) {\n return input != null && stat.normalize(input) === input;\n },\n };\n return stat;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport { CountryAddressZipCodeBase, ICountryAddressZipCode } from \"./country-address.js\";\n\nexport interface CountryZipCodeConfig {\n englishName: string;\n localizedName: string;\n emoji: string;\n sources: readonly string[];\n country: Country;\n invalidMessage: string;\n parseRaw: (input: string) => { value: string; formatted: string } | null;\n}\n\nexport interface CountryZipCodeStatic<T extends ICountryAddressZipCode> {\n readonly typeInfo: PrimitiveTypeInfo;\n readonly country: Country;\n tryParse(input: string | null | undefined): T | null;\n parse(input: string): T;\n isValid(input: string | null | undefined): boolean;\n format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n isNormalized(input: string | null | undefined): boolean;\n}\n\nclass CountryZipCode extends CountryAddressZipCodeBase {\n readonly _country: Country;\n constructor(value: string, formatted: string, zipCode: AddressZipCode, country: Country) {\n super(value, formatted, zipCode);\n this._country = country;\n }\n override get country(): Country {\n return this._country;\n }\n}\n\n/**\n * Build a country-specific zip code class with static `tryParse`, `parse`,\n * `isValid`, `format`, `normalize`, `isNormalized`, and an `instanceof` guard.\n */\nexport function defineCountryZipCode(config: CountryZipCodeConfig): {\n Class: typeof CountryZipCode;\n static: CountryZipCodeStatic<CountryZipCode>;\n} {\n const typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: config.englishName,\n localizedName: config.localizedName,\n emoji: config.emoji,\n sources: Object.freeze([...config.sources]),\n });\n\n function tryParse(input: string | null | undefined): CountryZipCode | null {\n if (input == null || input.trim() === \"\") return null;\n const r = config.parseRaw(input);\n if (r === null) return null;\n const az = AddressZipCode.tryParseInternational(r.formatted, config.country);\n if (az === null) return null;\n return new CountryZipCode(r.value, r.formatted, az, config.country);\n }\n\n const stat: CountryZipCodeStatic<CountryZipCode> = {\n typeInfo,\n country: config.country,\n tryParse,\n parse(input: string): CountryZipCode {\n const r = tryParse(input);\n if (r === null) throw new Error(config.invalidMessage);\n return r;\n },\n isValid(input) {\n return tryParse(input) !== null;\n },\n format(input, options) {\n const r = 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 normalize(input, options) {\n const r = 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 isNormalized(input) {\n return input != null && stat.normalize(input) === input;\n },\n };\n return { Class: CountryZipCode, static: stat };\n}\n\nconst onlyDigits = (s: string): string => [...s].filter((c) => c >= \"0\" && c <= \"9\").join(\"\");\n\n/** Helper: digits-only with fixed length, formatted == value. */\nexport function fixedDigits(length: number) {\n return (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== length) return null;\n return { value: d, formatted: d };\n };\n}\n\n/** Helper: digits-only, formatted with separator at given position (e.g. NN-NNN). */\nexport function digitsWithSeparator(length: number, splitAt: number, sep: string) {\n return (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== length) return null;\n return { value: d, formatted: d.slice(0, splitAt) + sep + d.slice(splitAt) };\n };\n}\n\n/** Helper: fixed digits, value is digits, formatted has space at split. */\nexport function digitsWithSpace(length: number, splitAt: number) {\n return digitsWithSeparator(length, splitAt, \" \");\n}\n\n/** Helper: digits with prefix like `LV-NNNN`, value compact (no prefix), formatted with prefix. */\nexport function digitsWithPrefix(length: number, prefix: string) {\n return (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().replace(prefix, \"\").replace(/[\\s-]/g, \"\");\n const d = onlyDigits(cleaned);\n if (d.length !== length) return null;\n return { value: d, formatted: `${prefix}${d}` };\n };\n}\n\nexport { onlyDigits };\n","import { Country } from \"../geography/index.js\";\nimport {\n defineCountryZipCode,\n digitsWithPrefix,\n digitsWithSeparator,\n digitsWithSpace,\n fixedDigits,\n onlyDigits,\n} from \"./country-zip-code-factory.js\";\n\nconst dutch = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().replace(/-/g, \"\").replace(\"NL\", \"\");\n const m = /^\\s*(\\d{4})\\s*([A-Z]{2})\\s*$/.exec(cleaned);\n if (!m) return null;\n return { value: `${m[1]}${m[2]}`, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst british = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]{1,2}\\d[A-Z\\d]?)(\\d[A-Z]{2})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst irish = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]\\d{2})([A-Z\\d]{4})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst maltese = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]{3})(\\d{4})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst portuguese = (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== 7) return null;\n return { value: d, formatted: `${d.slice(0, 4)}-${d.slice(4)}` };\n};\n\nconst SwedishLessZipFactory = (\n englishName: string,\n localizedName: string,\n emoji: string,\n sources: readonly string[],\n country: Country,\n invalidMessage: string,\n parseRaw: (input: string) => { value: string; formatted: string } | null,\n) =>\n defineCountryZipCode({\n englishName,\n localizedName,\n emoji,\n sources,\n country,\n invalidMessage,\n parseRaw,\n });\n\nexport const NorwegianAddressZipCode = SwedishLessZipFactory(\n \"Norwegian Zip Code\",\n \"Norskt postnummer\",\n \"\\u{1F1F3}\\u{1F1F4}\",\n [\"https://www.posten.no/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Norway\"],\n Country.Norway,\n \"Invalid Norwegian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const FinnishAddressZipCode = SwedishLessZipFactory(\n \"Finnish Zip Code\",\n \"Finskt postnummer\",\n \"\\u{1F1EB}\\u{1F1EE}\",\n [\"https://www.posti.fi/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Finland\"],\n Country.Finland,\n \"Invalid Finnish zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const DanishAddressZipCode = SwedishLessZipFactory(\n \"Danish Zip Code\",\n \"Danskt postnummer\",\n \"\\u{1F1E9}\\u{1F1F0}\",\n [\"https://www.postnord.dk/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Denmark\"],\n Country.Denmark,\n \"Invalid Danish zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const GermanAddressZipCode = SwedishLessZipFactory(\n \"German Zip Code\",\n \"Tyskt postnummer\",\n \"\\u{1F1E9}\\u{1F1EA}\",\n [\"https://www.deutschepost.de/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Germany\"],\n Country.Germany,\n \"Invalid German zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const PolishAddressZipCode = SwedishLessZipFactory(\n \"Polish Zip Code\",\n \"Polskt postnummer\",\n \"\\u{1F1F5}\\u{1F1F1}\",\n [\"https://www.poczta-polska.pl/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Poland\"],\n Country.Poland,\n \"Invalid Polish zip code. Expected 5-digit format (NN-NNN).\",\n digitsWithSeparator(5, 2, \"-\"),\n).static;\n\nexport const EstonianAddressZipCode = SwedishLessZipFactory(\n \"Estonian Zip Code\",\n \"Estniskt postnummer\",\n \"\\u{1F1EA}\\u{1F1EA}\",\n [\"https://www.omniva.ee/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Estonia\"],\n Country.Estonia,\n \"Invalid Estonian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const LithuanianAddressZipCode = SwedishLessZipFactory(\n \"Lithuanian Zip Code\",\n \"Litauiskt postnummer\",\n \"\\u{1F1F1}\\u{1F1F9}\",\n [\"https://www.post.lt/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Lithuania\"],\n Country.Lithuania,\n \"Invalid Lithuanian zip code. Expected format LT-NNNNN.\",\n digitsWithPrefix(5, \"LT-\"),\n).static;\n\nexport const RomanianAddressZipCode = SwedishLessZipFactory(\n \"Romanian Zip Code\",\n \"Rumänskt postnummer\",\n \"\\u{1F1F7}\\u{1F1F4}\",\n [\"https://www.posta-romana.ro/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Romania\"],\n Country.Romania,\n \"Invalid Romanian zip code. Expected 6-digit format (NNNNNN).\",\n fixedDigits(6),\n).static;\n\nexport const BulgarianAddressZipCode = SwedishLessZipFactory(\n \"Bulgarian Zip Code\",\n \"Bulgariskt postnummer\",\n \"\\u{1F1E7}\\u{1F1EC}\",\n [\"https://www.bgpost.bg/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Bulgaria\"],\n Country.Bulgaria,\n \"Invalid Bulgarian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const LatvianAddressZipCode = SwedishLessZipFactory(\n \"Latvian Zip Code\",\n \"Lettiskt postnummer\",\n \"\\u{1F1F1}\\u{1F1FB}\",\n [\"https://www.pasts.lv/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Latvia\"],\n Country.Latvia,\n \"Invalid Latvian zip code. Expected format LV-NNNN.\",\n digitsWithPrefix(4, \"LV-\"),\n).static;\n\nexport const CzechAddressZipCode = SwedishLessZipFactory(\n \"Czech Zip Code\",\n \"Tjeckiskt postnummer\",\n \"\\u{1F1E8}\\u{1F1FF}\",\n [\n \"https://www.ceskaposta.cz/\",\n \"https://en.wikipedia.org/wiki/Postal_codes_in_the_Czech_Republic\",\n ],\n Country.tryParse(\"CZ\")!,\n \"Invalid Czech zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const SpanishAddressZipCode = SwedishLessZipFactory(\n \"Spanish Zip Code\",\n \"Spanskt postnummer\",\n \"\\u{1F1EA}\\u{1F1F8}\",\n [\"https://www.correos.es/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Spain\"],\n Country.tryParse(\"ES\")!,\n \"Invalid Spanish zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const DutchAddressZipCode = SwedishLessZipFactory(\n \"Dutch Zip Code\",\n \"Nederländskt postnummer\",\n \"\\u{1F1F3}\\u{1F1F1}\",\n [\"https://www.postnl.nl/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_the_Netherlands\"],\n Country.tryParse(\"NL\")!,\n \"Invalid Dutch zip code. Expected format NNNN AA (e.g. 1012 AB).\",\n dutch,\n).static;\n\nexport const GreekAddressZipCode = SwedishLessZipFactory(\n \"Greek Zip Code\",\n \"Grekiskt postnummer\",\n \"\\u{1F1EC}\\u{1F1F7}\",\n [\"https://www.elta.gr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Greece\"],\n Country.tryParse(\"GR\")!,\n \"Invalid Greek zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const ItalianAddressZipCode = SwedishLessZipFactory(\n \"Italian Zip Code\",\n \"Italienskt postnummer\",\n \"\\u{1F1EE}\\u{1F1F9}\",\n [\"https://www.poste.it/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Italy\"],\n Country.tryParse(\"IT\")!,\n \"Invalid Italian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const SlovenianAddressZipCode = SwedishLessZipFactory(\n \"Slovenian Zip Code\",\n \"Slovenskt postnummer\",\n \"\\u{1F1F8}\\u{1F1EE}\",\n [\"https://www.posta.si/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Slovenia\"],\n Country.tryParse(\"SI\")!,\n \"Invalid Slovenian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const CroatianAddressZipCode = SwedishLessZipFactory(\n \"Croatian Zip Code\",\n \"Kroatiskt postnummer\",\n \"\\u{1F1ED}\\u{1F1F7}\",\n [\"https://www.posta.hr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Croatia\"],\n Country.tryParse(\"HR\")!,\n \"Invalid Croatian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const PortugueseAddressZipCode = SwedishLessZipFactory(\n \"Portuguese Zip Code\",\n \"Portugisiskt postnummer\",\n \"\\u{1F1F5}\\u{1F1F9}\",\n [\"https://www.ctt.pt/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Portugal\"],\n Country.tryParse(\"PT\")!,\n \"Invalid Portuguese zip code. Expected format NNNN-NNN (e.g. 1100-148).\",\n portuguese,\n).static;\n\nexport const HungarianAddressZipCode = SwedishLessZipFactory(\n \"Hungarian Zip Code\",\n \"Ungerskt postnummer\",\n \"\\u{1F1ED}\\u{1F1FA}\",\n [\"https://www.posta.hu/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Hungary\"],\n Country.tryParse(\"HU\")!,\n \"Invalid Hungarian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const FrenchAddressZipCode = SwedishLessZipFactory(\n \"French Zip Code\",\n \"Franskt postnummer\",\n \"\\u{1F1EB}\\u{1F1F7}\",\n [\"https://www.laposte.fr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_France\"],\n Country.tryParse(\"FR\")!,\n \"Invalid French zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const SlovakAddressZipCode = SwedishLessZipFactory(\n \"Slovak Zip Code\",\n \"Slovakiskt postnummer\",\n \"\\u{1F1F8}\\u{1F1F0}\",\n [\"https://www.posta.sk/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Slovakia\"],\n Country.tryParse(\"SK\")!,\n \"Invalid Slovak zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const BelgianAddressZipCode = SwedishLessZipFactory(\n \"Belgian Zip Code\",\n \"Belgiskt postnummer\",\n \"\\u{1F1E7}\\u{1F1EA}\",\n [\"https://www.bpost.be/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Belgium\"],\n Country.tryParse(\"BE\")!,\n \"Invalid Belgian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const BritishAddressZipCode = SwedishLessZipFactory(\n \"British Postcode\",\n \"Brittiskt postnummer\",\n \"\\u{1F1EC}\\u{1F1E7}\",\n [\"https://www.royalmail.com/\", \"https://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom\"],\n Country.tryParse(\"GB\")!,\n \"Invalid British postcode (e.g. SW1A 1AA).\",\n british,\n).static;\n\nexport const AustrianAddressZipCode = SwedishLessZipFactory(\n \"Austrian Zip Code\",\n \"Österrikiskt postnummer\",\n \"\\u{1F1E6}\\u{1F1F9}\",\n [\"https://www.post.at/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Austria\"],\n Country.tryParse(\"AT\")!,\n \"Invalid Austrian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const CypriotAddressZipCode = SwedishLessZipFactory(\n \"Cypriot Zip Code\",\n \"Cypriotiskt postnummer\",\n \"\\u{1F1E8}\\u{1F1FE}\",\n [\"https://www.cypruspost.post/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Cyprus\"],\n Country.tryParse(\"CY\")!,\n \"Invalid Cypriot zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const IcelandicAddressZipCode = SwedishLessZipFactory(\n \"Icelandic Zip Code\",\n \"Isländskt postnummer\",\n \"\\u{1F1EE}\\u{1F1F8}\",\n [\"https://www.postur.is/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Iceland\"],\n Country.tryParse(\"IS\")!,\n \"Invalid Icelandic zip code. Expected 3-digit format (NNN).\",\n fixedDigits(3),\n).static;\n\nexport const SwissAddressZipCode = SwedishLessZipFactory(\n \"Swiss Zip Code\",\n \"Schweiziskt postnummer\",\n \"\\u{1F1E8}\\u{1F1ED}\",\n [\"https://www.post.ch/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Switzerland\"],\n Country.tryParse(\"CH\")!,\n \"Invalid Swiss zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const IrishAddressZipCode = SwedishLessZipFactory(\n \"Irish Eircode\",\n \"Iriskt postnummer\",\n \"\\u{1F1EE}\\u{1F1EA}\",\n [\"https://www.eircode.ie/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Ireland\"],\n Country.tryParse(\"IE\")!,\n \"Invalid Irish Eircode (e.g. D02 XR20).\",\n irish,\n).static;\n\nexport const LuxembourgishAddressZipCode = SwedishLessZipFactory(\n \"Luxembourgish Zip Code\",\n \"Luxemburgskt postnummer\",\n \"\\u{1F1F1}\\u{1F1FA}\",\n [\"https://www.post.lu/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Luxembourg\"],\n Country.tryParse(\"LU\")!,\n \"Invalid Luxembourgish zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const MalteseAddressZipCode = SwedishLessZipFactory(\n \"Maltese Zip Code\",\n \"Maltesiskt postnummer\",\n \"\\u{1F1F2}\\u{1F1F9}\",\n [\"https://www.maltapost.com/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Malta\"],\n Country.tryParse(\"MT\")!,\n \"Invalid Maltese zip code (e.g. VLT 1535).\",\n maltese,\n).static;\n\nexport const LiechtensteinAddressZipCode = SwedishLessZipFactory(\n \"Liechtenstein Zip Code\",\n \"Liechtensteinskt postnummer\",\n \"\\u{1F1F1}\\u{1F1EE}\",\n [\"https://www.post.li/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Liechtenstein\"],\n Country.tryParse(\"LI\")!,\n \"Invalid Liechtenstein zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n","import { Country } from \"../geography/index.js\";\nimport { defineCountryAddress } from \"./country-address-factory.js\";\nimport * as Z from \"./country-zip-codes.js\";\n\nexport const NorwegianAddress = defineCountryAddress({\n englishName: \"Norwegian Address\",\n localizedName: \"Norsk adress\",\n emoji: \"\\u{1F1F3}\\u{1F1F4}\",\n sources: [\"https://www.posten.no/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Norway\"],\n country: Country.Norway,\n invalidMessage: \"Invalid Norwegian address.\",\n zipCode: Z.NorwegianAddressZipCode,\n});\n\nexport const FinnishAddress = defineCountryAddress({\n englishName: \"Finnish Address\",\n localizedName: \"Finsk adress\",\n emoji: \"\\u{1F1EB}\\u{1F1EE}\",\n sources: [\"https://www.posti.fi/\"],\n country: Country.Finland,\n invalidMessage: \"Invalid Finnish address.\",\n zipCode: Z.FinnishAddressZipCode,\n});\n\nexport const DanishAddress = defineCountryAddress({\n englishName: \"Danish Address\",\n localizedName: \"Dansk adress\",\n emoji: \"\\u{1F1E9}\\u{1F1F0}\",\n sources: [\"https://www.postnord.dk/\"],\n country: Country.Denmark,\n invalidMessage: \"Invalid Danish address.\",\n zipCode: Z.DanishAddressZipCode,\n});\n\nexport const GermanAddress = defineCountryAddress({\n englishName: \"German Address\",\n localizedName: \"Tysk adress\",\n emoji: \"\\u{1F1E9}\\u{1F1EA}\",\n sources: [\"https://www.deutschepost.de/\"],\n country: Country.Germany,\n invalidMessage: \"Invalid German address.\",\n zipCode: Z.GermanAddressZipCode,\n});\n\nexport const PolishAddress = defineCountryAddress({\n englishName: \"Polish Address\",\n localizedName: \"Polsk adress\",\n emoji: \"\\u{1F1F5}\\u{1F1F1}\",\n sources: [\"https://www.poczta-polska.pl/\"],\n country: Country.tryParse(\"PL\")!,\n invalidMessage: \"Invalid Polish address.\",\n zipCode: Z.PolishAddressZipCode,\n});\n\nexport const EstonianAddress = defineCountryAddress({\n englishName: \"Estonian Address\",\n localizedName: \"Estnisk adress\",\n emoji: \"\\u{1F1EA}\\u{1F1EA}\",\n sources: [\"https://www.omniva.ee/\"],\n country: Country.tryParse(\"EE\")!,\n invalidMessage: \"Invalid Estonian address.\",\n zipCode: Z.EstonianAddressZipCode,\n});\n\nexport const LithuanianAddress = defineCountryAddress({\n englishName: \"Lithuanian Address\",\n localizedName: \"Litauisk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1F9}\",\n sources: [\"https://www.post.lt/\"],\n country: Country.tryParse(\"LT\")!,\n invalidMessage: \"Invalid Lithuanian address.\",\n zipCode: Z.LithuanianAddressZipCode,\n});\n\nexport const RomanianAddress = defineCountryAddress({\n englishName: \"Romanian Address\",\n localizedName: \"Rumänsk adress\",\n emoji: \"\\u{1F1F7}\\u{1F1F4}\",\n sources: [\"https://www.posta-romana.ro/\"],\n country: Country.tryParse(\"RO\")!,\n invalidMessage: \"Invalid Romanian address.\",\n zipCode: Z.RomanianAddressZipCode,\n});\n\nexport const BulgarianAddress = defineCountryAddress({\n englishName: \"Bulgarian Address\",\n localizedName: \"Bulgarisk adress\",\n emoji: \"\\u{1F1E7}\\u{1F1EC}\",\n sources: [\"https://www.bgpost.bg/\"],\n country: Country.tryParse(\"BG\")!,\n invalidMessage: \"Invalid Bulgarian address.\",\n zipCode: Z.BulgarianAddressZipCode,\n});\n\nexport const LatvianAddress = defineCountryAddress({\n englishName: \"Latvian Address\",\n localizedName: \"Lettisk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1FB}\",\n sources: [\"https://www.pasts.lv/\"],\n country: Country.tryParse(\"LV\")!,\n invalidMessage: \"Invalid Latvian address.\",\n zipCode: Z.LatvianAddressZipCode,\n});\n\nexport const CzechAddress = defineCountryAddress({\n englishName: \"Czech Address\",\n localizedName: \"Tjeckisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1FF}\",\n sources: [\"https://www.ceskaposta.cz/\"],\n country: Country.tryParse(\"CZ\")!,\n invalidMessage: \"Invalid Czech address.\",\n zipCode: Z.CzechAddressZipCode,\n});\n\nexport const SpanishAddress = defineCountryAddress({\n englishName: \"Spanish Address\",\n localizedName: \"Spansk adress\",\n emoji: \"\\u{1F1EA}\\u{1F1F8}\",\n sources: [\"https://www.correos.es/\"],\n country: Country.tryParse(\"ES\")!,\n invalidMessage: \"Invalid Spanish address.\",\n zipCode: Z.SpanishAddressZipCode,\n});\n\nexport const DutchAddress = defineCountryAddress({\n englishName: \"Dutch Address\",\n localizedName: \"Nederländsk adress\",\n emoji: \"\\u{1F1F3}\\u{1F1F1}\",\n sources: [\"https://www.postnl.nl/\"],\n country: Country.tryParse(\"NL\")!,\n invalidMessage: \"Invalid Dutch address.\",\n zipCode: Z.DutchAddressZipCode,\n});\n\nexport const GreekAddress = defineCountryAddress({\n englishName: \"Greek Address\",\n localizedName: \"Grekisk adress\",\n emoji: \"\\u{1F1EC}\\u{1F1F7}\",\n sources: [\"https://www.elta.gr/\"],\n country: Country.tryParse(\"GR\")!,\n invalidMessage: \"Invalid Greek address.\",\n zipCode: Z.GreekAddressZipCode,\n});\n\nexport const ItalianAddress = defineCountryAddress({\n englishName: \"Italian Address\",\n localizedName: \"Italiensk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1F9}\",\n sources: [\"https://www.poste.it/\"],\n country: Country.tryParse(\"IT\")!,\n invalidMessage: \"Invalid Italian address.\",\n zipCode: Z.ItalianAddressZipCode,\n});\n\nexport const SlovenianAddress = defineCountryAddress({\n englishName: \"Slovenian Address\",\n localizedName: \"Slovensk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1EE}\",\n sources: [\"https://www.posta.si/\"],\n country: Country.tryParse(\"SI\")!,\n invalidMessage: \"Invalid Slovenian address.\",\n zipCode: Z.SlovenianAddressZipCode,\n});\n\nexport const CroatianAddress = defineCountryAddress({\n englishName: \"Croatian Address\",\n localizedName: \"Kroatisk adress\",\n emoji: \"\\u{1F1ED}\\u{1F1F7}\",\n sources: [\"https://www.posta.hr/\"],\n country: Country.tryParse(\"HR\")!,\n invalidMessage: \"Invalid Croatian address.\",\n zipCode: Z.CroatianAddressZipCode,\n});\n\nexport const PortugueseAddress = defineCountryAddress({\n englishName: \"Portuguese Address\",\n localizedName: \"Portugisisk adress\",\n emoji: \"\\u{1F1F5}\\u{1F1F9}\",\n sources: [\"https://www.ctt.pt/\"],\n country: Country.tryParse(\"PT\")!,\n invalidMessage: \"Invalid Portuguese address.\",\n zipCode: Z.PortugueseAddressZipCode,\n});\n\nexport const HungarianAddress = defineCountryAddress({\n englishName: \"Hungarian Address\",\n localizedName: \"Ungersk adress\",\n emoji: \"\\u{1F1ED}\\u{1F1FA}\",\n sources: [\"https://www.posta.hu/\"],\n country: Country.tryParse(\"HU\")!,\n invalidMessage: \"Invalid Hungarian address.\",\n zipCode: Z.HungarianAddressZipCode,\n});\n\nexport const FrenchAddress = defineCountryAddress({\n englishName: \"French Address\",\n localizedName: \"Fransk adress\",\n emoji: \"\\u{1F1EB}\\u{1F1F7}\",\n sources: [\"https://www.laposte.fr/\"],\n country: Country.tryParse(\"FR\")!,\n invalidMessage: \"Invalid French address.\",\n zipCode: Z.FrenchAddressZipCode,\n});\n\nexport const SlovakAddress = defineCountryAddress({\n englishName: \"Slovak Address\",\n localizedName: \"Slovakisk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1F0}\",\n sources: [\"https://www.posta.sk/\"],\n country: Country.tryParse(\"SK\")!,\n invalidMessage: \"Invalid Slovak address.\",\n zipCode: Z.SlovakAddressZipCode,\n});\n\nexport const BelgianAddress = defineCountryAddress({\n englishName: \"Belgian Address\",\n localizedName: \"Belgisk adress\",\n emoji: \"\\u{1F1E7}\\u{1F1EA}\",\n sources: [\"https://www.bpost.be/\"],\n country: Country.tryParse(\"BE\")!,\n invalidMessage: \"Invalid Belgian address.\",\n zipCode: Z.BelgianAddressZipCode,\n});\n\nexport const BritishAddress = defineCountryAddress({\n englishName: \"British Address\",\n localizedName: \"Brittisk adress\",\n emoji: \"\\u{1F1EC}\\u{1F1E7}\",\n sources: [\"https://www.royalmail.com/\"],\n country: Country.tryParse(\"GB\")!,\n invalidMessage: \"Invalid British address.\",\n zipCode: Z.BritishAddressZipCode,\n});\n\nexport const AustrianAddress = defineCountryAddress({\n englishName: \"Austrian Address\",\n localizedName: \"Österrikisk adress\",\n emoji: \"\\u{1F1E6}\\u{1F1F9}\",\n sources: [\"https://www.post.at/\"],\n country: Country.tryParse(\"AT\")!,\n invalidMessage: \"Invalid Austrian address.\",\n zipCode: Z.AustrianAddressZipCode,\n});\n\nexport const CypriotAddress = defineCountryAddress({\n englishName: \"Cypriot Address\",\n localizedName: \"Cypriotisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1FE}\",\n sources: [\"https://www.cypruspost.post/\"],\n country: Country.tryParse(\"CY\")!,\n invalidMessage: \"Invalid Cypriot address.\",\n zipCode: Z.CypriotAddressZipCode,\n});\n\nexport const IcelandicAddress = defineCountryAddress({\n englishName: \"Icelandic Address\",\n localizedName: \"Isländsk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1F8}\",\n sources: [\"https://www.postur.is/\"],\n country: Country.tryParse(\"IS\")!,\n invalidMessage: \"Invalid Icelandic address.\",\n zipCode: Z.IcelandicAddressZipCode,\n});\n\nexport const SwissAddress = defineCountryAddress({\n englishName: \"Swiss Address\",\n localizedName: \"Schweizisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1ED}\",\n sources: [\"https://www.post.ch/\"],\n country: Country.tryParse(\"CH\")!,\n invalidMessage: \"Invalid Swiss address.\",\n zipCode: Z.SwissAddressZipCode,\n});\n\nexport const IrishAddress = defineCountryAddress({\n englishName: \"Irish Address\",\n localizedName: \"Irisk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1EA}\",\n sources: [\"https://www.eircode.ie/\"],\n country: Country.tryParse(\"IE\")!,\n invalidMessage: \"Invalid Irish address.\",\n zipCode: Z.IrishAddressZipCode,\n});\n\nexport const LuxembourgishAddress = defineCountryAddress({\n englishName: \"Luxembourgish Address\",\n localizedName: \"Luxemburgsk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1FA}\",\n sources: [\"https://www.post.lu/\"],\n country: Country.tryParse(\"LU\")!,\n invalidMessage: \"Invalid Luxembourgish address.\",\n zipCode: Z.LuxembourgishAddressZipCode,\n});\n\nexport const MalteseAddress = defineCountryAddress({\n englishName: \"Maltese Address\",\n localizedName: \"Maltesisk adress\",\n emoji: \"\\u{1F1F2}\\u{1F1F9}\",\n sources: [\"https://www.maltapost.com/\"],\n country: Country.tryParse(\"MT\")!,\n invalidMessage: \"Invalid Maltese address.\",\n zipCode: Z.MalteseAddressZipCode,\n});\n\nexport const LiechtensteinAddress = defineCountryAddress({\n englishName: \"Liechtenstein Address\",\n localizedName: \"Liechtensteinsk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1EE}\",\n sources: [\"https://www.post.li/\"],\n country: Country.tryParse(\"LI\")!,\n invalidMessage: \"Invalid Liechtenstein address.\",\n zipCode: Z.LiechtensteinAddressZipCode,\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\n\nconst DIGITS = /^\\d{5}$/;\n\n/** A Swedish postal code (`postnummer`) — strictly 5 digits, formatted `NNN NN`. */\nexport class SwedishAddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Zip Code\",\n localizedName: \"Svenskt postnummer\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n\n get country(): Country {\n return Country.Sweden;\n }\n\n private constructor(value: string, formatted: string, zipCode: AddressZipCode) {\n this.value = value;\n this.formatted = formatted;\n this.zipCode = zipCode;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddressZipCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = [...input].filter((c) => c >= \"0\" && c <= \"9\").join(\"\");\n if (!DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n const az = AddressZipCode.tryParse(formatted, { country: Country.Sweden });\n if (az === null) return null;\n return new SwedishAddressZipCode(digits, formatted, az);\n }\n\n static parse(input: string): SwedishAddressZipCode {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish zip code. Expected 5-digit format (NNN NN).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddressZipCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddressZipCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport type { ICountryAddressZipCode } from \"./country-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\n/** A Swedish address — street + 5-digit zip + city, all within Sweden. */\nexport class SwedishAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Address\",\n localizedName: \"Svensk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\"https://www.postnord.se/\", \"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: SwedishAddressZipCode;\n readonly city: AddressCity;\n readonly address: Address;\n\n get country(): Country {\n return Country.Sweden;\n }\n /** The zip code as the country-agnostic {@link ICountryAddressZipCode} view. */\n get countryZipCode(): ICountryAddressZipCode {\n return this.zipCode;\n }\n get careOf(): string | null {\n return this.street.careOf;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n private constructor(\n street: AddressStreet,\n zipCode: SwedishAddressZipCode,\n city: AddressCity,\n address: Address,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.address = address;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddress | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): SwedishAddress | null;\n static tryParse(arg: unknown): SwedishAddress | null {\n const address =\n typeof arg === \"object\" && arg !== null\n ? Address.tryParse(arg as never)\n : Address.tryParse(arg as string | null | undefined);\n if (address === null) return null;\n return SwedishAddress.tryWrap(address);\n }\n\n static parse(input: string): SwedishAddress {\n const r = SwedishAddress.tryParse(input);\n if (r === null) {\n throw new Error(\n \"Invalid Swedish address. Requires street, 5-digit zip code, and city within Sweden.\",\n );\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddress.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddress.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish addresses.\n *\n * Results are heuristic candidates and can include false positives. Only\n * address candidates with a Swedish zip code and city are returned.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishAddress>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<SwedishAddress>[] = [];\n\n for (const candidate of Address.findCandidatesInText(text)) {\n const value = SwedishAddress.tryWrap(candidate.value);\n if (!value) continue;\n results.push(\n new TextCandidate({\n startIndex: candidate.startIndex,\n length: candidate.length,\n originalText: candidate.originalText,\n typeName: \"SwedishAddress\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: candidate.maskedForm,\n confidence: candidate.confidence,\n value,\n }),\n );\n }\n\n return results;\n }\n\n toNormalizedString(): string {\n return this.address.toNormalizedString();\n }\n\n toString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n parts.push(`${this.zipCode.formatted} ${this.city.value}`);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n lines.push(`${this.zipCode.formatted} ${this.city.value}`);\n return lines.join(\"\\n\");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n /** Wraps an already-parsed {@link Address}. Used by the country-address registry. */\n static tryWrap(address: Address): SwedishAddress | null {\n if (address.country && address.country.alpha2Code.toUpperCase() !== \"SE\") return null;\n if (address.zipCode === null || !address.zipCode.isSwedish) return null;\n if (address.city === null) return null;\n const swedishZip = SwedishAddressZipCode.tryParse(address.zipCode.value);\n if (swedishZip === null) return null;\n const withCountry =\n address.country !== null\n ? address\n : new Address(address.street, address.zipCode, address.city, Country.Sweden);\n return new SwedishAddress(address.street, swedishZip, address.city, withCountry);\n }\n}\n","import { Country } from \"../geography/index.js\";\nimport * as A from \"./country-addresses.js\";\nimport { registerCountryAddress } from \"./country-address-registry.js\";\nimport { SwedishAddress } from \"./swedish-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\nlet registered = false;\n\n/**\n * Registers every built-in country-specific address type so that\n * `Address.asCountryAddress()` and `Address.supportedCountryAddressTypes`\n * resolve them.\n *\n * This is an explicit call rather than module-load side effects because the\n * package declares `sideEffects: false`; a bundler is free to drop a module\n * that is only imported for its side effects.\n */\nexport function registerDefaultCountryAddresses(): void {\n if (registered) return;\n registered = true;\n\n // Sweden first, matching the .NET registry order.\n registerCountryAddress({\n country: Country.Sweden,\n tryWrap: (address) => SwedishAddress.tryWrap(address),\n formatZip: (value) => SwedishAddressZipCode.format(value),\n });\n\n for (const countryAddress of [\n A.NorwegianAddress,\n A.FinnishAddress,\n A.DanishAddress,\n A.GermanAddress,\n A.PolishAddress,\n A.EstonianAddress,\n A.LithuanianAddress,\n A.RomanianAddress,\n A.BulgarianAddress,\n A.LatvianAddress,\n A.CzechAddress,\n A.SpanishAddress,\n A.DutchAddress,\n A.GreekAddress,\n A.ItalianAddress,\n A.SlovenianAddress,\n A.CroatianAddress,\n A.PortugueseAddress,\n A.HungarianAddress,\n A.FrenchAddress,\n A.SlovakAddress,\n A.BelgianAddress,\n A.BritishAddress,\n A.AustrianAddress,\n A.CypriotAddress,\n A.IcelandicAddress,\n A.SwissAddress,\n A.IrishAddress,\n A.LuxembourgishAddress,\n A.MalteseAddress,\n A.LiechtensteinAddress,\n ]) {\n registerCountryAddress({\n country: countryAddress.country,\n tryWrap: (address) => countryAddress.tryWrap(address),\n formatZip: (value) => countryAddress.zipCodeType.format(value),\n });\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 { 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","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 { registerDefaultCountryAddresses } from \"./register-default-country-addresses.js\";\n\nregisterDefaultCountryAddresses();\n\nexport { registerDefaultCountryAddresses } from \"./register-default-country-addresses.js\";\nexport { AddressCity } from \"./address-city.js\";\nexport { AddressStreet } from \"./address-street.js\";\nexport { AddressZipCode, maskZip } from \"./address-zip-code.js\";\nexport { Address } from \"./address.js\";\nexport { ContactAddress, ContactAddressBuilder } from \"./contact-address.js\";\nexport { PhoneCallingCode } from \"./phone-calling-code.js\";\nexport { PhoneNumber, maskPhoneNumber } from \"./phone-number.js\";\nexport { PhoneNumberTestData } from \"./phone-number-test-data.js\";\nexport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\nexport { SwedishAddress } from \"./swedish-address.js\";\nexport {\n CountryAddressBase,\n CountryAddressZipCodeBase,\n tryWrapCountryAddress,\n} from \"./country-address.js\";\nexport type { ICountryAddress, ICountryAddressZipCode } from \"./country-address.js\";\nexport {\n maskAddress,\n maskAddressCity,\n maskAddressStreet,\n maskAddressZipCode,\n maskPhoneNumberDetailed,\n maskSwedishAddress,\n maskSwedishAddressZipCode,\n} from \"./contact-masking.js\";\nexport { getGoogleMapsUrl, getBingMapsUrl, getHittaUrl } from \"./contact-external-links.js\";\nexport { getTelUri, getGoogleMapsUrlForAddress } from \"./contact-lookup.js\";\nexport * from \"./country-zip-codes.js\";\nexport * from \"./country-addresses.js\";\n","/**\n * Provides the current date/time for date-dependent primitives such as\n * `SwedishPersonalIdentityNumber` (century derivation), `PersonAge`, and\n * coordination numbers.\n *\n * The .NET equivalent is `IBudiTimeProvider`. JS doesn't have an idiomatic\n * \"ambient clock\" abstraction, so date-dependent functions accept an optional\n * `Clock` parameter and fall back to {@link systemClock} when absent.\n */\nexport interface Clock {\n /** Returns the current date/time. */\n now(): Date;\n}\n\n/** A {@link Clock} backed by `new Date()`. */\nexport const systemClock: Clock = {\n now: () => new Date(),\n};\n\n/**\n * Creates a {@link Clock} that always returns the same {@link Date} instance\n * (the date object is cloned on each `now()` call so callers can't mutate it).\n */\nexport function fixedClock(date: Date): Clock {\n const ms = date.getTime();\n return { now: () => new Date(ms) };\n}\n","/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n","/**\n * Validates a standard Luhn (mod 10) checksum.\n * Checks the entire string: the last digit is assumed to be the control digit.\n *\n * Equivalent of `Buildi.Primitives.Luhn.IsValid` (internal in .NET).\n */\nexport function luhnIsValid(digits: string): boolean {\n if (!digits) return false;\n\n let sum = 0;\n const len = digits.length;\n for (let i = 0; i < len; i++) {\n const code = digits.charCodeAt(i);\n if (code < 0x30 || code > 0x39) return false;\n let d = code - 0x30;\n if ((len - i) % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n","/**\n * Local parser for Swedish personnummer and samordningsnummer.\n *\n * Replaces the .NET dependency on ActiveLogin.Identity with an in-house\n * implementation that supports the same input shapes:\n *\n * - 12 digits: `199908072391`\n * - 10 digits: `9908072391` (century inferred)\n * - Separator forms: `YYMMDD-NNNC` or `YYYYMMDD-NNNC`. The separator may be\n * `-` (standard) or `+` (used when the person is 100 years or older;\n * only valid when the input was given in 10-digit form).\n *\n * For coordination numbers (`samordningsnummer`) the day-of-month is shifted\n * by 60 (i.e. real day = day - 60), so valid days for coordination numbers\n * are 61-91 (or 60 when day-of-month is unknown).\n */\n\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\n\nconst defaultClock: Clock = systemClock;\n\nexport type PinKind = \"personal\" | \"coordination\";\n\nexport interface ParsedPin {\n kind: PinKind;\n /** Full 4-digit year. */\n year: number;\n /** 1-12. */\n month: number;\n /**\n * For personal numbers: 1-31. For coordination numbers: realDay (1-31) or\n * `0` when the day-of-month is unknown (raw day was 60).\n */\n realDay: number;\n /** Three-digit individual number. */\n individual: string;\n /** Single check digit. */\n checkDigit: string;\n /** Whether the input had a `+` separator (indicates 100+ years old at parse time). */\n hadPlusSeparator: boolean;\n}\n\nconst TWELVE = /^(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN = /^(\\d{2})(\\d{2})(\\d{2})(\\d{3})(\\d)$/;\nconst TEN_WITH_SEP = /^(\\d{2})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\nconst TWELVE_WITH_SEP = /^(\\d{4})(\\d{2})(\\d{2})([-+])(\\d{3})(\\d)$/;\n\nexport function parsePin(input: string, clock: Clock = defaultClock): ParsedPin | null {\n if (!input) return null;\n const cleaned = input.trim();\n if (cleaned.length === 0) return null;\n\n let year: number, month: number, day: number;\n let individual: string, check: string;\n let hadPlus = false;\n let isTwelve = false;\n\n let m = TWELVE.exec(cleaned);\n if (m) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n isTwelve = true;\n } else if ((m = TEN.exec(cleaned))) {\n const yy = +m[1]!;\n year = inferCenturyForTenDigit(yy, false, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[4]!;\n check = m[5]!;\n } else if ((m = TEN_WITH_SEP.exec(cleaned))) {\n const yy = +m[1]!;\n hadPlus = m[4] === \"+\";\n year = inferCenturyForTenDigit(yy, hadPlus, clock);\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n } else if ((m = TWELVE_WITH_SEP.exec(cleaned))) {\n year = +m[1]!;\n month = +m[2]!;\n day = +m[3]!;\n individual = m[5]!;\n check = m[6]!;\n if (m[4] === \"+\") return null;\n } else {\n return null;\n }\n\n if (month < 1 || month > 12) return null;\n\n const isCoordination = day >= 60 && day <= 91;\n let realDay: number;\n let kind: PinKind;\n if (isCoordination) {\n kind = \"coordination\";\n realDay = day === 60 ? 0 : day - 60;\n if (realDay !== 0 && !isValidDay(year, month, realDay)) return null;\n } else {\n kind = \"personal\";\n if (!isValidDay(year, month, day)) return null;\n realDay = day;\n }\n\n const luhnInput =\n String(year % 100).padStart(2, \"0\") +\n String(month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n individual +\n check;\n if (!luhnIsValid(luhnInput)) return null;\n\n // 12-digit form must use a 4-digit year that matches the inferred century.\n if (isTwelve && (year < 1800 || year > 2200)) return null;\n\n return {\n kind,\n year,\n month,\n realDay,\n individual,\n checkDigit: check,\n hadPlusSeparator: hadPlus,\n };\n}\n\nfunction isValidDay(year: number, month: number, day: number): boolean {\n if (day < 1) return false;\n const dim = daysInMonth(year, month);\n return day <= dim;\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n return leap ? 29 : 28;\n }\n if ([4, 6, 9, 11].includes(month)) return 30;\n return 31;\n}\n\nfunction inferCenturyForTenDigit(yy: number, plusSeparator: boolean, clock: Clock): number {\n const now = clock.now();\n const currentYear = now.getUTCFullYear();\n const currentCentury = Math.floor(currentYear / 100);\n const candidate = currentCentury * 100 + yy;\n let year = candidate;\n if (year > currentYear) year -= 100;\n if (plusSeparator) year -= 100;\n return year;\n}\n\n/** Build the canonical 12-digit form. */\nexport function pinTo12Digit(p: ParsedPin): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n return (\n String(p.year).padStart(4, \"0\") +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n p.individual +\n p.checkDigit\n );\n}\n\n/** Build the canonical 10-digit display form (`YYMMDD-NNNC` or `YYMMDD+NNNC`). */\nexport function pinTo10Digit(p: ParsedPin, clock: Clock = defaultClock): string {\n const day = p.kind === \"coordination\" ? (p.realDay === 0 ? 60 : p.realDay + 60) : p.realDay;\n const yy = String(p.year % 100).padStart(2, \"0\");\n const sep = ageInYears(p, clock) >= 100 ? \"+\" : \"-\";\n return (\n yy +\n String(p.month).padStart(2, \"0\") +\n String(day).padStart(2, \"0\") +\n sep +\n p.individual +\n p.checkDigit\n );\n}\n\nfunction ageInYears(p: ParsedPin, clock: Clock): number {\n if (p.kind === \"coordination\" && p.realDay === 0) return 0;\n const now = clock.now();\n const day = p.kind === \"coordination\" ? p.realDay : p.realDay;\n const birth = new Date(Date.UTC(p.year, p.month - 1, day || 1));\n const ms = now.getTime() - birth.getTime();\n return Math.floor(ms / (365.25 * 24 * 3600 * 1000));\n}\n\n/** Estimate gender. The third digit of the individual portion is even for female, odd for male. */\nexport function pinGender(p: ParsedPin): \"female\" | \"male\" {\n const d = parseInt(p.individual.charAt(p.individual.length - 1), 10);\n return d % 2 === 0 ? \"female\" : \"male\";\n}\n\n/** Best-effort date of birth (`null` if coordination day is unknown). */\nexport function pinDateOfBirth(p: ParsedPin): Date | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return new Date(Date.UTC(p.year, p.month - 1, p.realDay));\n}\n\n/** Age in whole years (`null` if coordination day is unknown). */\nexport function pinAgeInYears(p: ParsedPin, clock: Clock = defaultClock): number | null {\n if (p.kind === \"coordination\" && p.realDay === 0) return null;\n return ageInYears(p, clock);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Personal Identity Number (`personnummer`). */\nexport class SwedishPersonalIdentityNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Personal Identity Number\",\n localizedName: \"Personnummer\",\n emoji: \"\\u{1FAAA}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html\",\n \"https://sv.wikipedia.org/wiki/Personnummer_i_Sverige\",\n \"https://en.wikipedia.org/wiki/Luhn_algorithm\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get dateOfBirthHint(): Date {\n const d = pinDateOfBirth(this._pin);\n if (d === null) throw new Error(\"Date of birth is unknown.\");\n return d;\n }\n get ageHint(): number {\n const a = pinAgeInYears(this._pin, this._clock);\n if (a === null) throw new Error(\"Age is unknown.\");\n return a;\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishPersonalIdentityNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"personal\") return null;\n return new SwedishPersonalIdentityNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishPersonalIdentityNumber {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish personal identity number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPersonalIdentityNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishPersonalIdentityNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPersonalIdentityNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"personal\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid personal identity number format.\",\n \"Ogiltigt format för personnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(\n text: string,\n ): readonly TextCandidate<SwedishPersonalIdentityNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPersonalIdentityNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const pin = SwedishPersonalIdentityNumber.tryParse(m[0]);\n if (!pin) continue;\n out.push(\n new TextCandidate<SwedishPersonalIdentityNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPersonalIdentityNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: pin.toNormalizedString(),\n formattedForm: pin.toString(),\n maskedForm: maskPersonalIdentityNumber(pin),\n confidence: TextMatchConfidence.High,\n value: pin,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPersonalIdentityNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPersonalIdentityNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a personal identity number, e.g. `990807-2391` -> `990807-****`. */\nexport function maskPersonalIdentityNumber(\n p: SwedishPersonalIdentityNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = p.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Clock, systemClock } from \"../internal/clock.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport {\n ParsedPin,\n parsePin,\n pinAgeInYears,\n pinDateOfBirth,\n pinGender,\n pinTo10Digit,\n pinTo12Digit,\n} from \"./personnummer-parser.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SCAN_PATTERN = /(?<!\\d)(\\d{6,8})([-+])(\\d{4})(?!\\d)/g;\n\n/** A Swedish Coordination Number (`samordningsnummer`). */\nexport class SwedishCoordinationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Coordination Number\",\n localizedName: \"Samordningsnummer\",\n emoji: \"\\u{1F194}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/samordningsnummer.4.5c281c7015abecc2e201130b.html\",\n \"https://sv.wikipedia.org/wiki/Samordningsnummer\",\n ]),\n });\n\n readonly _pin: ParsedPin;\n readonly _clock: Clock;\n\n private constructor(pin: ParsedPin, clock: Clock) {\n this._pin = pin;\n this._clock = clock;\n }\n\n get formatted(): string {\n return pinTo10Digit(this._pin, this._clock);\n }\n get value(): string {\n return pinTo12Digit(this._pin);\n }\n get realDay(): number {\n return this._pin.realDay;\n }\n get dateOfBirthHint(): Date | null {\n return pinDateOfBirth(this._pin);\n }\n get ageHint(): number | null {\n return pinAgeInYears(this._pin, this._clock);\n }\n get genderHint(): \"female\" | \"male\" {\n return pinGender(this._pin);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { clock?: Clock },\n ): SwedishCoordinationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n const clock = options?.clock ?? systemClock;\n const pin = parsePin(sanitized, clock);\n if (pin === null) return null;\n if (pin.kind !== \"coordination\") return null;\n return new SwedishCoordinationNumber(pin, clock);\n }\n\n static parse(input: string, options?: { clock?: Clock }): SwedishCoordinationNumber {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid Swedish coordination number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishCoordinationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; clock?: Clock },\n ): string | null {\n const r = SwedishCoordinationNumber.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishCoordinationNumber.normalize(input) === input;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n const pin = parsePin(sanitized);\n if (pin === null || pin.kind !== \"coordination\") {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid coordination number format.\",\n \"Ogiltigt format för samordningsnummer.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n to10DigitString(): string {\n return this.formatted;\n }\n to12DigitString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishCoordinationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishCoordinationNumber>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const cn = SwedishCoordinationNumber.tryParse(m[0]);\n if (!cn) continue;\n out.push(\n new TextCandidate<SwedishCoordinationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishCoordinationNumber\",\n category: TextCandidateCategory.PersonalIdentifier,\n normalizedForm: cn.toNormalizedString(),\n formattedForm: cn.toString(),\n maskedForm: maskCoordinationNumber(cn),\n confidence: TextMatchConfidence.High,\n value: cn,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishCoordinationNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishCoordinationNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Mask a coordination number, e.g. `680164-2395` -> `680164-****`. */\nexport function maskCoordinationNumber(\n c: SwedishCoordinationNumber,\n options?: { maskBirthDate?: boolean },\n): string {\n const f = c.formatted;\n if (options?.maskBirthDate) return \"******-****\";\n return f.slice(0, f.length - 4) + \"****\";\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** A 9-digit D-U-N-S number. */\nexport class DunsNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"D-U-N-S Number\",\n localizedName: \"D-U-N-S-nummer\",\n emoji: \"\\u{1F522}\",\n sources: Object.freeze([\n \"https://www.dnb.com/duns.html\",\n \"https://en.wikipedia.org/wiki/Data_Universal_Numbering_System\",\n ]),\n });\n\n readonly digits: string;\n private constructor(digits: string) {\n this.digits = digits;\n }\n\n static tryParse(input: string | null | undefined): DunsNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH || digits.length !== 9) return null;\n return new DunsNumber(digits);\n }\n\n static parse(input: string): DunsNumber {\n const r = DunsNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid D-U-N-S number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return DunsNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = DunsNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return DunsNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && DunsNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n toString(): string {\n return this.digits;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<DunsNumber>[] {\n if (!text) return [];\n const out: TextCandidate<DunsNumber>[] = [];\n const re = /(?<!\\d)\\d{9}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = DunsNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<DunsNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"DunsNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskDunsNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: DunsNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: DunsNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Masks all digits of a D-U-N-S number. */\nexport function maskDunsNumber(d: DunsNumber): string {\n return \"*\".repeat(d.digits.length);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { SwedishPersonalIdentityNumber } from \"../person/swedish-personal-identity-number.js\";\nimport { SwedishCoordinationNumber } from \"../person/swedish-coordination-number.js\";\nimport { SwedishOrganizationName } from \"./swedish-organization-name.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 30;\nconst LEGAL_ENTITY_PREFIX = \"16\";\n\nexport interface SwedishOrganizationTypeHintResult {\n readonly certain: SwedishOrganizationType;\n readonly bestGuess: SwedishOrganizationType;\n}\n\n/** A Swedish organization number (`organisationsnummer`). */\nexport class SwedishOrganizationNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Number\",\n localizedName: \"Organisationsnummer\",\n emoji: \"\\u{1F3E2}\",\n sources: Object.freeze([\n \"https://bolagsverket.se\",\n \"https://skatteverket.se/foretag/drivaforetag/startaforetag/organisationsnummer.html\",\n \"https://sv.wikipedia.org/wiki/Organisationsnummer\",\n ]),\n });\n\n readonly _tenWithDash: string;\n readonly _twelveDigits: string;\n readonly _isPerson: boolean;\n\n get isPerson(): boolean {\n return this._isPerson;\n }\n\n private constructor(tenWithDash: string, twelveDigits: string, isPerson: boolean) {\n this._tenWithDash = tenWithDash;\n this._twelveDigits = twelveDigits;\n this._isPerson = isPerson;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const pin = SwedishPersonalIdentityNumber.tryParse(sanitized);\n if (pin) {\n return new SwedishOrganizationNumber(pin.formatted, pin.value, true);\n }\n const cn = SwedishCoordinationNumber.tryParse(sanitized);\n if (cn) {\n return new SwedishOrganizationNumber(cn.formatted, cn.value, true);\n }\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) return null;\n\n let tenDigits: string;\n if (digits.length === 10) tenDigits = digits;\n else if (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX))\n tenDigits = digits.slice(2);\n else return null;\n\n if (!isLegalEntityPattern(tenDigits)) return null;\n if (!luhnIsValid(tenDigits)) return null;\n\n const tenWithDash = `${tenDigits.slice(0, 6)}-${tenDigits.slice(6)}`;\n const twelve = LEGAL_ENTITY_PREFIX + tenDigits;\n return new SwedishOrganizationNumber(tenWithDash, twelve, false);\n }\n\n static parse(input: string): SwedishOrganizationNumber {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish organization number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to10DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationNumber.tryParse(input);\n if (r) return r.to12DigitString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationNumber.normalize(input) === input;\n }\n\n to10DigitsOnly(): string {\n return this._tenWithDash.replace(/[-+]/g, \"\");\n }\n to10DigitString(): string {\n return this._tenWithDash;\n }\n to12DigitString(): string {\n return this._twelveDigits;\n }\n toNormalizedString(): string {\n return this.to12DigitString();\n }\n toString(): string {\n return this.to10DigitString();\n }\n\n getSwedishOrganizationTypeHint(\n name?: string | null,\n isPrivatePerson?: boolean | null,\n ): SwedishOrganizationTypeHintResult {\n let certain: SwedishOrganizationType;\n let bestGuess: SwedishOrganizationType;\n\n if (this._isPerson) {\n certain = SwedishOrganizationType.EnskildFirmaEllerPrivatperson;\n if (isPrivatePerson === true) bestGuess = SwedishOrganizationType.Privatperson;\n else if (isPrivatePerson === false) bestGuess = SwedishOrganizationType.EnskildFirma;\n else {\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n bestGuess =\n nameType === SwedishOrganizationType.EnskildFirma ||\n nameType === SwedishOrganizationType.Privatperson\n ? nameType\n : certain;\n }\n return { certain, bestGuess };\n }\n\n const first = this.to10DigitsOnly()[0]!;\n const nameType = SwedishOrganizationName.inferSwedishOrganizationType(name ?? null);\n\n switch (first) {\n case \"1\":\n certain = SwedishOrganizationType.Dodsbo;\n bestGuess = certain;\n break;\n case \"2\":\n certain = SwedishOrganizationType.OffentligSektor;\n bestGuess =\n nameType === SwedishOrganizationType.Kommun ||\n nameType === SwedishOrganizationType.Region ||\n nameType === SwedishOrganizationType.Forsamling\n ? nameType\n : certain;\n break;\n case \"5\":\n certain = SwedishOrganizationType.Aktiebolag;\n bestGuess = nameType === SwedishOrganizationType.Kommanditbolag ? nameType : certain;\n break;\n case \"6\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n case \"7\":\n certain = SwedishOrganizationType.EkonomiskForening;\n bestGuess =\n nameType === SwedishOrganizationType.Bostadsrattsforening ||\n nameType === SwedishOrganizationType.Samfallighetsforening\n ? nameType\n : certain;\n break;\n case \"8\":\n certain = SwedishOrganizationType.IdeellForening;\n bestGuess = nameType === SwedishOrganizationType.Stiftelse ? nameType : certain;\n break;\n case \"9\":\n certain = SwedishOrganizationType.HandelsbolagEllerKommanditbolag;\n bestGuess =\n nameType === SwedishOrganizationType.Kommanditbolag ||\n nameType === SwedishOrganizationType.Handelsbolag\n ? nameType\n : certain;\n break;\n default:\n certain = SwedishOrganizationType.Other;\n bestGuess =\n nameType === SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering ||\n nameType === SwedishOrganizationType.Europabolag ||\n nameType === SwedishOrganizationType.SCEForening ||\n nameType === SwedishOrganizationType.Filial\n ? nameType\n : certain;\n break;\n }\n return { certain, bestGuess };\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (SwedishPersonalIdentityNumber.tryParse(sanitized)) return validResult(input);\n if (SwedishCoordinationNumber.tryParse(sanitized)) return validResult(input);\n\n const digits = keepDigits(sanitized);\n if (digits.length === 0) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Input contains no digits.\",\n \"Värdet innehåller inga siffror.\",\n );\n }\n if (\n !(digits.length === 10 || (digits.length === 12 && digits.startsWith(LEGAL_ENTITY_PREFIX)))\n ) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Organization number must be 10 or 12 digits (12-digit form must start with 16).\",\n \"Organisationsnummer måste vara 10 eller 12 siffror (12-siffrig form måste börja med 16).\",\n );\n }\n const tenDigits = digits.length === 12 ? digits.slice(2) : digits;\n if (!isLegalEntityPattern(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidEntityPattern,\n \"Number does not match a valid organization type pattern.\",\n \"Numret matchar inte ett giltigt organisationstypsmönster.\",\n );\n }\n if (!luhnIsValid(tenDigits)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n }\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOrganizationNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOrganizationNumber>[] = [];\n const re = /(?<!\\d)(\\d{6})-?(\\d{4})(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOrganizationNumber.tryParse(m[0]);\n if (!r || r.isPerson) continue;\n out.push(\n new TextCandidate<SwedishOrganizationNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOrganizationNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOrganizationNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOrganizationNumber | null | undefined): boolean {\n return other != null && this._twelveDigits === other._twelveDigits;\n }\n compareTo(other: SwedishOrganizationNumber | null | undefined): number {\n if (other == null) return 1;\n return this._twelveDigits < other._twelveDigits\n ? -1\n : this._twelveDigits > other._twelveDigits\n ? 1\n : 0;\n }\n}\n\nfunction isLegalEntityPattern(tenDigits: string): boolean {\n if (tenDigits.length !== 10) return false;\n if (tenDigits[0] === \"1\") return true;\n const first = tenDigits[0]!;\n if (\n first !== \"2\" &&\n first !== \"3\" &&\n first !== \"5\" &&\n first !== \"6\" &&\n first !== \"7\" &&\n first !== \"8\" &&\n first !== \"9\"\n )\n return false;\n const m1 = tenDigits.charCodeAt(2) - 0x30;\n const m2 = tenDigits.charCodeAt(3) - 0x30;\n const mm = m1 * 10 + m2;\n return mm >= 20;\n}\n\n/**\n * Masks person-based Swedish organization identifiers by default.\n * Public legal-entity organization numbers are returned unmasked unless\n * `maskOrganizationNumbers` is set.\n */\nexport function maskSwedishOrganizationNumber(\n o: SwedishOrganizationNumber,\n options?: { maskOrganizationNumbers?: boolean; maskBirthDate?: boolean },\n): string {\n const s = o.to10DigitString();\n if (o.isPerson) {\n const sep = s[6]!;\n if (options?.maskBirthDate) return \"******\" + sep + \"****\";\n return s.slice(0, 6) + sep + \"****\";\n }\n if (options?.maskOrganizationNumbers) return s.slice(0, 7) + \"****\";\n return s;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { cleanSeparators } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationNumber } from \"./swedish-organization-number.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\ninterface CountryInfo {\n countryCode: string;\n countryName: string;\n}\n\nconst COUNTRY_INFO: Readonly<Record<string, CountryInfo>> = Object.freeze({\n AT: { countryCode: \"AT\", countryName: \"Austria\" },\n BE: { countryCode: \"BE\", countryName: \"Belgium\" },\n BG: { countryCode: \"BG\", countryName: \"Bulgaria\" },\n HR: { countryCode: \"HR\", countryName: \"Croatia\" },\n CY: { countryCode: \"CY\", countryName: \"Cyprus\" },\n CZ: { countryCode: \"CZ\", countryName: \"Czech Republic\" },\n DK: { countryCode: \"DK\", countryName: \"Denmark\" },\n EE: { countryCode: \"EE\", countryName: \"Estonia\" },\n FI: { countryCode: \"FI\", countryName: \"Finland\" },\n FR: { countryCode: \"FR\", countryName: \"France\" },\n DE: { countryCode: \"DE\", countryName: \"Germany\" },\n EL: { countryCode: \"GR\", countryName: \"Greece\" },\n GR: { countryCode: \"GR\", countryName: \"Greece\" },\n HU: { countryCode: \"HU\", countryName: \"Hungary\" },\n IE: { countryCode: \"IE\", countryName: \"Ireland\" },\n IT: { countryCode: \"IT\", countryName: \"Italy\" },\n LV: { countryCode: \"LV\", countryName: \"Latvia\" },\n LT: { countryCode: \"LT\", countryName: \"Lithuania\" },\n LU: { countryCode: \"LU\", countryName: \"Luxembourg\" },\n MT: { countryCode: \"MT\", countryName: \"Malta\" },\n NL: { countryCode: \"NL\", countryName: \"Netherlands\" },\n PL: { countryCode: \"PL\", countryName: \"Poland\" },\n PT: { countryCode: \"PT\", countryName: \"Portugal\" },\n RO: { countryCode: \"RO\", countryName: \"Romania\" },\n SK: { countryCode: \"SK\", countryName: \"Slovakia\" },\n SI: { countryCode: \"SI\", countryName: \"Slovenia\" },\n ES: { countryCode: \"ES\", countryName: \"Spain\" },\n SE: { countryCode: \"SE\", countryName: \"Sweden\" },\n GB: { countryCode: \"GB\", countryName: \"United Kingdom\" },\n NO: { countryCode: \"NO\", countryName: \"Norway\" },\n IS: { countryCode: \"IS\", countryName: \"Iceland\" },\n LI: { countryCode: \"LI\", countryName: \"Liechtenstein\" },\n CH: { countryCode: \"CH\", countryName: \"Switzerland\" },\n AL: { countryCode: \"AL\", countryName: \"Albania\" },\n BA: { countryCode: \"BA\", countryName: \"Bosnia and Herzegovina\" },\n BY: { countryCode: \"BY\", countryName: \"Belarus\" },\n MK: { countryCode: \"MK\", countryName: \"North Macedonia\" },\n RS: { countryCode: \"RS\", countryName: \"Serbia\" },\n SM: { countryCode: \"SM\", countryName: \"San Marino\" },\n TR: { countryCode: \"TR\", countryName: \"Turkey\" },\n UA: { countryCode: \"UA\", countryName: \"Ukraine\" },\n RU: { countryCode: \"RU\", countryName: \"Russia\" },\n UZ: { countryCode: \"UZ\", countryName: \"Uzbekistan\" },\n AU: { countryCode: \"AU\", countryName: \"Australia\" },\n CN: { countryCode: \"CN\", countryName: \"China\" },\n HK: { countryCode: \"HK\", countryName: \"Hong Kong\" },\n IN: { countryCode: \"IN\", countryName: \"India\" },\n ID: { countryCode: \"ID\", countryName: \"Indonesia\" },\n IL: { countryCode: \"IL\", countryName: \"Israel\" },\n JP: { countryCode: \"JP\", countryName: \"Japan\" },\n KZ: { countryCode: \"KZ\", countryName: \"Kazakhstan\" },\n NZ: { countryCode: \"NZ\", countryName: \"New Zealand\" },\n PH: { countryCode: \"PH\", countryName: \"Philippines\" },\n SA: { countryCode: \"SA\", countryName: \"Saudi Arabia\" },\n SG: { countryCode: \"SG\", countryName: \"Singapore\" },\n TW: { countryCode: \"TW\", countryName: \"Taiwan\" },\n AR: { countryCode: \"AR\", countryName: \"Argentina\" },\n BZ: { countryCode: \"BZ\", countryName: \"Belize\" },\n BO: { countryCode: \"BO\", countryName: \"Bolivia\" },\n BR: { countryCode: \"BR\", countryName: \"Brazil\" },\n CA: { countryCode: \"CA\", countryName: \"Canada\" },\n CL: { countryCode: \"CL\", countryName: \"Chile\" },\n CO: { countryCode: \"CO\", countryName: \"Colombia\" },\n CR: { countryCode: \"CR\", countryName: \"Costa Rica\" },\n DO: { countryCode: \"DO\", countryName: \"Dominican Republic\" },\n EC: { countryCode: \"EC\", countryName: \"Ecuador\" },\n SV: { countryCode: \"SV\", countryName: \"El Salvador\" },\n GT: { countryCode: \"GT\", countryName: \"Guatemala\" },\n HN: { countryCode: \"HN\", countryName: \"Honduras\" },\n MX: { countryCode: \"MX\", countryName: \"Mexico\" },\n NI: { countryCode: \"NI\", countryName: \"Nicaragua\" },\n PA: { countryCode: \"PA\", countryName: \"Panama\" },\n PY: { countryCode: \"PY\", countryName: \"Paraguay\" },\n PE: { countryCode: \"PE\", countryName: \"Peru\" },\n UY: { countryCode: \"UY\", countryName: \"Uruguay\" },\n US: { countryCode: \"US\", countryName: \"United States\" },\n VE: { countryCode: \"VE\", countryName: \"Venezuela\" },\n NG: { countryCode: \"NG\", countryName: \"Nigeria\" },\n});\n\n/** VAT identification number (`momsnummer` / `momsregistreringsnummer`). */\nexport class EuVatNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"VAT Number\",\n localizedName: \"Momsnummer\",\n emoji: \"\\u{1F4B0}\",\n sources: Object.freeze([\n \"https://ec.europa.eu/taxation_customs/vies/#/vat-validation\",\n \"https://en.wikipedia.org/wiki/VAT_identification_number\",\n ]),\n });\n\n readonly vatPrefix: string;\n readonly countryCode: string;\n readonly countryName: string;\n readonly body: string;\n\n private constructor(vatPrefix: string, countryCode: string, countryName: string, body: string) {\n this.vatPrefix = vatPrefix;\n this.countryCode = countryCode;\n this.countryName = countryName;\n this.body = body;\n }\n\n static tryParse(input: string | null | undefined): EuVatNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length < 3) return null;\n\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) return null;\n const info = COUNTRY_INFO[cc];\n if (!info) return null;\n\n const body = cleaned\n .slice(2)\n .split(\"\")\n .map((c) => {\n if (!/[A-Za-z0-9]/.test(c)) return null;\n return c.toUpperCase();\n });\n if (body.some((c) => c === null)) return null;\n const bodyString = body.join(\"\");\n if (bodyString.length === 0) return null;\n if (!validateCountryFormat(info.countryCode, bodyString)) return null;\n\n return new EuVatNumber(cc, info.countryCode, info.countryName, bodyString);\n }\n\n static parse(input: string): EuVatNumber {\n const r = EuVatNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid VAT number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EuVatNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = EuVatNumber.tryParse(input);\n if (r) return r.vatPrefix + r.body;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return EuVatNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EuVatNumber.normalize(input) === input;\n }\n\n static tryParseForCountry(\n input: string | null | undefined,\n countryCode: string | null | undefined,\n ): EuVatNumber | null {\n if (countryCode == null || countryCode.trim() === \"\") return null;\n const vat = EuVatNumber.tryParse(input);\n if (!vat) return null;\n const normalized = countryCode.toUpperCase();\n if ((normalized === \"EL\" || normalized === \"GR\") && vat.countryCode === \"GR\") return vat;\n return vat.countryCode === normalized ? vat : null;\n }\n\n static parseForCountry(input: string, countryCode: string): EuVatNumber {\n const r = EuVatNumber.tryParseForCountry(input, countryCode);\n if (!r) throw new Error(`Invalid VAT number for country ${countryCode}.`);\n return r;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n\n const cleaned = cleanSeparators(sanitizeInput(input));\n if (cleaned.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n }\n if (cleaned.length < 3) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooShort,\n \"VAT number is too short.\",\n \"Momsnumret är för kort.\",\n );\n }\n const cc = cleaned.slice(0, 2).toUpperCase();\n if (!/^[A-Z]{2}$/.test(cc)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCountryPrefix,\n \"VAT number must start with a two-letter country code.\",\n \"Momsnumret måste börja med en tvåbokstavig landskod.\",\n );\n }\n const info = COUNTRY_INFO[cc];\n if (!info) {\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown VAT country code.\",\n \"Okänd momsnummer-landskod.\",\n );\n }\n let body = \"\";\n for (const c of cleaned.slice(2)) {\n if (!/[A-Za-z0-9]/.test(c)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number body contains invalid characters.\",\n \"Momsnumrets innehåll har ogiltiga tecken.\",\n );\n }\n body += c.toUpperCase();\n }\n if (body.length === 0 || !validateCountryFormat(info.countryCode, body)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"VAT number format is invalid for the specified country.\",\n \"Momsnummerformatet är ogiltigt för det angivna landet.\",\n );\n }\n return validResult(input);\n }\n\n toNormalizedString(): string {\n return this.vatPrefix + this.body;\n }\n\n toString(): string {\n return this.vatPrefix + this.body;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<EuVatNumber>[] {\n if (!text) return [];\n const results: TextCandidate<EuVatNumber>[] = [];\n const re = /(?<![A-Z0-9])[A-Z]{2}[A-Z0-9]{5,14}(?![A-Z0-9])/gu;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const vat = EuVatNumber.tryParse(match[0]);\n if (!vat) continue;\n results.push(\n new TextCandidate<EuVatNumber>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EuVatNumber\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: vat.toNormalizedString(),\n formattedForm: vat.toString(),\n maskedForm: maskEuVatNumber(vat),\n confidence: TextMatchConfidence.High,\n value: vat,\n }),\n );\n }\n return results;\n }\n\n equals(other: EuVatNumber | null | undefined): boolean {\n return other != null && this.vatPrefix === other.vatPrefix && this.body === other.body;\n }\n\n compareTo(other: EuVatNumber | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction validateCountryFormat(countryCode: string, body: string): boolean {\n switch (countryCode.toUpperCase()) {\n case \"AT\":\n return body.length === 9 && body[0] === \"U\" && /^\\d{8}$/.test(body.slice(1));\n case \"BE\":\n return validateBelgianVat(body);\n case \"BG\":\n return /^\\d{9,10}$/.test(body);\n case \"HR\":\n return /^\\d{11}$/.test(body) && validateMod1110(body);\n case \"CY\":\n return /^\\d{8}[A-Z]$/.test(body);\n case \"CZ\":\n return /^\\d{8,10}$/.test(body);\n case \"DK\":\n return /^\\d{8}$/.test(body);\n case \"EE\":\n return /^\\d{9}$/.test(body);\n case \"FI\":\n return validateFinnishVat(body);\n case \"FR\":\n return /^[A-Z0-9]{2}\\d{9}$/.test(body);\n case \"DE\":\n case \"GR\":\n return /^\\d{9}$/.test(body);\n case \"HU\":\n return /^\\d{8}$/.test(body);\n case \"IE\":\n return validateIrishVat(body);\n case \"IT\":\n return /^\\d{11}$/.test(body) && luhnIsValid(body);\n case \"LV\":\n return /^\\d{11}$/.test(body);\n case \"LT\":\n return /^\\d{9}$/.test(body) || /^\\d{12}$/.test(body);\n case \"LU\":\n case \"MT\":\n return /^\\d{8}$/.test(body);\n case \"NL\":\n return /^\\d{9}B\\d{2}$/.test(body);\n case \"PL\":\n return validatePolishVat(body);\n case \"PT\":\n return /^\\d{9}$/.test(body);\n case \"RO\":\n return /^\\d{2,10}$/.test(body);\n case \"SK\":\n return validateSlovakVat(body);\n case \"SI\":\n return /^\\d{8}$/.test(body);\n case \"ES\":\n return body.length === 9;\n case \"SE\":\n return validateSwedishVat(body);\n case \"GB\":\n return validateUkVat(body);\n case \"NO\":\n return validateNorwegianVat(body);\n case \"CH\":\n return keepDigits(body).length === 9;\n default:\n return /\\d/.test(body);\n }\n}\n\nfunction validateSwedishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 12 || !digits.endsWith(\"01\")) return false;\n return SwedishOrganizationNumber.tryParse(digits.slice(0, 10)) !== null;\n}\n\nfunction validateBelgianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const baseNumber = parseInt(digits.slice(0, 8), 10);\n const checkDigits = 97 - (baseNumber % 97);\n return checkDigits === parseInt(digits.slice(8, 10), 10);\n}\n\nfunction validateFinnishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 8) return false;\n const weights = [7, 9, 10, 5, 8, 4, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = sum % 11;\n if (remainder === 1) return false;\n const checkDigit = remainder === 0 ? 0 : 11 - remainder;\n return checkDigit === digits.charCodeAt(7) - 0x30;\n}\n\nfunction validateIrishVat(body: string): boolean {\n if (body.length < 8 || body.length > 9) return false;\n if (body.length === 8) return /^\\d{7}[A-Z]$/.test(body);\n return /^\\d{7}[A-Z]{2}$/.test(body) || /^\\d[A-Z]\\d{5}[A-Z]$/.test(body);\n}\n\nfunction validatePolishVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n const weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const checkDigit = sum % 11;\n if (checkDigit === 10) return false;\n return checkDigit === digits.charCodeAt(9) - 0x30;\n}\n\nfunction validateSlovakVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 10) return false;\n return parseInt(digits, 10) % 11 === 0;\n}\n\nfunction validateUkVat(body: string): boolean {\n const digits = keepDigits(body);\n if (body.startsWith(\"GD\") || body.startsWith(\"HA\")) return body.length >= 5;\n return digits.length === 9 || digits.length === 12;\n}\n\nfunction validateNorwegianVat(body: string): boolean {\n const digits = keepDigits(body);\n if (digits.length !== 9) return false;\n const weights = [3, 2, 7, 6, 5, 4, 3, 2];\n const sum = weights.reduce((acc, weight, i) => acc + (digits.charCodeAt(i) - 0x30) * weight, 0);\n const remainder = 11 - (sum % 11);\n if (remainder === 10) return false;\n const checkDigit = remainder === 11 ? 0 : remainder;\n return checkDigit === digits.charCodeAt(8) - 0x30;\n}\n\nfunction validateMod1110(digits: string): boolean {\n let checksum = 10;\n for (let i = 0; i < digits.length - 1; i++) {\n const digit = digits.charCodeAt(i) - 0x30;\n checksum = (checksum + digit) % 10;\n if (checksum === 0) checksum = 10;\n checksum = (checksum * 2) % 11;\n }\n const expectedCheck = (11 - checksum) % 10;\n const actualCheck = digits.charCodeAt(digits.length - 1) - 0x30;\n return expectedCheck === actualCheck;\n}\n\n/** Masks person-based Swedish VAT automatically; pass `alwaysMask` to mask all VAT bodies. */\nexport function maskEuVatNumber(vat: EuVatNumber, alwaysMask = false): string {\n if (vat.countryCode === \"SE\") {\n const body = vat.body;\n if (body.length >= 10) {\n const orgPart = body.slice(0, 10);\n const org = SwedishOrganizationNumber.tryParse(orgPart);\n if (org && (org.isPerson || alwaysMask)) {\n const suffix = body.length > 10 ? body.slice(10) : \"\";\n return `${vat.vatPrefix}${orgPart.slice(0, 6)}****${suffix}`;\n }\n }\n } else if (alwaysMask) {\n const visible = Math.min(4, vat.body.length);\n return `${vat.vatPrefix}${vat.body.slice(0, visible)}${\"*\".repeat(vat.body.length - visible)}`;\n }\n\n return vat.toString();\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { isValidIso7064Mod97 } from \"./organization-validation-utils.js\";\n\nconst MAX_INPUT_LENGTH = 30;\n\n/** Legal Entity Identifier (ISO 17442). */\nexport class LeiCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"LEI Code\",\n localizedName: \"LEI-kod\",\n emoji: \"\\u{1F3DB}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.gleif.org/en/about-lei/iso-17442-the-lei-code-structure/\",\n \"https://en.wikipedia.org/wiki/Legal_Entity_Identifier\",\n ]),\n });\n\n readonly value: string;\n get louPrefix(): string {\n return this.value.slice(0, 4);\n }\n get reserved(): string {\n return this.value.slice(4, 6);\n }\n get entitySpecific(): string {\n return this.value.slice(6, 18);\n }\n get checkDigits(): string {\n return this.value.slice(18, 20);\n }\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): LeiCode | null {\n if (input == null || input.trim() === \"\") return null;\n const source = sanitizeInput(input);\n let cleaned = \"\";\n for (const c of source) {\n if (/[A-Za-z0-9]/.test(c)) cleaned += c.toUpperCase();\n }\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length !== 20) return null;\n if (!isValidIso7064Mod97(cleaned)) return null;\n return new LeiCode(cleaned);\n }\n\n static parse(input: string): LeiCode {\n const r = LeiCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid LEI code (length or checksum invalid).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return LeiCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = LeiCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return LeiCode.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && LeiCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<LeiCode>[] {\n if (!text) return [];\n const out: TextCandidate<LeiCode>[] = [];\n const re = /(?<![A-Z0-9])[A-Z0-9]{18}\\d{2}(?![A-Z0-9])/gu;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = LeiCode.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<LeiCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"LeiCode\",\n category: TextCandidateCategory.OrganizationIdentifier,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskLeiCode(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: LeiCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: LeiCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/** Masks the LEI keeping only the first 4-character LOU prefix visible. */\nexport function maskLeiCode(l: LeiCode): string {\n const v = l.value;\n return v.slice(0, 4) + \"*\".repeat(v.length - 4);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepAsciiAlphanumericUppercase } from \"../internal/input-sanitization.js\";\n\nconst CODE_LENGTH = 4;\nconst MAX_INPUT_LENGTH = 20;\n\ninterface KnownElf {\n englishName: string;\n swedishName: string;\n}\n\nconst KNOWN_CODES: ReadonlyMap<string, KnownElf> = new Map<string, KnownElf>([\n [\"XTIQ\", { englishName: \"Limited company\", swedishName: \"Aktiebolag\" }],\n [\"N2GY\", { englishName: \"General partnership\", swedishName: \"Handelsbolag\" }],\n [\"FR3V\", { englishName: \"Limited partnership\", swedishName: \"Kommanditbolag\" }],\n [\"V2YH\", { englishName: \"Economic association\", swedishName: \"Ekonomisk förening\" }],\n [\"WJEL\", { englishName: \"Sole proprietorship\", swedishName: \"Enskild näringsidkare\" }],\n [\"CLBQ\", { englishName: \"Foundation\", swedishName: \"Stiftelse\" }],\n [\"F85L\", { englishName: \"Non-profit association\", swedishName: \"Ideell förening\" }],\n [\"O9FH\", { englishName: \"Housing cooperative\", swedishName: \"Bostadsrättsförening\" }],\n [\n \"H0PO\",\n {\n englishName: \"Cooperative housing association\",\n swedishName: \"Kooperativ hyresrättsförening\",\n },\n ],\n [\"2HBR\", { englishName: \"Government entity\", swedishName: \"Statlig enhet\" }],\n [\"EVKQ\", { englishName: \"Municipality\", swedishName: \"Kommun\" }],\n [\"R7GX\", { englishName: \"Region\", swedishName: \"Region\" }],\n [\"KQM9\", { englishName: \"Banking company\", swedishName: \"Bankaktiebolag\" }],\n [\"L5CF\", { englishName: \"Insurance company\", swedishName: \"Försäkringsaktiebolag\" }],\n [\"LRQE\", { englishName: \"Mutual insurance company\", swedishName: \"Ömsesidigt försäkringsbolag\" }],\n [\n \"J4GF\",\n { englishName: \"Branch of foreign company\", swedishName: \"Filial till utländskt företag\" },\n ],\n [\"9GQP\", { englishName: \"European company (SE)\", swedishName: \"Europabolag\" }],\n]);\n\n/** ISO 20275 Entity Legal Form code. */\nexport class ElfCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Entity Legal Form Code\",\n localizedName: \"Juridisk företagsform\",\n emoji: \"\\u{1F4CB}\",\n sources: Object.freeze([\n \"https://www.gleif.org/en/about-lei/code-lists/iso-20275-entity-legal-forms-code-list\",\n \"https://www.iso.org/standard/67462.html\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string | null;\n readonly localizedName: string | null;\n\n get displayName(): string {\n const localized = PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedName\n : this.englishName;\n return localized ?? this.code;\n }\n\n get isKnown(): boolean {\n return this.englishName !== null;\n }\n\n private constructor(code: string, en: string | null, sv: string | null) {\n this.code = code;\n this.englishName = en;\n this.localizedName = sv;\n }\n\n static tryParse(input: string | null | undefined): ElfCode | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = keepAsciiAlphanumericUppercase(input);\n if (cleaned.length > MAX_INPUT_LENGTH || cleaned.length !== CODE_LENGTH) return null;\n const known = KNOWN_CODES.get(cleaned);\n return new ElfCode(cleaned, known?.englishName ?? null, known?.swedishName ?? null);\n }\n\n static parse(input: string): ElfCode {\n const r = ElfCode.tryParse(input);\n if (r === null) {\n throw new Error(\"Invalid ELF code (must be exactly 4 alphanumeric characters).\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return ElfCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = ElfCode.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 = ElfCode.tryParse(input);\n if (r) return r.code;\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 && ElfCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayName;\n }\n\n equals(other: ElfCode | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: ElfCode | 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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/** Swedish SNI code (`SNI-kod`). */\nexport class SwedishSniCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"SNI Code\",\n localizedName: \"SNI-kod\",\n emoji: \"\\u{1F4CA}\",\n sources: Object.freeze([\n \"https://www.scb.se/en/documentation/classifications-and-standards/swedish-standard-industrial-classification-sni/\",\n \"https://snisok.scb.se/en\",\n ]),\n });\n\n readonly code: string;\n readonly formatted: string;\n get divisionCode(): string {\n return this.code.slice(0, 2);\n }\n get groupCode(): string {\n return this.code.slice(0, 3);\n }\n get subGroupCode(): string {\n return this.code.slice(0, 4);\n }\n\n private constructor(code: string, formatted: string) {\n this.code = code;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishSniCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(input);\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length !== 5) return null;\n if (digits === \"00000\") return null;\n if (digits.slice(0, 2) === \"00\") return null;\n return new SwedishSniCode(digits, `${digits.slice(0, 2)}.${digits.slice(2)}`);\n }\n\n static parse(input: string): SwedishSniCode {\n const r = SwedishSniCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid SNI code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishSniCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSniCode.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 SwedishSniCode.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishSniCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n toString(): string {\n return this.formatted;\n }\n\n equals(other: SwedishSniCode | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishSniCode | 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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { ValidationErrorReason, ValidationResult } from \"../validation/index.js\";\nimport { invalidResult, validResult } from \"../validation/validation-result.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\n/**\n * Identifies the email service behind a domain when it belongs to a well-known\n * public (consumer/free) email provider.\n */\nexport const PublicEmailProvider = {\n Unknown: \"Unknown\",\n\n Gmail: \"Gmail\",\n Outlook: \"Outlook\",\n Yahoo: \"Yahoo\",\n ICloud: \"ICloud\",\n ProtonMail: \"ProtonMail\",\n Aol: \"Aol\",\n Gmx: \"Gmx\",\n MailCom: \"MailCom\",\n Yandex: \"Yandex\",\n Zoho: \"Zoho\",\n Tuta: \"Tuta\",\n Hey: \"Hey\",\n DuckDuckGoEmail: \"DuckDuckGoEmail\",\n SimpleLogin: \"SimpleLogin\",\n\n WebDe: \"WebDe\",\n MailRu: \"MailRu\",\n WirtualnaPolska: \"WirtualnaPolska\",\n Onet: \"Onet\",\n Interia: \"Interia\",\n Tlen: \"Tlen\",\n Seznam: \"Seznam\",\n Libero: \"Libero\",\n FreemailHu: \"FreemailHu\",\n Abv: \"Abv\",\n InboxLv: \"InboxLv\",\n UkrNet: \"UkrNet\",\n Naver: \"Naver\",\n\n Telia: \"Telia\",\n Tele2: \"Tele2\",\n Comhem: \"Comhem\",\n Bredbandsbolaget: \"Bredbandsbolaget\",\n Bredband2: \"Bredband2\",\n Ownit: \"Ownit\",\n Spray: \"Spray\",\n Passagen: \"Passagen\",\n Bahnhof: \"Bahnhof\",\n Glocalnet: \"Glocalnet\",\n\n OnlineNo: \"OnlineNo\",\n Kolumbus: \"Kolumbus\",\n Aland: \"Aland\",\n} as const;\n\nexport type PublicEmailProvider = (typeof PublicEmailProvider)[keyof typeof PublicEmailProvider];\n\nconst MAX_INPUT_LENGTH = 320;\n\nconst PROVIDER_DOMAINS: Record<string, PublicEmailProvider> = {\n // International\n \"gmail.com\": PublicEmailProvider.Gmail,\n \"googlemail.com\": PublicEmailProvider.Gmail,\n\n \"outlook.com\": PublicEmailProvider.Outlook,\n \"outlook.se\": PublicEmailProvider.Outlook,\n \"outlook.fr\": PublicEmailProvider.Outlook,\n \"outlook.co\": PublicEmailProvider.Outlook,\n \"hotmail.com\": PublicEmailProvider.Outlook,\n \"hotmail.se\": PublicEmailProvider.Outlook,\n \"hotmail.co.uk\": PublicEmailProvider.Outlook,\n \"hotmail.fr\": PublicEmailProvider.Outlook,\n \"hotmail.de\": PublicEmailProvider.Outlook,\n \"hotmail.no\": PublicEmailProvider.Outlook,\n \"hotmail.dk\": PublicEmailProvider.Outlook,\n \"hotmail.fi\": PublicEmailProvider.Outlook,\n \"hotmail.it\": PublicEmailProvider.Outlook,\n \"hotmail.es\": PublicEmailProvider.Outlook,\n \"live.com\": PublicEmailProvider.Outlook,\n \"live.se\": PublicEmailProvider.Outlook,\n \"live.fr\": PublicEmailProvider.Outlook,\n \"live.dk\": PublicEmailProvider.Outlook,\n \"live.co.uk\": PublicEmailProvider.Outlook,\n \"live.it\": PublicEmailProvider.Outlook,\n \"live.no\": PublicEmailProvider.Outlook,\n \"msn.com\": PublicEmailProvider.Outlook,\n \"windowslive.com\": PublicEmailProvider.Outlook,\n\n \"yahoo.com\": PublicEmailProvider.Yahoo,\n \"yahoo.se\": PublicEmailProvider.Yahoo,\n \"yahoo.co.uk\": PublicEmailProvider.Yahoo,\n \"yahoo.fr\": PublicEmailProvider.Yahoo,\n \"yahoo.de\": PublicEmailProvider.Yahoo,\n \"yahoo.it\": PublicEmailProvider.Yahoo,\n \"yahoo.es\": PublicEmailProvider.Yahoo,\n \"yahoo.gr\": PublicEmailProvider.Yahoo,\n \"yahoo.ro\": PublicEmailProvider.Yahoo,\n \"yahoo.co\": PublicEmailProvider.Yahoo,\n \"yahoo.no\": PublicEmailProvider.Yahoo,\n \"ymail.com\": PublicEmailProvider.Yahoo,\n \"rocketmail.com\": PublicEmailProvider.Yahoo,\n\n \"icloud.com\": PublicEmailProvider.ICloud,\n \"me.com\": PublicEmailProvider.ICloud,\n \"mac.com\": PublicEmailProvider.ICloud,\n\n \"protonmail.com\": PublicEmailProvider.ProtonMail,\n \"protonmail.ch\": PublicEmailProvider.ProtonMail,\n \"proton.me\": PublicEmailProvider.ProtonMail,\n \"pm.me\": PublicEmailProvider.ProtonMail,\n\n \"aol.com\": PublicEmailProvider.Aol,\n \"aol.se\": PublicEmailProvider.Aol,\n\n \"gmx.com\": PublicEmailProvider.Gmx,\n \"gmx.de\": PublicEmailProvider.Gmx,\n \"gmx.net\": PublicEmailProvider.Gmx,\n \"gmx.at\": PublicEmailProvider.Gmx,\n\n \"mail.com\": PublicEmailProvider.MailCom,\n \"email.com\": PublicEmailProvider.MailCom,\n \"post.com\": PublicEmailProvider.MailCom,\n \"europe.com\": PublicEmailProvider.MailCom,\n \"iname.com\": PublicEmailProvider.MailCom,\n\n \"yandex.com\": PublicEmailProvider.Yandex,\n \"yandex.ru\": PublicEmailProvider.Yandex,\n\n \"zoho.com\": PublicEmailProvider.Zoho,\n\n \"tuta.io\": PublicEmailProvider.Tuta,\n \"tutanota.com\": PublicEmailProvider.Tuta,\n\n \"hey.com\": PublicEmailProvider.Hey,\n \"duck.com\": PublicEmailProvider.DuckDuckGoEmail,\n \"simplelogin.com\": PublicEmailProvider.SimpleLogin,\n\n // Regional (Europe)\n \"web.de\": PublicEmailProvider.WebDe,\n \"mail.ru\": PublicEmailProvider.MailRu,\n\n \"wp.pl\": PublicEmailProvider.WirtualnaPolska,\n \"vp.pl\": PublicEmailProvider.WirtualnaPolska,\n\n \"onet.pl\": PublicEmailProvider.Onet,\n \"onet.eu\": PublicEmailProvider.Onet,\n \"op.pl\": PublicEmailProvider.Onet,\n \"o2.pl\": PublicEmailProvider.Onet,\n \"poczta.onet.pl\": PublicEmailProvider.Onet,\n\n \"interia.pl\": PublicEmailProvider.Interia,\n \"interia.eu\": PublicEmailProvider.Interia,\n\n \"tlen.pl\": PublicEmailProvider.Tlen,\n\n \"seznam.cz\": PublicEmailProvider.Seznam,\n \"libero.it\": PublicEmailProvider.Libero,\n \"freemail.hu\": PublicEmailProvider.FreemailHu,\n \"abv.bg\": PublicEmailProvider.Abv,\n \"inbox.lv\": PublicEmailProvider.InboxLv,\n \"ukr.net\": PublicEmailProvider.UkrNet,\n \"naver.com\": PublicEmailProvider.Naver,\n\n // Swedish ISP / portal email\n \"telia.com\": PublicEmailProvider.Telia,\n \"telia.se\": PublicEmailProvider.Telia,\n \"home.se\": PublicEmailProvider.Telia,\n \"swipnet.se\": PublicEmailProvider.Telia,\n\n \"tele2.se\": PublicEmailProvider.Tele2,\n \"comhem.se\": PublicEmailProvider.Comhem,\n\n \"bredband.net\": PublicEmailProvider.Bredbandsbolaget,\n \"bredbandsbolaget.se\": PublicEmailProvider.Bredbandsbolaget,\n\n \"bredband2.com\": PublicEmailProvider.Bredband2,\n \"ownit.nu\": PublicEmailProvider.Ownit,\n \"mail.se\": PublicEmailProvider.Spray,\n \"spray.se\": PublicEmailProvider.Spray,\n \"passagen.se\": PublicEmailProvider.Passagen,\n \"bahnhof.se\": PublicEmailProvider.Bahnhof,\n \"glocalnet.net\": PublicEmailProvider.Glocalnet,\n\n // Nordic ISP\n \"online.no\": PublicEmailProvider.OnlineNo,\n \"kolumbus.fi\": PublicEmailProvider.Kolumbus,\n \"aland.net\": PublicEmailProvider.Aland,\n};\n\nconst DOMAIN_CORRECTIONS: Record<string, string> = {\n // Gmail misspellings\n \"gnail.com\": \"gmail.com\",\n \"gamil.com\": \"gmail.com\",\n \"gmai.com\": \"gmail.com\",\n \"gmil.com\": \"gmail.com\",\n \"gmsil.com\": \"gmail.com\",\n \"gmal.com\": \"gmail.com\",\n \"gmaill.com\": \"gmail.com\",\n \"gamail.com\": \"gmail.com\",\n \"gmail.con\": \"gmail.com\",\n \"gmail.vom\": \"gmail.com\",\n \"gmail.cim\": \"gmail.com\",\n \"gmail.comi\": \"gmail.com\",\n \"gmail.se\": \"gmail.com\",\n \"gmail.co\": \"gmail.com\",\n\n // Hotmail / Outlook misspellings\n \"hotmai.com\": \"hotmail.com\",\n \"hotmil.com\": \"hotmail.com\",\n \"hotmsil.com\": \"hotmail.com\",\n \"hotmal.com\": \"hotmail.com\",\n \"homail.com\": \"hotmail.com\",\n \"hotnail.com\": \"hotmail.com\",\n \"hitmail.com\": \"hotmail.com\",\n \"hptmail.com\": \"hotmail.com\",\n \"hmail.com\": \"hotmail.com\",\n \"hotmail.con\": \"hotmail.com\",\n \"hotmail.cpm\": \"hotmail.com\",\n \"hotmail.co\": \"hotmail.com\",\n \"hotmail.vom\": \"hotmail.com\",\n \"hotmail.cim\": \"hotmail.com\",\n \"hotmail.comm\": \"hotmail.com\",\n \"outlook.con\": \"outlook.com\",\n \"putlook.com\": \"outlook.com\",\n\n // iCloud misspellings\n \"icloude.com\": \"icloud.com\",\n \"icloud.se\": \"icloud.com\",\n \"icloud.co\": \"icloud.com\",\n\n // Onet misspellings\n \"02.pl\": \"o2.pl\",\n};\n\nlet tldCountryMapCache: Map<string, Country> | null = null;\nfunction getTldCountryMap(): Map<string, Country> {\n if (tldCountryMapCache) return tldCountryMapCache;\n const m = new Map<string, Country>();\n for (const c of Country.all) {\n if (c.topLevelDomain) m.set(c.topLevelDomain.toLowerCase(), c);\n }\n tldCountryMapCache = m;\n return m;\n}\n\nconst EMAIL_PATTERN =\n /^(?!\\.)[a-zA-Z0-9_](?!.*\\.\\.)(?:[a-zA-Z0-9._%+-]*[a-zA-Z0-9_%+-])?@(?!-)[a-zA-Z0-9-]+(?<!-)(?:\\.(?!-)[a-zA-Z0-9-]+(?<!-))*\\.[a-zA-Z]{2,}$/;\n\nconst SCAN_PATTERN =\n /(?<![\\w.@])(?!\\.)[a-zA-Z0-9](?:[a-zA-Z0-9._%+-]*[a-zA-Z0-9_%+-])?@(?!-)[a-zA-Z0-9-]+(?:\\.(?!-)[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,}(?![\\w@])/gu;\n\n/** Convert a Unicode domain to its ASCII (Punycode) form. Returns null if invalid. */\nfunction domainToAscii(domain: string): string | null {\n try {\n const ascii = new URL(\"http://\" + domain).hostname;\n return ascii;\n } catch {\n return null;\n }\n}\n\n/**\n * An email address (e-postadress). Normalization trims whitespace and lowercases the entire\n * address — including the local part — as a pragmatic interoperability and deduplication choice.\n */\nexport class EmailAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Email Address\",\n localizedName: \"E-postadress\",\n emoji: \"\\u{1F4E7}\",\n sources: Object.freeze([\n \"https://datatracker.ietf.org/doc/html/rfc5321#section-2.3.11\",\n \"https://datatracker.ietf.org/doc/html/rfc5321\",\n ]),\n });\n\n readonly value: string;\n readonly localPart: string;\n readonly domain: string;\n readonly domainAscii: string;\n readonly topLevelDomain: string;\n readonly country: Country | null;\n readonly provider: PublicEmailProvider | null;\n readonly originalDomain: string | null;\n\n get isPublicEmailProvider(): boolean {\n return this.provider != null;\n }\n\n get isInternationalizedDomain(): boolean {\n return this.domain !== this.domainAscii;\n }\n\n get wasCorrected(): boolean {\n return this.originalDomain != null;\n }\n\n private constructor(\n value: string,\n localPart: string,\n domain: string,\n domainAscii: string,\n tld: string,\n country: Country | null,\n provider: PublicEmailProvider | null,\n originalDomain: string | null,\n ) {\n this.value = value;\n this.localPart = localPart;\n this.domain = domain;\n this.domainAscii = domainAscii;\n this.topLevelDomain = tld;\n this.country = country;\n this.provider = provider;\n this.originalDomain = originalDomain;\n }\n\n /**\n * Attempts to parse and normalize an email address.\n *\n * When `tryCorrectTypos` is `true`, common domain misspellings such as\n * `gmail.con`, `gnail.com`, or `hotmil.com` are corrected automatically.\n * The original domain is preserved in `originalDomain`. Typo correction is\n * opt-in and should only be used when silent correction is acceptable.\n */\n static tryParse(\n input: string | null | undefined,\n options?: { tryCorrectTypos?: boolean },\n ): EmailAddress | null {\n if (input == null || input.trim() === \"\") return null;\n\n let sanitized = sanitizeInput(input);\n\n const ltIndex = sanitized.indexOf(\"<\");\n if (ltIndex >= 0) {\n const gtIndex = sanitized.indexOf(\">\", ltIndex + 1);\n if (gtIndex > ltIndex) sanitized = sanitized.slice(ltIndex + 1, gtIndex);\n }\n\n sanitized = sanitized.trim();\n if (sanitized.toLowerCase().startsWith(\"mailto:\")) {\n sanitized = sanitized.slice(7);\n const qIndex = sanitized.indexOf(\"?\");\n if (qIndex >= 0) sanitized = sanitized.slice(0, qIndex);\n }\n\n let normalized = sanitized.replace(/ /g, \"\").toLowerCase();\n if (normalized.endsWith(\".\")) normalized = normalized.slice(0, -1);\n\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n\n const atIndex = normalized.lastIndexOf(\"@\");\n if (atIndex <= 0 || atIndex === normalized.length - 1) return null;\n\n const localPart = normalized.slice(0, atIndex);\n let domain = normalized.slice(atIndex + 1);\n\n let domainForValidation = domain;\n if (hasNonAscii(domain)) {\n // Reject if non-ASCII characters include non-letters\n for (const ch of domain) {\n const cp = ch.codePointAt(0)!;\n if (cp > 127 && !isUnicodeLetter(ch)) return null;\n }\n const ascii = domainToAscii(domain);\n if (ascii == null) return null;\n domainForValidation = ascii;\n }\n\n const emailForValidation = `${localPart}@${domainForValidation}`;\n if (!EMAIL_PATTERN.test(emailForValidation)) return null;\n\n let originalDomain: string | null = null;\n if (options?.tryCorrectTypos === true) {\n const corrected = DOMAIN_CORRECTIONS[domain];\n if (corrected != null) {\n originalDomain = domain;\n domain = corrected;\n normalized = `${localPart}@${domain}`;\n domainForValidation = domain;\n }\n }\n\n const lastDot = domain.lastIndexOf(\".\");\n const tld = lastDot >= 0 ? domain.slice(lastDot + 1) : \"\";\n\n const country = tld.length > 0 ? (getTldCountryMap().get(\".\" + tld) ?? null) : null;\n const provider = PROVIDER_DOMAINS[domain] ?? null;\n\n return new EmailAddress(\n normalized,\n localPart,\n domain,\n domainForValidation,\n tld,\n country,\n provider,\n originalDomain,\n );\n }\n\n static parse(input: string, options?: { tryCorrectTypos?: boolean }): EmailAddress {\n const r = EmailAddress.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid email address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EmailAddress.tryParse(input) !== null;\n }\n\n /**\n * Returns a `ValidationResult` describing why the input is invalid,\n * or a valid result when the input is well-formed.\n */\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\") {\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n }\n\n let sanitized = sanitizeInput(input);\n\n const ltIndex = sanitized.indexOf(\"<\");\n if (ltIndex >= 0) {\n const gtIndex = sanitized.indexOf(\">\", ltIndex + 1);\n if (gtIndex > ltIndex) sanitized = sanitized.slice(ltIndex + 1, gtIndex);\n }\n\n sanitized = sanitized.trim();\n if (sanitized.toLowerCase().startsWith(\"mailto:\")) {\n sanitized = sanitized.slice(7);\n const qIndex = sanitized.indexOf(\"?\");\n if (qIndex >= 0) sanitized = sanitized.slice(0, qIndex);\n }\n\n let normalized = sanitized.replace(/ /g, \"\").toLowerCase();\n if (normalized.endsWith(\".\")) normalized = normalized.slice(0, -1);\n\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) {\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Email address is too long.\",\n \"E-postadressen är för lång.\",\n );\n }\n\n const atIndex = normalized.lastIndexOf(\"@\");\n if (atIndex <= 0 || atIndex === normalized.length - 1) {\n return invalidResult(\n input,\n ValidationErrorReason.MissingAtSign,\n \"Email address must contain an @ sign with text before and after.\",\n \"E-postadressen måste innehålla ett @-tecken med text före och efter.\",\n );\n }\n\n const localPart = normalized.slice(0, atIndex);\n const domain = normalized.slice(atIndex + 1);\n let domainForValidation = domain;\n\n if (hasNonAscii(domain)) {\n for (const ch of domain) {\n const cp = ch.codePointAt(0)!;\n if (cp > 127 && !isUnicodeLetter(ch)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidDomain,\n \"Email address has an invalid domain.\",\n \"E-postadressen har en ogiltig domän.\",\n );\n }\n }\n const ascii = domainToAscii(domain);\n if (ascii == null) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidDomain,\n \"Email address has an invalid domain.\",\n \"E-postadressen har en ogiltig domän.\",\n );\n }\n domainForValidation = ascii;\n }\n\n const emailForValidation = `${localPart}@${domainForValidation}`;\n if (!EMAIL_PATTERN.test(emailForValidation)) {\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"Invalid email address format.\",\n \"Ogiltigt format för e-postadress.\",\n );\n }\n\n return validResult(input);\n }\n\n /**\n * Returns the normalized email in lowercase, e.g. `user@example.com`.\n * Returns `null` for invalid or empty input.\n */\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; tryCorrectTypos?: boolean },\n ): string | null {\n const r = EmailAddress.tryParse(\n input,\n options?.tryCorrectTypos != null ? { tryCorrectTypos: options.tryCorrectTypos } : undefined,\n );\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n /** Returns the normalized email, e.g. `user@example.com`, or `null` if invalid. */\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean; tryCorrectTypos?: boolean },\n ): string | null {\n return EmailAddress.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EmailAddress.normalize(input) === input;\n }\n\n /** Returns the normalized email address, e.g. `user@example.com`. */\n toNormalizedString(): string {\n return this.value;\n }\n\n /** Returns the normalized email address, e.g. `user@example.com`. */\n toString(): string {\n return this.value;\n }\n\n /**\n * Returns the email with the domain in ASCII (Punycode) form, e.g.\n * `user@xn--rneholm-b1a.com`. Same as `toString()` for ASCII domains.\n */\n toAsciiString(): string {\n return this.isInternationalizedDomain ? `${this.localPart}@${this.domainAscii}` : this.value;\n }\n\n /**\n * Scans unstructured text for potential email addresses. Heuristic; may include false positives.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<EmailAddress>[] {\n if (!text) return [];\n const out: TextCandidate<EmailAddress>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const r = EmailAddress.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<EmailAddress>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"EmailAddress\",\n category: TextCandidateCategory.Contact,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskEmailAddressInternal(r, false),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: EmailAddress | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n\n compareTo(other: EmailAddress | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction hasNonAscii(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n if (s.charCodeAt(i) > 127) return true;\n }\n return false;\n}\n\nconst UNICODE_LETTER = /\\p{L}/u;\nfunction isUnicodeLetter(ch: string): boolean {\n return UNICODE_LETTER.test(ch);\n}\n\n/**\n * Returns a masked email showing the first character of the local part and the full domain,\n * e.g. `peter@example.com` → `p***@example.com`.\n * Set `maskDomain` to `true` to also mask the domain label: `p***@e***.com`.\n */\nexport function maskEmailAddress(email: EmailAddress, options?: { maskDomain?: boolean }): string {\n return maskEmailAddressInternal(email, options?.maskDomain === true);\n}\n\nfunction maskEmailAddressInternal(email: EmailAddress, maskDomain: boolean): string {\n const local = email.localPart;\n const maskedLocal =\n local.length <= 1 ? local : local[0] + \"*\".repeat(Math.min(local.length - 1, 3));\n\n if (maskDomain) {\n const domain = email.domain;\n const firstDot = domain.indexOf(\".\");\n if (firstDot > 0) {\n const label = domain.slice(0, firstDot);\n const suffix = domain.slice(firstDot);\n const maskedDomain =\n label.length <= 1 ? label : label[0] + \"*\".repeat(Math.min(label.length - 1, 3));\n return `${maskedLocal}@${maskedDomain}${suffix}`;\n }\n }\n\n return `${maskedLocal}@${email.domain}`;\n}\n\n/** Returns a `mailto:` URI, e.g. `mailto:info@example.com`. */\nexport function toMailtoUri(email: EmailAddress): string {\n return `mailto:${email.toNormalizedString()}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 2048;\n\nconst RESERVED_TLDS = new Set([\"test\", \"example\", \"invalid\", \"localhost\"]);\nconst RESERVED_DOMAINS = new Set([\"example.com\", \"example.org\", \"example.net\"]);\n\nconst DEFAULT_PORTS: Record<string, number> = {\n http: 80,\n https: 443,\n ftp: 21,\n ws: 80,\n wss: 443,\n gopher: 70,\n};\n\nlet tldCountryMapCache: Map<string, Country> | null = null;\nfunction getTldCountryMap(): Map<string, Country> {\n if (tldCountryMapCache) return tldCountryMapCache;\n const m = new Map<string, Country>();\n for (const c of Country.all) {\n if (c.topLevelDomain) m.set(c.topLevelDomain.toLowerCase(), c);\n }\n tldCountryMapCache = m;\n return m;\n}\n\nconst SCAN_PATTERN =\n /(?:[a-zA-Z][\\w+.-]*:\\/\\/[^\\s<>\"']+|(?:mailto|tel|sms|callto):[^\\s<>\"']+|\\bwww\\.[^\\s<>\"']+)/gi;\n\nconst IPV4 = /^(?:\\d{1,3}\\.){3}\\d{1,3}$/;\nconst ABSOLUTE_URI = /^([a-zA-Z][a-zA-Z0-9+\\-.]*):/;\nconst HIERARCHICAL_RE = /^([a-zA-Z][a-zA-Z0-9+\\-.]*):\\/\\//;\n\ninterface UrlParts {\n value: string;\n scheme: string;\n host: string;\n port: number | null;\n path: string;\n query: string | null;\n fragment: string | null;\n tld: string;\n country: Country | null;\n isExample: boolean;\n isIp: boolean;\n}\n\n/**\n * A URL or URI (`webbadress`). Accepts any valid URI scheme — `http`, `https`,\n * `mailto`, `tel`, `ssh`, custom schemes, etc. Bare domains like `example.com`\n * are auto-prefixed with `https://`. Reserved example/test domains per\n * RFC 2606 / RFC 6761 are flagged via `isExampleDomain`.\n */\nexport class Url {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"URL\",\n localizedName: \"Webbadress\",\n emoji: \"\\u{1F517}\",\n sources: Object.freeze([\n \"https://datatracker.ietf.org/doc/html/rfc3986\",\n \"https://datatracker.ietf.org/doc/html/rfc2606\",\n \"https://datatracker.ietf.org/doc/html/rfc6761\",\n ]),\n });\n\n /** The normalized URL string, e.g. `https://www.example.com/path`. */\n readonly value: string;\n /** The URI scheme without `://`, e.g. `https`. */\n readonly scheme: string;\n /** The full hostname, e.g. `www.example.com`. Empty for non-hierarchical URIs. */\n readonly host: string;\n /** Explicit port, or `null` when the default port for the scheme is used. */\n readonly port: number | null;\n /** The path component, e.g. `/path/to/page`. Root paths are `/`. */\n readonly path: string;\n /** Query string without `?`, or `null` when absent. */\n readonly query: string | null;\n /** Fragment without `#`, or `null` when absent. */\n readonly fragment: string | null;\n /** Top-level domain without the dot, e.g. `com`, `se`. */\n readonly topLevelDomain: string;\n /** Country associated with a country-code TLD, or `null` for generic TLDs. */\n readonly country: Country | null;\n /** True when the scheme is `https`. */\n readonly isSecure: boolean;\n /** True when the host is a reserved example/test domain (RFC 2606 / RFC 6761). */\n readonly isExampleDomain: boolean;\n /** True when the host is an IP address. */\n readonly isIpAddress: boolean;\n\n private constructor(p: UrlParts) {\n this.value = p.value;\n this.scheme = p.scheme;\n this.host = p.host;\n this.port = p.port;\n this.path = p.path;\n this.query = p.query;\n this.fragment = p.fragment;\n this.topLevelDomain = p.tld;\n this.country = p.country;\n this.isSecure = p.scheme === \"https\";\n this.isExampleDomain = p.isExample;\n this.isIpAddress = p.isIp;\n }\n\n static tryParse(input: string | null | undefined): Url | null {\n if (input == null || input.trim() === \"\") return null;\n\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n\n let parsed = Url.#tryParseAbsolute(trimmed);\n if (parsed == null) {\n if (!trimmed.includes(\".\")) return null;\n parsed = Url.#tryParseAbsolute(\"https://\" + trimmed);\n if (parsed == null) return null;\n }\n\n return parsed;\n }\n\n static parse(input: string): Url {\n const r = Url.tryParse(input);\n if (r === null) throw new Error(\"Invalid URL.\");\n return r;\n }\n\n /**\n * The standard `URL` view of this value, for interop with `fetch` and other\n * web APIs. The .NET port exposes the same thing as `ToUri()`.\n */\n toUrl(): URL {\n return new URL(this.value);\n }\n\n /** Creates a {@link Url} from a standard `URL`. Throws when it cannot be represented. */\n static fromUrl(url: URL): Url {\n const r = Url.tryParse(url.href);\n if (r === null) throw new Error(\"Invalid URL.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Url.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Url.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return Url.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Url.normalize(input) === input;\n }\n\n /** Returns the normalized URL, e.g. `https://www.example.com/path`. */\n toNormalizedString(): string {\n return this.value;\n }\n\n /** Returns the normalized URL, e.g. `https://www.example.com/path`. */\n toString(): string {\n return this.value;\n }\n\n /**\n * Scans unstructured text for potential URLs. Heuristic — may include false positives.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Url>[] {\n if (!text) return [];\n const out: TextCandidate<Url>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const candidate = trimTrailingPunctuation(m[0]);\n const url = Url.tryParse(candidate);\n if (!url) continue;\n out.push(\n new TextCandidate<Url>({\n startIndex: m.index,\n length: candidate.length,\n originalText: candidate,\n typeName: \"Url\",\n category: TextCandidateCategory.Contact,\n normalizedForm: url.toNormalizedString(),\n formattedForm: url.toString(),\n maskedForm: maskUrl(url),\n confidence: TextMatchConfidence.High,\n value: url,\n }),\n );\n }\n return out;\n }\n\n equals(other: Url | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n\n compareTo(other: Url | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n\n static #tryParseAbsolute(input: string): Url | null {\n const m = input.match(ABSOLUTE_URI);\n if (!m) return null;\n const scheme = m[1]!.toLowerCase();\n if (scheme.includes(\".\")) return null;\n\n const isHierarchical = HIERARCHICAL_RE.test(input);\n if (isHierarchical) {\n return Url.#parseHierarchical(input, scheme);\n }\n return Url.#parseNonHierarchical(input, scheme);\n }\n\n static #parseHierarchical(input: string, scheme: string): Url | null {\n let u: URL;\n try {\n u = new URL(input);\n } catch {\n return null;\n }\n\n const rawHost = u.hostname;\n const isIp = rawHost.length > 0 && (IPV4.test(rawHost) || rawHost.startsWith(\"[\"));\n let tld = \"\";\n if (!isIp && rawHost.length > 0) {\n const lastDot = rawHost.lastIndexOf(\".\");\n tld = lastDot >= 0 ? rawHost.slice(lastDot + 1) : \"\";\n }\n\n let country: Country | null = null;\n if (!isIp && tld.length > 0) {\n country = getTldCountryMap().get(\".\" + tld) ?? null;\n }\n\n const isExample =\n !isIp &&\n rawHost.length > 0 &&\n (RESERVED_TLDS.has(tld.toLowerCase()) ||\n RESERVED_DOMAINS.has(rawHost.toLowerCase()) ||\n rawHost.toLowerCase().endsWith(\".example.com\") ||\n rawHost.toLowerCase().endsWith(\".example.org\") ||\n rawHost.toLowerCase().endsWith(\".example.net\"));\n\n let port: number | null = null;\n if (u.port !== \"\") port = parseInt(u.port, 10);\n if (port != null && DEFAULT_PORTS[scheme] === port) port = null;\n\n const normalized = u.href;\n const path = u.pathname;\n const query = u.search.length > 0 ? u.search.slice(1) : null;\n const fragment = u.hash.length > 0 ? u.hash.slice(1) : null;\n\n return new Url({\n value: normalized,\n scheme,\n host: rawHost,\n port,\n path: path.length === 0 ? \"/\" : path,\n query,\n fragment,\n tld,\n country,\n isExample,\n isIp,\n });\n }\n\n static #parseNonHierarchical(input: string, scheme: string): Url | null {\n const colonIdx = input.indexOf(\":\");\n if (colonIdx < 0) return null;\n const rest = input.slice(colonIdx + 1);\n if (rest.length === 0) return null;\n\n let host = \"\";\n let tld = \"\";\n let country: Country | null = null;\n let isExample = false;\n let path = rest;\n let query: string | null = null;\n let fragment: string | null = null;\n\n if (scheme === \"mailto\") {\n const qIdx = rest.indexOf(\"?\");\n let mainPart = rest;\n if (qIdx >= 0) {\n mainPart = rest.slice(0, qIdx);\n const fragIdx = rest.indexOf(\"#\", qIdx);\n if (fragIdx >= 0) {\n query = rest.slice(qIdx + 1, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n } else {\n query = rest.slice(qIdx + 1);\n }\n } else {\n const fragIdx = rest.indexOf(\"#\");\n if (fragIdx >= 0) {\n mainPart = rest.slice(0, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n }\n }\n\n const atIdx = mainPart.lastIndexOf(\"@\");\n if (atIdx >= 0) {\n host = mainPart.slice(atIdx + 1).toLowerCase();\n const lastDot = host.lastIndexOf(\".\");\n tld = lastDot >= 0 ? host.slice(lastDot + 1) : \"\";\n if (tld.length > 0) {\n country = getTldCountryMap().get(\".\" + tld) ?? null;\n }\n isExample =\n RESERVED_TLDS.has(tld.toLowerCase()) ||\n RESERVED_DOMAINS.has(host) ||\n host.endsWith(\".example.com\") ||\n host.endsWith(\".example.org\") ||\n host.endsWith(\".example.net\");\n }\n path = mainPart;\n } else {\n const qIdx = rest.indexOf(\"?\");\n if (qIdx >= 0) {\n path = rest.slice(0, qIdx);\n const fragIdx = rest.indexOf(\"#\", qIdx);\n if (fragIdx >= 0) {\n query = rest.slice(qIdx + 1, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n } else {\n query = rest.slice(qIdx + 1);\n }\n } else {\n const fragIdx = rest.indexOf(\"#\");\n if (fragIdx >= 0) {\n path = rest.slice(0, fragIdx);\n fragment = rest.slice(fragIdx + 1);\n }\n }\n }\n\n const normalized = `${scheme}:${rest}`;\n return new Url({\n value: normalized,\n scheme,\n host,\n port: null,\n path,\n query,\n fragment,\n tld,\n country,\n isExample,\n isIp: false,\n });\n }\n}\n\nfunction trimTrailingPunctuation(value: string): string {\n let end = value.length;\n while (end > 0) {\n const ch = value[end - 1];\n if (\n ch === \".\" ||\n ch === \",\" ||\n ch === \";\" ||\n ch === \"!\" ||\n ch === \"?\" ||\n ch === \")\" ||\n ch === \"]\" ||\n ch === \">\" ||\n ch === \"'\" ||\n ch === '\"'\n ) {\n if (ch === \")\" && value.includes(\"(\")) break;\n if (ch === \"]\" && value.includes(\"[\")) break;\n end--;\n } else {\n break;\n }\n }\n return end < value.length ? value.slice(0, end) : value;\n}\n\n/**\n * Returns a masked URL showing the scheme and host but obscuring the path,\n * query, and fragment, e.g.\n * `https://www.example.com/my/secret/page?key=val` →\n * `https://www.example.com/***?***`.\n * For non-hierarchical URIs (mailto:, tel:), returns `scheme:***`.\n */\nexport function maskUrl(url: Url): string {\n const schemePrefix = url.scheme + \"://\";\n if (!url.value.toLowerCase().startsWith(schemePrefix)) {\n return `${url.scheme}:***`;\n }\n\n let s = url.scheme + \"://\" + url.host;\n if (url.port != null) s += \":\" + url.port;\n\n if (url.path === \"/\" || url.path === \"\") {\n s += \"/\";\n } else {\n s += \"/***\";\n }\n\n if (url.query != null) s += \"?***\";\n if (url.fragment != null) s += \"#***\";\n return s;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepAsciiAlphanumericUppercase } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst ISIN_LENGTH = 12;\nconst MAX_INPUT_LENGTH = 30;\n\n/**\n * An International Securities Identification Number (ISO 6166), e.g. `SE0000108656`.\n * 2-letter country code + 9-character NSIN + 1 Luhn check digit.\n */\nexport class Isin {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"ISIN\",\n localizedName: \"ISIN\",\n emoji: \"\\u{1F4C8}\",\n sources: Object.freeze([\n \"https://www.iso.org/standard/78502.html\",\n \"https://en.wikipedia.org/wiki/International_Securities_Identification_Number\",\n \"https://www.anna-web.org/\",\n ]),\n });\n\n /** The 12-character ISIN in uppercase, e.g. `SE0000108656`. */\n readonly value: string;\n\n /** ISO 3166-1 alpha-2 country code (chars 1-2), e.g. `SE`. */\n get countryCode(): string {\n return this.value.slice(0, 2);\n }\n\n /** National Securities Identifying Number (chars 3-11), e.g. `000010865`. */\n get nsin(): string {\n return this.value.slice(2, 11);\n }\n\n /** Luhn check digit (last char), e.g. `6`. */\n get checkDigit(): string {\n return this.value.slice(11, 12);\n }\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): Isin | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = keepAsciiAlphanumericUppercase(input);\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n if (cleaned.length !== ISIN_LENGTH) return null;\n\n const c0 = cleaned.charCodeAt(0);\n const c1 = cleaned.charCodeAt(1);\n if (c0 < 0x41 || c0 > 0x5a) return null;\n if (c1 < 0x41 || c1 > 0x5a) return null;\n const c11 = cleaned.charCodeAt(11);\n if (c11 < 0x30 || c11 > 0x39) return null;\n\n for (let i = 2; i < 11; i++) {\n const c = cleaned.charCodeAt(i);\n if (!((c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x5a))) return null;\n }\n\n if (!isValidLuhnCheckDigit(cleaned)) return null;\n\n return new Isin(cleaned);\n }\n\n static parse(input: string): Isin {\n const r = Isin.tryParse(input);\n if (r === null) throw new Error(\"Invalid ISIN (length, format, or check digit invalid).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Isin.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Isin.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Isin.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Isin.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Isin>[] {\n if (!text) return [];\n const out: TextCandidate<Isin>[] = [];\n const re = /(?<![A-Z0-9])[A-Z]{2}[A-Z0-9]{9}\\d(?![A-Z0-9])/gu;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = Isin.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<Isin>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Isin\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskIsin(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Isin | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: Isin | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction isValidLuhnCheckDigit(isin: string): boolean {\n let digits = \"\";\n for (let i = 0; i < isin.length; i++) {\n const c = isin.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) {\n digits += isin[i];\n } else if (c >= 0x41 && c <= 0x5a) {\n digits += String(c - 0x41 + 10);\n } else {\n return false;\n }\n }\n return luhnIsValid(digits);\n}\n\n/**\n * Masks the ISIN preserving the country code, e.g. `SE0000108656` → `SE**********`.\n */\nexport function maskIsin(isin: Isin): string {\n return isin.countryCode + \"*\".repeat(isin.value.length - 2);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Currency } from \"./currency.js\";\nimport { ExchangeRates, type IExchangeRates } from \"./exchange-rates.js\";\n\nconst MAX_INPUT_LENGTH = 100;\nconst PRECISION_EPSILON = 1e-9;\n\ninterface ParseOptions {\n fallbackCurrency?: Currency | null;\n}\n\ninterface FormatOptions extends ParseOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A monetary amount composed of a numeric value and a {@link Currency}.\n *\n * Note: JavaScript has no native arbitrary-precision decimal. Amounts are\n * stored as `number` (IEEE-754 double). Parsing and arithmetic round to the\n * currency's decimal places to keep results predictable.\n */\nexport class MoneyAmount {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Money Amount\",\n localizedName: \"Belopp\",\n emoji: \"\\u{1F4B0}\",\n sources: Object.freeze([\"https://www.iso.org/iso-4217-currency-codes.html\"]),\n });\n\n readonly amount: number;\n readonly currency: Currency;\n\n private constructor(amount: number, currency: Currency) {\n this.amount = amount;\n this.currency = currency;\n }\n\n /** Creates a {@link MoneyAmount} from an explicit amount and currency. */\n static create(amount: number, currency: Currency): MoneyAmount {\n if (!hasSupportedPrecision(amount, currency.decimalPlaces)) {\n throw new Error(\n `Currency ${currency.code} supports at most ${currency.decimalPlaces} decimal places.`,\n );\n }\n return new MoneyAmount(amount, currency);\n }\n\n static tryParse(input: string | null | undefined, options?: ParseOptions): MoneyAmount | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const fallback = options?.fallbackCurrency ?? null;\n const split = splitCurrencyAndNumber(trimmed, fallback);\n if (split === null) return null;\n\n const amount = tryParseNumber(split.numberPart, split.currency);\n if (amount === null) return null;\n\n return new MoneyAmount(amount, split.currency);\n }\n\n static parse(input: string, options?: ParseOptions): MoneyAmount {\n const r = MoneyAmount.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid money amount.\");\n return r;\n }\n\n static isValid(input: string | null | undefined, options?: ParseOptions): boolean {\n return MoneyAmount.tryParse(input, options) !== null;\n }\n\n /** Returns the amount formatted using the default culture's numeric conventions, e.g. `1 000,00 SEK`. */\n static format(input: string | null | undefined, options?: FormatOptions): string | null {\n const r = MoneyAmount.tryParse(input, options);\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 /** Returns the amount as a plain decimal string with the ISO code, e.g. `1000.50 SEK`. */\n static normalize(input: string | null | undefined, options?: FormatOptions): string | null {\n const r = MoneyAmount.tryParse(input, options);\n if (r) return r.toNormalizedString();\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 && MoneyAmount.normalize(input) === input;\n }\n\n /** `1000.50 SEK` (invariant culture). */\n toNormalizedString(): string {\n return `${formatInvariant(this.amount, this.currency.decimalPlaces)} ${this.currency.code}`;\n }\n\n /** `1 000,00 SEK` (current culture). */\n toString(): string {\n const formatted = new Intl.NumberFormat(PrimitivesDefaults.culture, {\n minimumFractionDigits: this.currency.decimalPlaces,\n maximumFractionDigits: this.currency.decimalPlaces,\n useGrouping: true,\n }).format(this.amount);\n return `${formatted} ${this.currency.code}`;\n }\n\n // --- Arithmetic ---\n\n add(other: MoneyAmount): MoneyAmount {\n if (this.currency.code !== other.currency.code) {\n throw new Error(`Cannot add ${this.currency.code} and ${other.currency.code}.`);\n }\n return new MoneyAmount(\n roundTo(this.amount + other.amount, this.currency.decimalPlaces),\n this.currency,\n );\n }\n\n subtract(other: MoneyAmount): MoneyAmount {\n if (this.currency.code !== other.currency.code) {\n throw new Error(`Cannot subtract ${other.currency.code} from ${this.currency.code}.`);\n }\n return new MoneyAmount(\n roundTo(this.amount - other.amount, this.currency.decimalPlaces),\n this.currency,\n );\n }\n\n multiply(factor: number): MoneyAmount {\n return new MoneyAmount(\n roundTo(this.amount * factor, this.currency.decimalPlaces),\n this.currency,\n );\n }\n\n divide(divisor: number): MoneyAmount {\n if (divisor === 0) throw new Error(\"Division by zero.\");\n return new MoneyAmount(\n roundTo(this.amount / divisor, this.currency.decimalPlaces),\n this.currency,\n );\n }\n\n negate(): MoneyAmount {\n return new MoneyAmount(-this.amount, this.currency);\n }\n\n /**\n * Converts this amount to `target` using either an explicit rate or an\n * {@link IExchangeRates} provider. The result is rounded to the target\n * currency's decimal places using half-up rounding.\n */\n convertTo(target: Currency, rateOrRates: number | IExchangeRates): MoneyAmount {\n let rate: number;\n if (typeof rateOrRates === \"number\") {\n rate = rateOrRates;\n } else {\n rate = rateOrRates.getRate(this.currency, target);\n }\n if (!(rate > 0)) throw new Error(\"Exchange rate must be positive.\");\n const converted = roundTo(this.amount * rate, target.decimalPlaces);\n return new MoneyAmount(converted, target);\n }\n\n // --- Equality / ordering ---\n\n equals(other: MoneyAmount | null | undefined): boolean {\n return (\n other != null && this.amount === other.amount && this.currency.code === other.currency.code\n );\n }\n\n compareTo(other: MoneyAmount | null | undefined): number {\n if (other == null) return 1;\n const c =\n this.currency.code < other.currency.code\n ? -1\n : this.currency.code > other.currency.code\n ? 1\n : 0;\n if (c !== 0) return c;\n return this.amount < other.amount ? -1 : this.amount > other.amount ? 1 : 0;\n }\n}\n\n// --- Helpers ---\n\nfunction hasSupportedPrecision(amount: number, decimalPlaces: number): boolean {\n if (!Number.isFinite(amount)) return false;\n const factor = Math.pow(10, decimalPlaces);\n const rounded = Math.round(amount * factor) / factor;\n if (Math.abs(amount - rounded) > Math.max(Math.abs(amount), 1) * PRECISION_EPSILON) {\n return false;\n }\n return true;\n}\n\nfunction roundTo(amount: number, decimalPlaces: number): number {\n const factor = Math.pow(10, decimalPlaces);\n return Math.round(amount * factor) / factor;\n}\n\nfunction formatInvariant(amount: number, decimalPlaces: number): string {\n if (decimalPlaces === 0 || Number.isInteger(amount)) {\n return Math.round(amount).toString();\n }\n return amount.toFixed(decimalPlaces);\n}\n\ninterface SplitResult {\n currency: Currency;\n numberPart: string;\n}\n\nfunction splitCurrencyAndNumber(input: string, fallback: Currency | null): SplitResult | null {\n // Try ISO code or symbol as prefix.\n const prefix = tryMatchPrefix(input, fallback);\n if (prefix) return prefix;\n\n // Try ISO code or symbol as suffix.\n const suffix = tryMatchSuffix(input, fallback);\n if (suffix) return suffix;\n\n if (fallback === null) return null;\n return { currency: fallback, numberPart: input };\n}\n\nfunction isLatinLetter(ch: string): boolean {\n if (!ch) return false;\n const c = ch.charCodeAt(0);\n return (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a);\n}\n\nfunction tryMatchPrefix(input: string, fallback: Currency | null): SplitResult | null {\n // 3-letter code prefix: \"SEK1000\", \"SEK 1000\".\n if (\n input.length >= 4 &&\n isLatinLetter(input[0]!) &&\n isLatinLetter(input[1]!) &&\n isLatinLetter(input[2]!)\n ) {\n const code = input.slice(0, 3);\n const rest = input.slice(3).replace(/^\\s+/, \"\");\n if (rest.length > 0) {\n const c = Currency.tryParse(code);\n if (c) return { currency: c, numberPart: rest };\n }\n }\n\n // Symbol prefix: \"$500\", \"kr 1000\".\n return tryResolveSymbolPrefix(input, fallback);\n}\n\nfunction tryMatchSuffix(input: string, fallback: Currency | null): SplitResult | null {\n if (\n input.length >= 4 &&\n isLatinLetter(input[input.length - 1]!) &&\n isLatinLetter(input[input.length - 2]!) &&\n isLatinLetter(input[input.length - 3]!)\n ) {\n const code = input.slice(-3);\n const rest = input.slice(0, -3).replace(/\\s+$/, \"\");\n if (rest.length > 0) {\n const c = Currency.tryParse(code);\n if (c) return { currency: c, numberPart: rest };\n }\n }\n\n return tryResolveSymbolSuffix(input, fallback);\n}\n\nfunction getDistinctSymbols(): string[] {\n const seen = new Set<string>();\n for (const c of Currency.all) {\n seen.add(c.symbol.toLowerCase());\n }\n return Array.from(seen).sort((a, b) => b.length - a.length);\n}\n\nfunction tryResolveSymbolPrefix(input: string, fallback: Currency | null): SplitResult | null {\n const inputLower = input.toLowerCase();\n for (const symbol of getDistinctSymbols()) {\n if (!inputLower.startsWith(symbol)) continue;\n const rest = input.slice(symbol.length).replace(/^\\s+/, \"\");\n if (rest.length === 0) return null;\n const currency = resolveCurrencyForSymbol(symbol, fallback);\n if (!currency) continue;\n return { currency, numberPart: rest };\n }\n return null;\n}\n\nfunction tryResolveSymbolSuffix(input: string, fallback: Currency | null): SplitResult | null {\n const inputLower = input.toLowerCase();\n for (const symbol of getDistinctSymbols()) {\n if (!inputLower.endsWith(symbol)) continue;\n const rest = input.slice(0, input.length - symbol.length).replace(/\\s+$/, \"\");\n if (rest.length === 0) return null;\n const currency = resolveCurrencyForSymbol(symbol, fallback);\n if (!currency) continue;\n return { currency, numberPart: rest };\n }\n return null;\n}\n\nfunction resolveCurrencyForSymbol(symbol: string, fallback: Currency | null): Currency | null {\n if (fallback && fallback.symbol.toLowerCase() === symbol) return fallback;\n for (const c of Currency.all) {\n if (c.symbol.toLowerCase() === symbol) return c;\n }\n return null;\n}\n\nfunction tryParseNumber(raw: string, currency: Currency): number | null {\n let s = raw.trim();\n if (s.length === 0) return null;\n\n let negative = false;\n if (s[0] === \"-\") {\n negative = true;\n s = s.slice(1).replace(/^\\s+/, \"\");\n } else if (s[0] === \"+\") {\n s = s.slice(1).replace(/^\\s+/, \"\");\n }\n\n if (s.length === 0) return null;\n\n const lastComma = s.lastIndexOf(\",\");\n const lastPeriod = s.lastIndexOf(\".\");\n\n let integerPart: string;\n let fracPart = \"\";\n\n if (lastComma > lastPeriod) {\n const afterComma = s.slice(lastComma + 1);\n if (afterComma.length <= 2 && /^\\d+$/.test(afterComma)) {\n fracPart = afterComma;\n integerPart = s.slice(0, lastComma);\n } else {\n integerPart = s;\n }\n } else if (lastPeriod > lastComma) {\n const afterPeriod = s.slice(lastPeriod + 1);\n if (afterPeriod.length <= 2 && /^\\d+$/.test(afterPeriod)) {\n fracPart = afterPeriod;\n integerPart = s.slice(0, lastPeriod);\n } else {\n integerPart = s;\n }\n } else {\n integerPart = s;\n }\n\n const cleanInteger = integerPart.replace(/[\\s\\u00A0.,]/g, \"\");\n if (cleanInteger.length === 0 || !/^\\d+$/.test(cleanInteger)) return null;\n\n if (fracPart.length > currency.decimalPlaces) return null;\n\n const combined = fracPart.length > 0 ? `${cleanInteger}.${fracPart}` : cleanInteger;\n const parsed = Number(combined);\n if (!Number.isFinite(parsed)) return null;\n if (!hasSupportedPrecision(parsed, currency.decimalPlaces)) return null;\n\n return negative ? -parsed : parsed;\n}\n\n/** Mask a money amount preserving the currency, e.g. `1 000,00 SEK` → `*** SEK`. */\nexport function maskMoneyAmount(amount: MoneyAmount): string {\n return `*** ${amount.currency.code}`;\n}\n\n// Re-export here for the rare case someone imports MoneyAmount and uses the rates type.\nexport { ExchangeRates };\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\nconst PARSE_PATTERN =\n /^(?<name>[\\p{L}\\p{M}\\d][\\p{L}\\p{M}\\d\\s'-]*?)\\s+(?<block>\\d{1,6}):(?<unit>\\d{1,6})$/u;\n\nconst SCAN_PATTERN =\n /(?<![\\p{L}\\p{M}\\d])(?<name>\\p{Lu}[\\p{L}\\p{M}'-]*(?:\\s\\p{Lu}[\\p{L}\\p{M}'-]*)?)\\s+(?<block>\\d{1,6}):(?<unit>\\d{1,6})(?!\\d)/gu;\n\n/**\n * A Swedish property designation (`fastighetsbeteckning`), e.g. `Stockholm Söder 75:2`.\n * Combines the municipality/tract name with a register number `BLOCK:UNIT`.\n */\nexport class SwedishPropertyDesignation {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Property Designation\",\n localizedName: \"Fastighetsbeteckning\",\n emoji: \"\\u{1F3E0}\",\n sources: Object.freeze([\n \"https://www.lantmateriet.se/sv/kartor/vara-karttjanster/min-karta/hitta-fastighetsbeteckning-i-min-karta/\",\n \"https://www2.lantmateriet.se/sv/fastighet-och-mark/information-om-fastigheter/Fastighetsregistret/registrets-innehall/\",\n \"https://sv.wikipedia.org/wiki/Fastighetsbeteckning\",\n ]),\n });\n\n /** The full designation, e.g. `Stockholm Söder 75:2`. */\n readonly value: string;\n /** The capitalized designation name, e.g. `Stockholm Söder`. */\n readonly designationName: string;\n /** The register number `BLOCK:UNIT`, e.g. `75:2`. */\n readonly registerNumber: string;\n /** Block portion of the register number. */\n readonly blockNumber: number;\n /** Unit portion of the register number. */\n readonly unitNumber: number;\n\n private constructor(\n value: string,\n designationName: string,\n registerNumber: string,\n blockNumber: number,\n unitNumber: number,\n ) {\n this.value = value;\n this.designationName = designationName;\n this.registerNumber = registerNumber;\n this.blockNumber = blockNumber;\n this.unitNumber = unitNumber;\n }\n\n static tryParse(input: string | null | undefined): SwedishPropertyDesignation | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = normalizeInput(input);\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n\n const match = PARSE_PATTERN.exec(normalized);\n if (!match || !match.groups) return null;\n\n const name = normalizeName(match.groups.name!);\n if (name === \"\") return null;\n\n const block = Number(match.groups.block);\n const unit = Number(match.groups.unit);\n if (!Number.isFinite(block) || block <= 0) return null;\n if (!Number.isFinite(unit) || unit <= 0) return null;\n\n const register = `${block}:${unit}`;\n const value = `${name} ${register}`;\n return new SwedishPropertyDesignation(value, name, register, block, unit);\n }\n\n static parse(input: string): SwedishPropertyDesignation {\n const r = SwedishPropertyDesignation.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish property designation.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPropertyDesignation.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPropertyDesignation.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishPropertyDesignation.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPropertyDesignation.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishPropertyDesignation>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPropertyDesignation>[] = [];\n const re = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishPropertyDesignation.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishPropertyDesignation>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPropertyDesignation\",\n category: TextCandidateCategory.Property,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishPropertyDesignation(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPropertyDesignation | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishPropertyDesignation | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction normalizeInput(input: string): string {\n let s = collapseWhitespace(input);\n s = s.replace(/\\s*:\\s*/g, \":\");\n return s;\n}\n\nfunction normalizeName(input: string): string {\n const words = collapseWhitespace(input)\n .split(\" \")\n .filter((w) => w.length > 0);\n return words.map(capitalizeHyphenatedWord).join(\" \");\n}\n\nfunction capitalizeHyphenatedWord(word: string): string {\n if (!word) return word;\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const locale = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(locale);\n for (let i = 0; i < lowered.length; i++) {\n const ch = lowered[i]!;\n if (isLetter(ch)) {\n return lowered.slice(0, i) + ch.toLocaleUpperCase(locale) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n\nfunction isLetter(ch: string): boolean {\n return /\\p{L}/u.test(ch);\n}\n\n/**\n * Masks the property designation preserving the name, e.g.\n * `Stockholm Söder 75:2` → `Stockholm Söder **:*`.\n */\nexport function maskSwedishPropertyDesignation(d: SwedishPropertyDesignation): string {\n const block = \"*\".repeat(d.blockNumber.toString().length);\n const unit = \"*\".repeat(d.unitNumber.toString().length);\n return `${d.designationName} ${block}:${unit}`;\n}\n\n/** Returns a Lantmäteriet map search URL for the designation. */\nexport function getLantmaterietUrl(d: SwedishPropertyDesignation): string {\n return `https://minkarta.lantmateriet.se/?search=${encodeURIComponent(d.value)}`;\n}\n\n/** Returns a Hitta.se map search URL for the designation. */\nexport function getPropertyHittaUrl(d: SwedishPropertyDesignation): string {\n return `https://www.hitta.se/kartan?s=${encodeURIComponent(d.value)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/**\n * Main category derived from the first digit of a Swedish property taxation code (`typkod`).\n */\nexport const SwedishPropertyTaxationCategory = {\n Unknown: \"Unknown\",\n Lantbruksenhet: \"Lantbruksenhet\",\n Smahusenhet: \"Smahusenhet\",\n Hyreshusenhet: \"Hyreshusenhet\",\n Industrienhet: \"Industrienhet\",\n Taktmark: \"Taktmark\",\n Elproduktionsenhet: \"Elproduktionsenhet\",\n Specialenhet: \"Specialenhet\",\n OvrigMark: \"OvrigMark\",\n} as const;\n\nexport type SwedishPropertyTaxationCategory =\n (typeof SwedishPropertyTaxationCategory)[keyof typeof SwedishPropertyTaxationCategory];\n\nconst CATEGORY_BY_FIRST_DIGIT: Record<number, SwedishPropertyTaxationCategory> = {\n 1: SwedishPropertyTaxationCategory.Lantbruksenhet,\n 2: SwedishPropertyTaxationCategory.Smahusenhet,\n 3: SwedishPropertyTaxationCategory.Hyreshusenhet,\n 4: SwedishPropertyTaxationCategory.Industrienhet,\n 5: SwedishPropertyTaxationCategory.Taktmark,\n 6: SwedishPropertyTaxationCategory.Elproduktionsenhet,\n 7: SwedishPropertyTaxationCategory.Specialenhet,\n 8: SwedishPropertyTaxationCategory.OvrigMark,\n};\n\ninterface KnownCode {\n readonly english: string;\n readonly swedish: string;\n}\n\nconst KNOWN_CODES: Readonly<Record<number, KnownCode>> = {\n 110: { english: \"Agricultural unit, undeveloped\", swedish: \"Lantbruksenhet, obebyggd\" },\n 113: {\n english: \"Agricultural unit, with farm building only\",\n swedish: \"Lantbruksenhet, obebyggd, enbart med ekonomibyggnad\",\n },\n 120: { english: \"Agricultural unit, developed\", swedish: \"Lantbruksenhet, bebyggd\" },\n\n 210: { english: \"Small house unit, land only\", swedish: \"Småhusenhet, tomtmark\" },\n 213: {\n english: \"Small house unit, land with building value under 50 000 SEK\",\n swedish: \"Småhusenhet, tomtmark med byggnadsvärde under 50 000 kr\",\n },\n 220: { english: \"Small house unit, developed\", swedish: \"Småhusenhet, bebyggd\" },\n 221: {\n english: \"Small house unit, developed with two houses\",\n swedish: \"Småhusenhet, bebyggd med två småhus\",\n },\n 225: {\n english: \"Small house unit, on leasehold\",\n swedish: \"Småhusenhet, bebyggd på ofri grund\",\n },\n 230: {\n english: \"Small house unit, developed, cluster housing\",\n swedish: \"Småhusenhet, bebyggd, grupphusområde\",\n },\n\n 310: { english: \"Rental property unit, land only\", swedish: \"Hyreshusenhet, tomtmark\" },\n 313: {\n english: \"Rental property unit, land with building value under 50 000 SEK\",\n swedish: \"Hyreshusenhet, tomtmark med byggnadsvärde under 50 000 kr\",\n },\n 320: {\n english: \"Rental property unit, developed, residential\",\n swedish: \"Hyreshusenhet, bebyggd, bostäder\",\n },\n 321: {\n english: \"Rental property unit, developed, residential and commercial\",\n swedish: \"Hyreshusenhet, bebyggd, bostäder och lokaler\",\n },\n 325: {\n english: \"Rental property unit, developed, commercial\",\n swedish: \"Hyreshusenhet, bebyggd, lokaler\",\n },\n 381: {\n english: \"Rental property unit, developed, residential (special)\",\n swedish: \"Hyreshusenhet, bebyggd, bostäder (specialenhet)\",\n },\n\n 410: { english: \"Industrial unit, land only\", swedish: \"Industrienhet, tomtmark\" },\n 420: { english: \"Industrial unit, developed\", swedish: \"Industrienhet, bebyggd\" },\n 421: {\n english: \"Industrial unit, developed with rental property area\",\n swedish: \"Industrienhet, bebyggd med hyreshusareal\",\n },\n 498: { english: \"Industrial unit, petrol station\", swedish: \"Industrienhet, bensinstation\" },\n\n 510: { english: \"Quarry land, undeveloped\", swedish: \"Täktmark, obebyggd\" },\n 520: { english: \"Quarry land, developed\", swedish: \"Täktmark, bebyggd\" },\n\n 610: {\n english: \"Power production unit, hydropower\",\n swedish: \"Elproduktionsenhet, vattenkraftverk\",\n },\n 620: {\n english: \"Power production unit, thermal power\",\n swedish: \"Elproduktionsenhet, värmekraftverk\",\n },\n 630: {\n english: \"Power production unit, wind power\",\n swedish: \"Elproduktionsenhet, vindkraftverk\",\n },\n\n 710: { english: \"Communication building\", swedish: \"Kommunikationsbyggnad\" },\n 720: { english: \"Distribution building\", swedish: \"Distributionsbyggnad\" },\n 730: { english: \"Cultural building\", swedish: \"Kulturbyggnad\" },\n\n 810: { english: \"Special unit, undeveloped land\", swedish: \"Specialenhet, obebyggd mark\" },\n 890: { english: \"Other land\", swedish: \"Övrig mark\" },\n};\n\n/**\n * A Swedish property taxation code (`typkod`), e.g. `220` (Småhusenhet, bebyggd).\n * 3-digit numeric code assigned by Skatteverket.\n */\nexport class SwedishPropertyTaxationCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Property Taxation Code\",\n localizedName: \"Typkod\",\n emoji: \"\\u{1F3D7}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.skatteverket.se/privat/fastigheterochbostad/fastighetstaxering.4.69ef368911e1304a625800013531.html\",\n \"https://sv.wikipedia.org/wiki/Typkod_(fastighet)\",\n ]),\n });\n\n /** The 3-digit taxation code, e.g. `220`. */\n readonly code: string;\n /** The numeric form of the code, e.g. `220`. */\n readonly numericCode: number;\n /** The main property category (derived from the first digit). */\n readonly category: SwedishPropertyTaxationCategory;\n /** English description, or `null` when the code is not in the known list. */\n readonly englishDescription: string | null;\n /** Localized (Swedish) description, or `null` when not in the known list. */\n readonly localizedDescription: string | null;\n\n /** `true` when this code has a known description. */\n get isKnown(): boolean {\n return this.englishDescription !== null;\n }\n\n /** Display description in the current display language; falls back to the code. */\n get displayDescription(): string {\n const desc = PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n return desc ?? this.code;\n }\n\n private constructor(\n code: string,\n numericCode: number,\n category: SwedishPropertyTaxationCategory,\n englishDescription: string | null,\n localizedDescription: string | null,\n ) {\n this.code = code;\n this.numericCode = numericCode;\n this.category = category;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n static tryParse(input: string | null | undefined): SwedishPropertyTaxationCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(input);\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length !== 3) return null;\n const numeric = Number(digits);\n if (!Number.isFinite(numeric) || numeric < 100 || numeric > 999) return null;\n\n const firstDigit = Math.floor(numeric / 100);\n const category = CATEGORY_BY_FIRST_DIGIT[firstDigit];\n if (!category || category === SwedishPropertyTaxationCategory.Unknown) return null;\n\n const known = KNOWN_CODES[numeric];\n return new SwedishPropertyTaxationCode(\n digits,\n numeric,\n category,\n known?.english ?? null,\n known?.swedish ?? null,\n );\n }\n\n static parse(input: string): SwedishPropertyTaxationCode {\n const r = SwedishPropertyTaxationCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish property taxation code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPropertyTaxationCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPropertyTaxationCode.tryParse(input);\n if (r) return r.displayDescription;\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 = SwedishPropertyTaxationCode.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 && SwedishPropertyTaxationCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.displayDescription;\n }\n\n equals(other: SwedishPropertyTaxationCode | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: SwedishPropertyTaxationCode | 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","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepAsciiAlphanumericUppercase, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nconst NORMALIZED_PATTERN = /^[A-Z]{2}\\d{2}[A-Z0-9]{1,30}$/;\n\nconst COUNTRY_IBAN_LENGTHS: Readonly<Record<string, number>> = Object.freeze({\n AL: 28,\n AD: 24,\n AT: 20,\n AZ: 28,\n BE: 16,\n BA: 20,\n BG: 22,\n BH: 22,\n BR: 29,\n CH: 21,\n CY: 28,\n CZ: 24,\n DE: 22,\n DK: 18,\n DO: 28,\n EE: 20,\n ES: 24,\n FI: 18,\n FO: 18,\n FR: 27,\n GB: 22,\n GE: 22,\n GI: 23,\n GL: 18,\n GR: 27,\n GT: 28,\n HR: 21,\n HU: 28,\n IE: 22,\n IL: 23,\n IS: 26,\n IT: 27,\n IQ: 23,\n JO: 30,\n KW: 30,\n KZ: 20,\n LB: 28,\n LC: 32,\n LI: 21,\n LT: 20,\n LU: 20,\n LV: 21,\n MC: 27,\n MD: 24,\n ME: 22,\n MK: 19,\n MR: 27,\n MT: 31,\n NL: 18,\n NO: 15,\n PK: 24,\n PL: 28,\n PS: 29,\n PT: 25,\n QA: 29,\n RO: 24,\n RS: 22,\n SA: 24,\n SC: 31,\n SE: 24,\n SI: 19,\n SK: 24,\n SM: 27,\n ST: 25,\n SV: 28,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n VA: 22,\n VG: 24,\n XK: 20,\n});\n\n/**\n * The International Bank Account Number (ISO 13616), e.g. `SE4550000000058398257466`.\n * Validated using MOD-97 check digits.\n */\nexport class Iban {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"IBAN\",\n localizedName: \"IBAN\",\n emoji: \"\\u{1F3E6}\",\n sources: Object.freeze([\n \"https://www.iso.org/standard/81090.html\",\n \"https://www.iban.com/\",\n \"https://en.wikipedia.org/wiki/International_Bank_Account_Number\",\n ]),\n });\n\n static readonly displayName = \"IBAN\";\n static readonly displayNameShort = \"IBAN\";\n\n /** Normalized IBAN without spaces, e.g. `SE4550000000058398257466`. */\n readonly value: string;\n /** ISO 3166-1 alpha-2 country code, e.g. `SE`. */\n readonly countryCode: string;\n /** Display form grouped in blocks of four characters, e.g. `SE45 5000 0000 0583 9825 7466`. */\n readonly formatted: string;\n\n private constructor(value: string, countryCode: string, formatted: string) {\n this.value = value;\n this.countryCode = countryCode;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): Iban | null;\n static tryParse(input: string | null | undefined, countryCode: string): Iban | null;\n static tryParse(input: string | null | undefined, countryCode?: string): Iban | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n if (!isStructurallyValid(normalized)) return null;\n if (!hasValidCheckDigits(normalized)) return null;\n\n const cc = normalized.slice(0, 2);\n if (countryCode !== undefined && cc !== countryCode.toUpperCase()) return null;\n return new Iban(normalized, cc, formatValue(normalized));\n }\n\n static parse(input: string): Iban {\n const r = Iban.tryParse(input);\n if (r === null) throw new Error(\"Invalid IBAN.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Iban.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Iban.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${Iban.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${Iban.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (normalized.length < 15 || normalized.length > 34)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"IBAN must be 15–34 characters.\",\n \"IBAN måste vara 15–34 tecken.\",\n );\n\n if (!NORMALIZED_PATTERN.test(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"IBAN has an invalid format.\",\n \"IBAN har ett ogiltigt format.\",\n );\n\n const cc = normalized.slice(0, 2);\n const expectedLength = COUNTRY_IBAN_LENGTHS[cc];\n if (expectedLength === undefined)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown IBAN country code.\",\n \"Okänd IBAN-landskod.\",\n );\n\n if (normalized.length !== expectedLength)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLengthForCountry,\n \"IBAN length is wrong for the specified country.\",\n \"IBAN-längden stämmer inte för det angivna landet.\",\n );\n\n if (!hasValidCheckDigits(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid IBAN check digits.\",\n \"Ogiltiga IBAN-kontrollsiffror.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Iban>[] {\n if (!text) return [];\n const out: TextCandidate<Iban>[] = [];\n const re = /\\b[A-Z]{2}\\d{2}\\s?[A-Z0-9]{4}[\\sA-Z0-9]{6,30}\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = Iban.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<Iban>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Iban\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskIban(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Iban | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: Iban | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction isStructurallyValid(normalized: string): boolean {\n if (normalized.length < 15 || normalized.length > 34) return false;\n if (!NORMALIZED_PATTERN.test(normalized)) return false;\n const cc = normalized.slice(0, 2);\n const expected = COUNTRY_IBAN_LENGTHS[cc];\n if (expected === undefined) return false;\n if (normalized.length !== expected) return false;\n return true;\n}\n\n/** ISO 7064 MOD-97-10: rotate first 4 chars to end, A=10..Z=35, remainder must be 1. */\nfunction hasValidCheckDigits(normalized: string): boolean {\n let remainder = 0;\n const len = normalized.length;\n for (let i = 4; i < len + 4; i++) {\n const c = normalized.charCodeAt(i % len);\n if (c >= 0x30 && c <= 0x39) {\n remainder = (remainder * 10 + (c - 0x30)) % 97;\n } else {\n const value = c - 0x41 + 10;\n const tens = Math.floor(value / 10);\n const ones = value % 10;\n remainder = (remainder * 10 + tens) % 97;\n remainder = (remainder * 10 + ones) % 97;\n }\n }\n return remainder === 1;\n}\n\nfunction formatValue(normalized: string): string {\n const parts: string[] = [];\n for (let i = 0; i < normalized.length; i += 4) {\n parts.push(normalized.slice(i, i + 4));\n }\n return parts.join(\" \");\n}\n\n/**\n * Returns a masked IBAN preserving the country code and check digits,\n * e.g. `SE45 **** **** **** **** ****`.\n */\nexport function maskIban(iban: Iban): string {\n const formatted = iban.formatted;\n const firstSpace = formatted.indexOf(\" \");\n if (firstSpace < 0) {\n const prefix = formatted.slice(0, Math.min(4, formatted.length));\n return prefix + \"*\".repeat(Math.max(0, formatted.length - 4));\n }\n const prefix = formatted.slice(0, firstSpace);\n const rest = formatted.slice(firstSpace + 1);\n let masked = \"\";\n for (const ch of rest) masked += ch === \" \" ? \" \" : \"*\";\n return `${prefix} ${masked}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst PATTERN =\n /^(?<institution>[A-Z]{4})(?<country>[A-Z]{2})(?<location>[A-Z0-9]{2})(?<branch>[A-Z0-9]{3})?$/;\n\n/**\n * A BIC (Business Identifier Code / SWIFT code) per ISO 9362.\n * 8 or 11 uppercase characters, e.g. `NDEASESS` or `NDEASESSXXX`.\n */\nexport class Bic {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"BIC\",\n localizedName: \"BIC\",\n emoji: \"\\u{1F504}\",\n sources: Object.freeze([\n \"https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/08/41/84108.html\",\n \"https://www.swift.com/standards/data-standards/bic-business-identifier-code\",\n ]),\n });\n\n /** Normalized 8 or 11 uppercase characters, e.g. `NDEASESS`. */\n readonly code: string;\n readonly institutionCode: string;\n readonly countryCode: string;\n readonly locationCode: string;\n readonly branchCode: string | null;\n /** True when the BIC has no branch code (or the branch code is the head office). */\n get isPrimaryOffice(): boolean {\n return this.branchCode === null;\n }\n\n private constructor(\n code: string,\n institutionCode: string,\n countryCode: string,\n locationCode: string,\n branchCode: string | null,\n ) {\n this.code = code;\n this.institutionCode = institutionCode;\n this.countryCode = countryCode;\n this.locationCode = locationCode;\n this.branchCode = branchCode;\n }\n\n static tryParse(input: string | null | undefined): Bic | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = normalizeInternal(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups) return null;\n if (Country.tryParse(match.groups.country!) === null) return null;\n return new Bic(\n normalized,\n match.groups.institution!,\n match.groups.country!,\n match.groups.location!,\n match.groups.branch ?? null,\n );\n }\n\n static parse(input: string): Bic {\n const r = Bic.tryParse(input);\n if (r === null) throw new Error(\"Invalid BIC.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Bic.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Bic.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return Bic.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Bic.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.code;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = normalizeInternal(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"BIC has an invalid format (must be 8 or 11 alphanumeric characters).\",\n \"BIC har ett ogiltigt format (måste vara 8 eller 11 alfanumeriska tecken).\",\n );\n\n if (Country.tryParse(match.groups.country!) === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown BIC country code.\",\n \"Okänd BIC-landskod.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Bic>[] {\n if (!text) return [];\n const out: TextCandidate<Bic>[] = [];\n const re = /\\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const original = m[0];\n if (/[a-z]/.test(original)) continue;\n const r = Bic.tryParse(original);\n if (!r) continue;\n out.push(\n new TextCandidate<Bic>({\n startIndex: m.index,\n length: m[0].length,\n originalText: original,\n typeName: \"Bic\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskBic(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Bic | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: Bic | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nfunction normalizeInternal(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input[i]!;\n if (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \"-\") continue;\n out += c.toUpperCase();\n }\n return out;\n}\n\n/**\n * Returns a masked BIC showing the country code, e.g. `NDEASESS` → `****SE**`.\n */\nexport function maskBic(bic: Bic): string {\n const code = bic.code;\n let out = \"\";\n for (let i = 0; i < code.length; i++) {\n out += i >= 4 && i <= 5 ? code[i] : \"*\";\n }\n return out;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_7_OR_8 = /^\\d{7,8}$/;\n\n/**\n * A Swedish Bankgiro number (`bankgironummer`), e.g. `5805-6201`.\n * 7 or 8 digits with Luhn check digit.\n */\nexport class SwedishBankgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bankgiro Number\",\n localizedName: \"Bankgironummer\",\n emoji: \"\\u{1F4B3}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-number/\",\n \"https://sv.wikipedia.org/wiki/Bankgirot\",\n ]),\n });\n\n static readonly displayName = \"Bankgiro\";\n static readonly displayNameShort = \"BG\";\n\n /** Digit-only value, e.g. `58056201`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `5805-6201`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_7_OR_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const formatted =\n digits.length === 7\n ? `${digits.slice(0, 3)}-${digits.slice(3)}`\n : `${digits.slice(0, 4)}-${digits.slice(4)}`;\n return new SwedishBankgiroNumber(digits, formatted);\n }\n\n static parse(input: string): SwedishBankgiroNumber {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishBankgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishBankgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishBankgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_7_OR_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bankgiro number must be 7 or 8 digits.\",\n \"Bankgironummer måste vara 7 eller 8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{3,4}-\\d{4}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankgiroNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishBankgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/** Returns the Bankgirot search URL for this Bankgiro number. */\nexport function getBankgirotUrl(bg: SwedishBankgiroNumber): string {\n return `https://www.bankgirot.se/sok-bankgironummer/?bgnr=${bg.formatted}`;\n}\n\n/**\n * Returns a masked Bankgiro number, e.g. `****-6201` (default) or `5805-****` when\n * `showLastDigits` is `false`.\n */\nexport function maskSwedishBankgiroNumber(\n bg: SwedishBankgiroNumber,\n options?: { showLastDigits?: boolean },\n): string {\n const showLastDigits = options?.showLastDigits ?? true;\n const formatted = bg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showLastDigits) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_2_TO_8 = /^\\d{2,8}$/;\n\n/**\n * A Swedish Plusgiro number (`plusgironummer`), e.g. `1234567-9`.\n * 2–8 digits with Luhn check digit.\n */\nexport class SwedishPostgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Plusgiro Number\",\n localizedName: \"Plusgironummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/\",\n \"https://sv.wikipedia.org/wiki/Plusgirot\",\n ]),\n });\n\n static readonly displayName = \"Plusgiro\";\n static readonly displayNameShort = \"PG\";\n\n /** Digit-only value, e.g. `41313008`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `4131300-8`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishPostgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_2_TO_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const base = digits.slice(0, digits.length - 1);\n const control = digits.slice(digits.length - 1);\n return new SwedishPostgiroNumber(digits, `${base}-${control}`);\n }\n\n static parse(input: string): SwedishPostgiroNumber {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Plusgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPostgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishPostgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPostgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishPostgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishPostgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_2_TO_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Plusgiro number must be 2–8 digits.\",\n \"Plusgironummer måste vara 2–8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishPostgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPostgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{1,7}-\\d(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishPostgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishPostgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPostgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishPostgiroNumber(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPostgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishPostgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/**\n * Returns a masked Plusgiro number, e.g. `******-9` (default, showing the control digit) or\n * `123456-*` when `showControlDigit` is `false`.\n */\nexport function maskSwedishPostgiroNumber(\n pg: SwedishPostgiroNumber,\n options?: { showControlDigit?: boolean },\n): string {\n const showControlDigit = options?.showControlDigit ?? true;\n const formatted = pg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showControlDigit) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\n/** OCR reference control type. */\nexport const OcrReferenceControlType = {\n CheckDigitOnly: \"CheckDigitOnly\",\n VariableLengthDigit: \"VariableLengthDigit\",\n FixedLength: \"FixedLength\",\n} as const;\nexport type OcrReferenceControlType =\n (typeof OcrReferenceControlType)[keyof typeof OcrReferenceControlType];\n\n/** Options controlling OCR reference parsing. */\nexport class OcrReferenceOptions {\n static readonly Default: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.CheckDigitOnly,\n );\n static readonly VariableLengthDigit: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.VariableLengthDigit,\n );\n\n readonly controlType: OcrReferenceControlType;\n readonly allowedLengths: readonly number[];\n\n constructor(\n controlType: OcrReferenceControlType = OcrReferenceControlType.CheckDigitOnly,\n allowedLengths: readonly number[] = [],\n ) {\n this.controlType = controlType;\n this.allowedLengths = Object.freeze([...allowedLengths]);\n }\n\n static fixedLength(...allowedLengths: number[]): OcrReferenceOptions {\n return new OcrReferenceOptions(OcrReferenceControlType.FixedLength, allowedLengths);\n }\n}\n\n/**\n * A Swedish OCR reference number (`OCR-nummer`), used in payment flows.\n * 2–25 digits with Luhn check digit; optional length-digit and fixed-length variants.\n */\nexport class SwedishOcrReferenceNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"OCR Reference Number\",\n localizedName: \"OCR-referens\",\n emoji: \"\\u{1F4DD}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/ocr-reference-control/\",\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/technical-information/\",\n ]),\n });\n\n static readonly displayName = \"OCR\";\n static readonly displayNameShort = \"OCR\";\n\n readonly value: string;\n readonly formatted: string;\n readonly lengthDigit: number | null;\n\n get length(): number {\n return this.value.length;\n }\n get checkDigit(): number {\n return this.value.charCodeAt(this.value.length - 1) - 0x30;\n }\n\n private constructor(value: string, lengthDigit: number | null) {\n this.value = value;\n this.formatted = value;\n this.lengthDigit = lengthDigit;\n }\n\n static tryParse(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length < 2 || digits.length > 25) return null;\n if (!luhnIsValid(digits)) return null;\n const lengthDigit = validateByOptions(digits, options);\n if (lengthDigit === false) return null;\n return new SwedishOcrReferenceNumber(digits, lengthDigit);\n }\n\n static tryParseVariableLengthDigit(\n input: string | null | undefined,\n ): SwedishOcrReferenceNumber | null {\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.VariableLengthDigit);\n }\n\n static tryParseFixedLength(\n input: string | null | undefined,\n fixedLengths: number | readonly number[],\n ): SwedishOcrReferenceNumber | null {\n const lengths = typeof fixedLengths === \"number\" ? [fixedLengths] : [...fixedLengths];\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.fixedLength(...lengths));\n }\n\n static parse(\n input: string,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber {\n const r = SwedishOcrReferenceNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid OCR reference number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): boolean {\n return SwedishOcrReferenceNumber.tryParse(input, options) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOcrReferenceNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length < 2 || digits.length > 25)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"OCR reference must be 2–25 digits.\",\n \"OCR-referens måste vara 2–25 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOcrReferenceNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOcrReferenceNumber>[] = [];\n const re = /(?<!\\d)\\d{2,25}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOcrReferenceNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishOcrReferenceNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOcrReferenceNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOcrReferenceNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOcrReferenceNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOcrReferenceNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction validateByOptions(digits: string, options: OcrReferenceOptions): number | null | false {\n switch (options.controlType) {\n case OcrReferenceControlType.CheckDigitOnly:\n return null;\n case OcrReferenceControlType.VariableLengthDigit: {\n if (digits.length < 3) return false;\n const expected = digits.length % 10;\n const actual = digits.charCodeAt(digits.length - 2) - 0x30;\n if (actual !== expected) return false;\n return actual;\n }\n case OcrReferenceControlType.FixedLength:\n return options.allowedLengths.length > 0 && options.allowedLengths.includes(digits.length)\n ? null\n : false;\n default:\n return false;\n }\n}\n\n/** Returns a fully masked OCR reference, e.g. `12345678901` → `***********`. */\nexport function maskSwedishOcrReferenceNumber(ocr: SwedishOcrReferenceNumber): string {\n return \"*\".repeat(ocr.value.length);\n}\n","/**\n * Known Swedish banks, identified by clearing number ranges.\n *\n * Equivalent of the .NET `SwedishBank` enum.\n */\nexport const SwedishBank = {\n Unknown: \"Unknown\",\n SverigesRiksbank: \"SverigesRiksbank\",\n Nordea: \"Nordea\",\n NordeaPersonkonto: \"NordeaPersonkonto\",\n NordeaPlusgirot: \"NordeaPlusgirot\",\n DanskeBank: \"DanskeBank\",\n Handelsbanken: \"Handelsbanken\",\n SEB: \"SEB\",\n Swedbank: \"Swedbank\",\n Lansforsakringar: \"Lansforsakringar\",\n IcaBanken: \"IcaBanken\",\n Skandiabanken: \"Skandiabanken\",\n SBABBank: \"SBABBank\",\n AvanzaBank: \"AvanzaBank\",\n AionBank: \"AionBank\",\n BnpParibas: \"BnpParibas\",\n CitibankEurope: \"CitibankEurope\",\n HSBBank: \"HSBBank\",\n CalyonBank: \"CalyonBank\",\n RoyalBankOfScotland: \"RoyalBankOfScotland\",\n DNBSverige: \"DNBSverige\",\n Ekobanken: \"Ekobanken\",\n EnityBankGroup: \"EnityBankGroup\",\n EpBank: \"EpBank\",\n IkanoBank: \"IkanoBank\",\n JAKMedlemsbank: \"JAKMedlemsbank\",\n KlarnaBank: \"KlarnaBank\",\n LandshypotekBank: \"LandshypotekBank\",\n LunarBank: \"LunarBank\",\n LanOchSparBank: \"LanOchSparBank\",\n MarginalenBank: \"MarginalenBank\",\n MultitudeBank: \"MultitudeBank\",\n NobaBankGroup: \"NobaBankGroup\",\n NordnetBank: \"NordnetBank\",\n NorthmillBank: \"NorthmillBank\",\n ResursBank: \"ResursBank\",\n Santander: \"Santander\",\n SparbankenSyd: \"SparbankenSyd\",\n SveaBank: \"SveaBank\",\n Alandsbanken: \"Alandsbanken\",\n VolvofinansBank: \"VolvofinansBank\",\n StadshypotekBank: \"StadshypotekBank\",\n GjensidigeNorSparebank: \"GjensidigeNorSparebank\",\n ParetoOhman: \"ParetoOhman\",\n Forex: \"Forex\",\n ParexBank: \"ParexBank\",\n BriteAb: \"BriteAb\",\n BankingCircle: \"BankingCircle\",\n BankOfChinaLuxembourg: \"BankOfChinaLuxembourg\",\n MedMeraBank: \"MedMeraBank\",\n Folkia: \"Folkia\",\n NetfondsBank: \"NetfondsBank\",\n NasdaqOmx: \"NasdaqOmx\",\n Riksgalden: \"Riksgalden\",\n Privatgirot: \"Privatgirot\",\n Intergiro: \"Intergiro\",\n Nykredit: \"Nykredit\",\n TellerBranchNorway: \"TellerBranchNorway\",\n BankernasAutomatbolag: \"BankernasAutomatbolag\",\n TellerBranchSweden: \"TellerBranchSweden\",\n KortacceptNordic: \"KortacceptNordic\",\n Kommuninvest: \"Kommuninvest\",\n VpSecurities: \"VpSecurities\",\n} as const;\n\nexport type SwedishBank = (typeof SwedishBank)[keyof typeof SwedishBank];\n","import { SwedishBank } from \"./swedish-bank.js\";\n\n/**\n * Resolves a Swedish bank from a 4-digit clearing prefix.\n *\n * Equivalent of the .NET internal `BankResolver`.\n *\n * @internal\n */\n\nfunction inRange(value: number, start: number, end: number): boolean {\n return value >= start && value <= end;\n}\n\nexport function isNordeaPersonkonto(c: number): boolean {\n return c === 3300 || c === 3782;\n}\n\nexport function isSEB(c: number): boolean {\n return inRange(c, 5000, 5999) || inRange(c, 9120, 9124) || inRange(c, 9130, 9149);\n}\n\nexport function isHandelsbanken(c: number): boolean {\n return inRange(c, 6000, 6999);\n}\n\nexport function isNordeaOrdinary(c: number): boolean {\n return (\n inRange(c, 1100, 1199) ||\n inRange(c, 1400, 2099) ||\n (inRange(c, 3000, 3399) && c !== 3300) ||\n (inRange(c, 3410, 3999) && c !== 3782) ||\n inRange(c, 4000, 4999)\n );\n}\n\nexport function isDanskeBankSweden(c: number): boolean {\n return inRange(c, 1200, 1399) || inRange(c, 2400, 2499) || inRange(c, 9180, 9189);\n}\n\nexport function isLansforsakringarBank(c: number): boolean {\n return inRange(c, 3400, 3409) || inRange(c, 9020, 9029) || inRange(c, 9060, 9069);\n}\n\nexport function isIcaBanken(c: number): boolean {\n return inRange(c, 9270, 9279);\n}\nexport function isSkandiabanken(c: number): boolean {\n return inRange(c, 9150, 9169);\n}\nexport function isSBABBank(c: number): boolean {\n return inRange(c, 9250, 9259);\n}\nexport function isSverigesRiksbank(c: number): boolean {\n return inRange(c, 1000, 1099);\n}\nexport function isAvanzaBank(c: number): boolean {\n return inRange(c, 9550, 9569);\n}\nexport function isAionBank(c: number): boolean {\n return inRange(c, 9580, 9589);\n}\nexport function isBnpParibas(c: number): boolean {\n return inRange(c, 9470, 9479);\n}\nexport function isCitibankEurope(c: number): boolean {\n return inRange(c, 9040, 9049);\n}\nexport function isHSBBank(c: number): boolean {\n return inRange(c, 9050, 9059);\n}\nexport function isCalyonBank(c: number): boolean {\n return inRange(c, 9080, 9089);\n}\nexport function isRoyalBankOfScotland(c: number): boolean {\n return inRange(c, 9090, 9099);\n}\nexport function isDNBSweden(c: number): boolean {\n return inRange(c, 9190, 9199);\n}\nexport function isEkobanken(c: number): boolean {\n return inRange(c, 9700, 9709);\n}\nexport function isEnityBankGroup(c: number): boolean {\n return inRange(c, 9680, 9689);\n}\nexport function isEpBank(c: number): boolean {\n return inRange(c, 9590, 9599);\n}\nexport function isIkanoBank(c: number): boolean {\n return inRange(c, 9170, 9179);\n}\nexport function isJAKMedlemsbank(c: number): boolean {\n return inRange(c, 9670, 9679);\n}\nexport function isKlarnaBank(c: number): boolean {\n return inRange(c, 9780, 9789);\n}\nexport function isLandshypotekBank(c: number): boolean {\n return inRange(c, 9390, 9399);\n}\nexport function isLunarBank(c: number): boolean {\n return inRange(c, 9710, 9719);\n}\nexport function isLanOchSparBank(c: number): boolean {\n return inRange(c, 9630, 9639);\n}\nexport function isMarginalenBank(c: number): boolean {\n return inRange(c, 9230, 9239);\n}\nexport function isMultitudeBank(c: number): boolean {\n return inRange(c, 9070, 9079);\n}\nexport function isNobaBankGroup(c: number): boolean {\n return inRange(c, 9640, 9649);\n}\nexport function isNordeaPlusgirot(c: number): boolean {\n return inRange(c, 9500, 9549) || inRange(c, 9960, 9969);\n}\nexport function isNordnetBank(c: number): boolean {\n return inRange(c, 9100, 9109);\n}\nexport function isNorthmillBank(c: number): boolean {\n return inRange(c, 9750, 9759);\n}\nexport function isResursBank(c: number): boolean {\n return inRange(c, 9280, 9289);\n}\nexport function isSantander(c: number): boolean {\n return inRange(c, 9460, 9469);\n}\nexport function isSparbankenSyd(c: number): boolean {\n return inRange(c, 9570, 9579);\n}\nexport function isSwedbank7DigitsAccountNumber(c: number): boolean {\n return inRange(c, 7000, 7999);\n}\nexport function isSwedbank10DigitsAccountNumber(c: number): boolean {\n return inRange(c, 8000, 8999) || inRange(c, 9300, 9349);\n}\nexport function isSveaBank(c: number): boolean {\n return inRange(c, 9660, 9669);\n}\nexport function isAlandsbanken(c: number): boolean {\n return inRange(c, 2300, 2399);\n}\nexport function isVolvofinansBank(c: number): boolean {\n return inRange(c, 9610, 9619);\n}\nexport function isStadshypotekBank(c: number): boolean {\n return inRange(c, 9200, 9209);\n}\nexport function isGjensidigeNorSparebank(c: number): boolean {\n return inRange(c, 9260, 9269);\n}\nexport function isParetoOhman(c: number): boolean {\n return inRange(c, 9380, 9389);\n}\nexport function isForex(c: number): boolean {\n return inRange(c, 9400, 9449);\n}\nexport function isParexBank(c: number): boolean {\n return inRange(c, 9480, 9489);\n}\nexport function isBriteAb(c: number): boolean {\n return inRange(c, 9490, 9499);\n}\nexport function isBankingCircle(c: number): boolean {\n return inRange(c, 9600, 9609);\n}\nexport function isBankOfChinaLuxembourg(c: number): boolean {\n return inRange(c, 9620, 9629);\n}\nexport function isMedMeraBank(c: number): boolean {\n return inRange(c, 9650, 9659);\n}\nexport function isFolkia(c: number): boolean {\n return inRange(c, 9690, 9699);\n}\nexport function isNetfondsBank(c: number): boolean {\n return inRange(c, 9720, 9729);\n}\nexport function isNasdaqOmx(c: number): boolean {\n return inRange(c, 9870, 9879);\n}\nexport function isRiksgalden(c: number): boolean {\n return inRange(c, 9880, 9889);\n}\nexport function isPrivatgirot(c: number): boolean {\n return inRange(c, 9860, 9869);\n}\nexport function isIntergiro(c: number): boolean {\n return inRange(c, 9770, 9779);\n}\nexport function isNykredit(c: number): boolean {\n return c === 9950;\n}\nexport function isTellerBranchNorway(c: number): boolean {\n return c === 9951;\n}\nexport function isBankernasAutomatbolag(c: number): boolean {\n return c === 9952;\n}\nexport function isTellerBranchSweden(c: number): boolean {\n return c === 9953;\n}\nexport function isKortacceptNordic(c: number): boolean {\n return c === 9954;\n}\nexport function isKommuninvest(c: number): boolean {\n return c === 9955;\n}\nexport function isVpSecurities(c: number): boolean {\n return c === 9956;\n}\n\nexport interface BankResolution {\n bank: SwedishBank | null;\n bankName: string | null;\n}\n\nexport function resolveBank(clearing4: number): BankResolution {\n if (isNordeaPersonkonto(clearing4))\n return { bank: SwedishBank.NordeaPersonkonto, bankName: \"Nordea Personkonto\" };\n if (isSverigesRiksbank(clearing4))\n return { bank: SwedishBank.SverigesRiksbank, bankName: \"Sveriges riksbank\" };\n if (isAvanzaBank(clearing4)) return { bank: SwedishBank.AvanzaBank, bankName: \"Avanza Bank\" };\n if (isAionBank(clearing4)) return { bank: SwedishBank.AionBank, bankName: \"AION Bank\" };\n if (isBnpParibas(clearing4))\n return { bank: SwedishBank.BnpParibas, bankName: \"BNP Paribas S.A. Bankfilial Sverige\" };\n if (isCitibankEurope(clearing4))\n return { bank: SwedishBank.CitibankEurope, bankName: \"Citibank Europe plc\" };\n if (isHSBBank(clearing4)) return { bank: SwedishBank.HSBBank, bankName: \"HSB Bank\" };\n if (isCalyonBank(clearing4)) return { bank: SwedishBank.CalyonBank, bankName: \"Calyon Bank\" };\n if (isRoyalBankOfScotland(clearing4))\n return { bank: SwedishBank.RoyalBankOfScotland, bankName: \"Royal Bank of Scotland\" };\n if (isDanskeBankSweden(clearing4))\n return { bank: SwedishBank.DanskeBank, bankName: \"Danske Bank\" };\n if (isDNBSweden(clearing4)) return { bank: SwedishBank.DNBSverige, bankName: \"DNB Sverige\" };\n if (isEkobanken(clearing4)) return { bank: SwedishBank.Ekobanken, bankName: \"Ekobanken\" };\n if (isEnityBankGroup(clearing4))\n return { bank: SwedishBank.EnityBankGroup, bankName: \"Enity Bank Group\" };\n if (isEpBank(clearing4)) return { bank: SwedishBank.EpBank, bankName: \"EP Bank\" };\n if (isHandelsbanken(clearing4))\n return { bank: SwedishBank.Handelsbanken, bankName: \"Handelsbanken\" };\n if (isIcaBanken(clearing4)) return { bank: SwedishBank.IcaBanken, bankName: \"ICA Banken\" };\n if (isIkanoBank(clearing4)) return { bank: SwedishBank.IkanoBank, bankName: \"Ikano Bank\" };\n if (isJAKMedlemsbank(clearing4))\n return { bank: SwedishBank.JAKMedlemsbank, bankName: \"JAK Medlemsbank\" };\n if (isKlarnaBank(clearing4)) return { bank: SwedishBank.KlarnaBank, bankName: \"Klarna Bank\" };\n if (isLandshypotekBank(clearing4))\n return { bank: SwedishBank.LandshypotekBank, bankName: \"Landshypotek Bank\" };\n if (isLunarBank(clearing4)) return { bank: SwedishBank.LunarBank, bankName: \"Lunar Bank\" };\n if (isLansforsakringarBank(clearing4))\n return { bank: SwedishBank.Lansforsakringar, bankName: \"Länsförsäkringar Bank\" };\n if (isLanOchSparBank(clearing4))\n return { bank: SwedishBank.LanOchSparBank, bankName: \"Lån & Spar Bank\" };\n if (isMarginalenBank(clearing4))\n return { bank: SwedishBank.MarginalenBank, bankName: \"Marginalen Bank\" };\n if (isMultitudeBank(clearing4))\n return { bank: SwedishBank.MultitudeBank, bankName: \"Multitude Bank\" };\n if (isNobaBankGroup(clearing4))\n return { bank: SwedishBank.NobaBankGroup, bankName: \"Noba Bank Group\" };\n if (isNordeaPlusgirot(clearing4))\n return { bank: SwedishBank.NordeaPlusgirot, bankName: \"Nordea (Plusgirot)\" };\n if (isNordeaOrdinary(clearing4)) return { bank: SwedishBank.Nordea, bankName: \"Nordea\" };\n if (isNordnetBank(clearing4)) return { bank: SwedishBank.NordnetBank, bankName: \"Nordnet Bank\" };\n if (isNorthmillBank(clearing4))\n return { bank: SwedishBank.NorthmillBank, bankName: \"Northmill Bank\" };\n if (isResursBank(clearing4)) return { bank: SwedishBank.ResursBank, bankName: \"Resurs Bank\" };\n if (isSantander(clearing4)) return { bank: SwedishBank.Santander, bankName: \"Santander\" };\n if (isSBABBank(clearing4)) return { bank: SwedishBank.SBABBank, bankName: \"SBAB Bank\" };\n if (isSEB(clearing4)) return { bank: SwedishBank.SEB, bankName: \"SEB\" };\n if (isSkandiabanken(clearing4))\n return { bank: SwedishBank.Skandiabanken, bankName: \"Skandiabanken\" };\n if (isSparbankenSyd(clearing4))\n return { bank: SwedishBank.SparbankenSyd, bankName: \"Sparbanken Syd\" };\n if (isSwedbank7DigitsAccountNumber(clearing4) || isSwedbank10DigitsAccountNumber(clearing4))\n return { bank: SwedishBank.Swedbank, bankName: \"Swedbank\" };\n if (isSveaBank(clearing4)) return { bank: SwedishBank.SveaBank, bankName: \"Svea Bank\" };\n if (isAlandsbanken(clearing4))\n return { bank: SwedishBank.Alandsbanken, bankName: \"Ålandsbanken Abp (Finland) svensk filial\" };\n if (isVolvofinansBank(clearing4))\n return { bank: SwedishBank.VolvofinansBank, bankName: \"Volvofinans Bank\" };\n if (isStadshypotekBank(clearing4))\n return { bank: SwedishBank.StadshypotekBank, bankName: \"Stadshypotek Bank\" };\n if (isGjensidigeNorSparebank(clearing4))\n return { bank: SwedishBank.GjensidigeNorSparebank, bankName: \"Gjensidige NOR Sparebank\" };\n if (isParetoOhman(clearing4)) return { bank: SwedishBank.ParetoOhman, bankName: \"Pareto Öhman\" };\n if (isForex(clearing4)) return { bank: SwedishBank.Forex, bankName: \"Forex\" };\n if (isParexBank(clearing4)) return { bank: SwedishBank.ParexBank, bankName: \"Parex Bank\" };\n if (isBriteAb(clearing4)) return { bank: SwedishBank.BriteAb, bankName: \"Brite AB\" };\n if (isBankingCircle(clearing4))\n return { bank: SwedishBank.BankingCircle, bankName: \"Banking Circle\" };\n if (isBankOfChinaLuxembourg(clearing4))\n return { bank: SwedishBank.BankOfChinaLuxembourg, bankName: \"Bank of China (Luxembourg)\" };\n if (isMedMeraBank(clearing4)) return { bank: SwedishBank.MedMeraBank, bankName: \"MedMera Bank\" };\n if (isFolkia(clearing4)) return { bank: SwedishBank.Folkia, bankName: \"Folkia\" };\n if (isNetfondsBank(clearing4))\n return { bank: SwedishBank.NetfondsBank, bankName: \"Netfonds Bank\" };\n if (isNasdaqOmx(clearing4)) return { bank: SwedishBank.NasdaqOmx, bankName: \"Nasdaq-OMX\" };\n if (isRiksgalden(clearing4)) return { bank: SwedishBank.Riksgalden, bankName: \"Riksgälden\" };\n if (isPrivatgirot(clearing4)) return { bank: SwedishBank.Privatgirot, bankName: \"Privatgirot\" };\n if (isIntergiro(clearing4)) return { bank: SwedishBank.Intergiro, bankName: \"Intergiro\" };\n if (isNykredit(clearing4)) return { bank: SwedishBank.Nykredit, bankName: \"Nykredit\" };\n if (isTellerBranchNorway(clearing4))\n return { bank: SwedishBank.TellerBranchNorway, bankName: \"Teller Branch Norway\" };\n if (isBankernasAutomatbolag(clearing4))\n return { bank: SwedishBank.BankernasAutomatbolag, bankName: \"Bankernas Automatbolag\" };\n if (isTellerBranchSweden(clearing4))\n return { bank: SwedishBank.TellerBranchSweden, bankName: \"Teller Branch Sweden\" };\n if (isKortacceptNordic(clearing4))\n return { bank: SwedishBank.KortacceptNordic, bankName: \"Kortaccept Nordic\" };\n if (isKommuninvest(clearing4))\n return { bank: SwedishBank.Kommuninvest, bankName: \"Kommuninvest\" };\n if (isVpSecurities(clearing4))\n return { bank: SwedishBank.VpSecurities, bankName: \"VP Securities\" };\n\n return { bank: null, bankName: null };\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { resolveBank } from \"./bank-resolver.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/**\n * A Swedish clearing number (`clearingnummer`), 4 digits (or 5 starting with `8` for Swedbank).\n */\nexport class SwedishBankClearingNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Clearing Number\",\n localizedName: \"Clearingnummer\",\n emoji: \"\\u{1F511}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n readonly digits: string;\n readonly bank: SwedishBank;\n readonly bankName: string;\n\n private constructor(digits: string, bank: SwedishBank, bankName: string) {\n this.digits = digits;\n this.bank = bank;\n this.bankName = bankName;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankClearingNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length < 4 || digits.length > 5) return null;\n\n if (digits.length === 5 && digits[0] !== \"8\") return null;\n if (digits.length === 4 && digits[0] === \"8\") return null;\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null) return null;\n\n return new SwedishBankClearingNumber(digits, bank, bankName);\n }\n\n static parse(input: string): SwedishBankClearingNumber {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid clearing number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankClearingNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankClearingNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toString(): string {\n return this.digits.length === 5 ? `${this.digits.slice(0, 4)}-${this.digits[4]}` : this.digits;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (digits.length < 4 || digits.length > 5)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Clearing number must be 4 or 5 digits.\",\n \"Clearingnummer måste vara 4 eller 5 siffror.\",\n );\n\n if (digits.length === 5 && digits[0] !== \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"A 5-digit clearing number must start with 8 (Swedbank).\",\n \"Ett 5-siffrigt clearingnummer måste börja med 8 (Swedbank).\",\n );\n\n if (digits.length === 4 && digits[0] === \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"Clearing numbers starting with 8 must be 5 digits (Swedbank).\",\n \"Clearingnummer som börjar med 8 måste vara 5 siffror (Swedbank).\",\n );\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownClearingRange,\n \"Clearing number does not match any known bank.\",\n \"Clearingnumret matchar ingen känd bank.\",\n );\n\n return validResult(input);\n }\n\n equals(other: SwedishBankClearingNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: SwedishBankClearingNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/** Returns a masked clearing number showing the bank identifier (first digit), e.g. `5001` → `5***`. */\nexport function maskSwedishBankClearingNumber(c: SwedishBankClearingNumber): string {\n const digits = c.digits;\n return digits.length <= 1 ? \"*\".repeat(digits.length) : digits[0] + \"*\".repeat(digits.length - 1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\nimport { SwedishBankClearingNumber } from \"./swedish-bank-clearing-number.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport {\n isHandelsbanken,\n isNordeaPersonkonto,\n isNordeaPlusgirot,\n isRiksgalden,\n isSparbankenSyd,\n isSwedbank10DigitsAccountNumber,\n resolveBank,\n} from \"./bank-resolver.js\";\n\nconst MAX_INPUT_LENGTH = 40;\nconst DIGITS_11_TO_15 = /^\\d{11,15}$/;\n\n/**\n * A Swedish bank account, identified by clearing number + account number with\n * bank-specific length rules.\n */\nexport class SwedishBankAccount {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Account\",\n localizedName: \"Bankkonto\",\n emoji: \"\\u{1F3E7}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n static readonly displayName = \"Bankkonto\";\n\n readonly clearing: SwedishBankClearingNumber;\n readonly accountNumber: string;\n readonly formatted: string;\n\n get clearingNumber(): string {\n return this.clearing.digits;\n }\n get bankName(): string | null {\n return this.clearing.bankName;\n }\n get bank(): SwedishBank | null {\n return this.clearing.bank;\n }\n\n private constructor(\n clearing: SwedishBankClearingNumber,\n accountNumber: string,\n formatted: string,\n ) {\n this.clearing = clearing;\n this.accountNumber = accountNumber;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankAccount | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_11_TO_15.test(digits)) return null;\n if (!isValidLength(digits)) return null;\n\n const { clearingDigits, account } = splitClearingAndAccount(digits);\n const clearing = SwedishBankClearingNumber.tryParse(clearingDigits);\n if (clearing === null) return null;\n\n return new SwedishBankAccount(clearing, account, `${clearingDigits}-${account}`);\n }\n\n static parse(input: string): SwedishBankAccount {\n const r = SwedishBankAccount.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankkonto number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankAccount.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.clearingNumber + r.accountNumber;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankAccount.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.clearingNumber + this.accountNumber;\n }\n\n toDisplayString(): string {\n return `${SwedishBankAccount.displayName} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_11_TO_15.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bank account must be 11–15 digits.\",\n \"Bankkonto måste vara 11–15 siffror.\",\n );\n\n if (!isValidLength(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidAccountLengthForBank,\n \"Account length is wrong for the identified bank.\",\n \"Kontolängden stämmer inte för den identifierade banken.\",\n );\n\n const { clearingDigits } = splitClearingAndAccount(digits);\n if (SwedishBankClearingNumber.tryParse(clearingDigits) === null)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidClearingNumber,\n \"The clearing number part is invalid.\",\n \"Clearingnummerdelen är ogiltig.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankAccount>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankAccount>[] = [];\n const re = /(?<!\\d)\\d{4,5}[\\s-]?\\d{5,10}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankAccount.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankAccount>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankAccount\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankAccount(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankAccount | null | undefined): boolean {\n return (\n other != null &&\n this.clearingNumber === other.clearingNumber &&\n this.accountNumber === other.accountNumber\n );\n }\n compareTo(other: SwedishBankAccount | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction isValidLength(digits: string): boolean {\n const length = digits.length;\n const c4 = parseInt4(digits);\n\n if (isHandelsbanken(c4)) return length >= 12 && length <= 13;\n if (isNordeaPersonkonto(c4)) return length === 14;\n if (isNordeaPlusgirot(c4)) return length === 14;\n if (isSparbankenSyd(c4)) return length === 14;\n if (isRiksgalden(c4)) return length === 14;\n if (isSwedbank10DigitsAccountNumber(c4)) return length >= 7 && length <= 15;\n\n const { bank } = resolveBank(c4);\n return bank !== null && length === 11;\n}\n\nfunction splitClearingAndAccount(digits: string): { clearingDigits: string; account: string } {\n if (digits[0] === \"8\") {\n return { clearingDigits: digits.slice(0, 5), account: digits.slice(5) };\n }\n return { clearingDigits: digits.slice(0, 4), account: digits.slice(4) };\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/**\n * Returns a masked bank account showing the clearing number, e.g. `5100-*******`.\n * Pass `maskClearingNumber: true` to also mask the clearing number.\n */\nexport function maskSwedishBankAccount(\n account: SwedishBankAccount,\n options?: { maskClearingNumber?: boolean },\n): string {\n const maskClearing = options?.maskClearingNumber ?? false;\n const clearing = maskClearing\n ? \"*\".repeat(account.clearingNumber.length)\n : account.clearingNumber;\n return `${clearing}-${\"*\".repeat(account.accountNumber.length)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { 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\";\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 { PhoneNumber } from \"../contact/index.js\";\nimport { GeoCoordinate, Language, SwedishCounty, SwedishMunicipality } from \"../geography/index.js\";\nimport {\n DunsNumber,\n ElfCode,\n EuVatNumber,\n LeiCode,\n SwedishOrganizationNumber,\n SwedishSniCode,\n} from \"../organization/index.js\";\nimport { EmailAddress, Url } from \"../web/index.js\";\nimport { Currency, Isin, MoneyAmount } from \"../finance/index.js\";\nimport { SwedishPropertyDesignation, SwedishPropertyTaxationCode } from \"../property/index.js\";\nimport {\n Bic,\n Iban,\n SwedishBankAccount,\n SwedishBankAccountHolderName,\n SwedishBankClearingNumber,\n SwedishBankgiroNumber,\n SwedishOcrReferenceNumber,\n SwedishPostgiroNumber,\n SwedishSwishNumber,\n} from \"../banking/index.js\";\n\nconst PhoneNumberSamples = Object.freeze({\n systembolaget: PhoneNumber.parse(\"+46850330000\"),\n sj: PhoneNumber.parse(\"+46107516000\"),\n vattenfall: PhoneNumber.parse(\"+4687396000\"),\n samhall: PhoneNumber.parse(\"+4620572572\"),\n stockholmsKommun: PhoneNumber.parse(\"+46850829000\"),\n svenskaKyrkan: PhoneNumber.parse(\"+4618169500\"),\n folksam: PhoneNumber.parse(\"+46771950950\"),\n kooperativaForbundet: PhoneNumber.parse(\"+46107400000\"),\n swedishMobileTest: PhoneNumber.parse(\"+46701740605\"),\n swedishFixedTest: PhoneNumber.parse(\"+4681234567\"),\n});\n\nconst SwedishCountySamples = Object.freeze({\n stockholm: SwedishCounty.parse(\"01\"),\n uppsala: SwedishCounty.parse(\"03\"),\n vastraGotaland: SwedishCounty.parse(\"14\"),\n skane: SwedishCounty.parse(\"12\"),\n norrbotten: SwedishCounty.parse(\"25\"),\n});\n\nconst SwedishMunicipalitySamples = Object.freeze({\n stockholm: SwedishMunicipality.parse(\"Stockholm\"),\n solna: SwedishMunicipality.parse(\"Solna\"),\n uppsala: SwedishMunicipality.parse(\"Uppsala\"),\n lulea: SwedishMunicipality.parse(\"Luleå\"),\n goteborg: SwedishMunicipality.parse(\"Göteborg\"),\n malmo: SwedishMunicipality.parse(\"Malmö\"),\n});\n\nconst LanguageSamples = Object.freeze({\n swedish: Language.parse(\"sv\"),\n english: Language.parse(\"en\"),\n german: Language.parse(\"de\"),\n french: Language.parse(\"fr\"),\n spanish: Language.parse(\"es\"),\n arabic: Language.parse(\"ar\"),\n finnish: Language.parse(\"fi\"),\n norwegian: Language.parse(\"no\"),\n danish: Language.parse(\"da\"),\n});\n\nconst GeoCoordinateSamples = Object.freeze({\n stockholm: GeoCoordinate.parse(\"59.3293, 18.0686\"),\n gothenburg: GeoCoordinate.parse(\"57.7089, 11.9746\"),\n malmo: GeoCoordinate.parse(\"55.6050, 13.0038\"),\n lulea: GeoCoordinate.parse(\"65.5848, 22.1547\"),\n nullIsland: GeoCoordinate.parse(\"0, 0\"),\n});\n\nconst OrganizationNumberSamples = Object.freeze({\n budiAB: SwedishOrganizationNumber.parse(\"559246-0421\"),\n systembolaget: SwedishOrganizationNumber.parse(\"556059-9473\"),\n sj: SwedishOrganizationNumber.parse(\"556196-1599\"),\n postNord: SwedishOrganizationNumber.parse(\"556711-5695\"),\n vattenfall: SwedishOrganizationNumber.parse(\"556036-2138\"),\n samhall: SwedishOrganizationNumber.parse(\"556448-1397\"),\n lkab: SwedishOrganizationNumber.parse(\"556001-5835\"),\n svt: SwedishOrganizationNumber.parse(\"556033-4285\"),\n sverigesRadio: SwedishOrganizationNumber.parse(\"556419-3232\"),\n telia: SwedishOrganizationNumber.parse(\"556430-0142\"),\n stockholmsKommun: SwedishOrganizationNumber.parse(\"212000-0142\"),\n skr: SwedishOrganizationNumber.parse(\"222000-0315\"),\n svenskaKyrkan: SwedishOrganizationNumber.parse(\"252002-6135\"),\n folksam: SwedishOrganizationNumber.parse(\"502006-1619\"),\n lantmannen: SwedishOrganizationNumber.parse(\"769605-2856\"),\n kooperativaForbundet: SwedishOrganizationNumber.parse(\"702001-1693\"),\n skatteverket: SwedishOrganizationNumber.parse(\"202100-5448\"),\n forsakringskassan: SwedishOrganizationNumber.parse(\"202100-5521\"),\n arbetsformedlingen: SwedishOrganizationNumber.parse(\"202100-2114\"),\n bolagsverket: SwedishOrganizationNumber.parse(\"202100-5000\"),\n trafikverket: SwedishOrganizationNumber.parse(\"202100-6297\"),\n lantmateriet: SwedishOrganizationNumber.parse(\"202100-4888\"),\n kronofogden: SwedishOrganizationNumber.parse(\"202100-2809\"),\n transportstyrelsen: SwedishOrganizationNumber.parse(\"202100-6099\"),\n migrationsverket: SwedishOrganizationNumber.parse(\"202100-2163\"),\n tullverket: SwedishOrganizationNumber.parse(\"202100-0969\"),\n});\n\nconst EuVatNumberSamples = Object.freeze({\n budiAB: EuVatNumber.parse(\"SE559246042101\"),\n systembolaget: EuVatNumber.parse(\"SE556059947301\"),\n sj: EuVatNumber.parse(\"SE556196159901\"),\n postNord: EuVatNumber.parse(\"SE556711569501\"),\n vattenfall: EuVatNumber.parse(\"SE556036213801\"),\n samhall: EuVatNumber.parse(\"SE556448139701\"),\n lkab: EuVatNumber.parse(\"SE556001583501\"),\n svt: EuVatNumber.parse(\"SE556033428501\"),\n sverigesRadio: EuVatNumber.parse(\"SE556419323201\"),\n telia: EuVatNumber.parse(\"SE556430014201\"),\n});\n\nconst LeiCodeSamples = Object.freeze({\n vattenfall: LeiCode.parse(\"549300T5RZ1HA5HZ3109\"),\n lkab: LeiCode.parse(\"549300ONBUTV20237K19\"),\n folksam: LeiCode.parse(\"5493003384H0SVUD4J19\"),\n});\n\nconst DunsNumberSamples = Object.freeze({\n budiAB: DunsNumber.parse(\"350827673\"),\n});\n\nconst ElfCodeSamples = Object.freeze({\n aktiebolag: ElfCode.parse(\"XTIQ\"),\n handelsbolag: ElfCode.parse(\"N2GY\"),\n enskildFirma: ElfCode.parse(\"WJEL\"),\n stiftelse: ElfCode.parse(\"CLBQ\"),\n});\n\nconst SwedishSniCodeSamples = Object.freeze({\n budiAB: SwedishSniCode.parse(\"47917\"),\n systembolaget: SwedishSniCode.parse(\"47250\"),\n sj: SwedishSniCode.parse(\"49100\"),\n postNord: SwedishSniCode.parse(\"53100\"),\n vattenfall: SwedishSniCode.parse(\"35120\"),\n samhall: SwedishSniCode.parse(\"81210\"),\n lkab: SwedishSniCode.parse(\"07100\"),\n telia: SwedishSniCode.parse(\"61100\"),\n skr: SwedishSniCode.parse(\"94112\"),\n svenskaKyrkan: SwedishSniCode.parse(\"94910\"),\n folksam: SwedishSniCode.parse(\"65120\"),\n lantmannen: SwedishSniCode.parse(\"46210\"),\n kooperativaForbundet: SwedishSniCode.parse(\"70100\"),\n});\n\nexport const ContactSampleData = Object.freeze({\n PhoneNumber: Object.freeze({\n ...PhoneNumberSamples,\n all: Object.freeze(Object.values(PhoneNumberSamples)),\n }),\n});\n\nexport const GeographySampleData = Object.freeze({\n SwedishCounty: Object.freeze({\n ...SwedishCountySamples,\n all: Object.freeze(Object.values(SwedishCountySamples)),\n }),\n SwedishMunicipality: Object.freeze({\n ...SwedishMunicipalitySamples,\n all: Object.freeze(Object.values(SwedishMunicipalitySamples)),\n }),\n Language: Object.freeze({\n ...LanguageSamples,\n all: Object.freeze(Object.values(LanguageSamples)),\n }),\n GeoCoordinate: Object.freeze({\n ...GeoCoordinateSamples,\n all: Object.freeze(Object.values(GeoCoordinateSamples)),\n }),\n});\n\nconst EmailAddressSamples = Object.freeze({\n samhall: EmailAddress.parse(\"kontakt@samhall.se\"),\n lkab: EmailAddress.parse(\"redovisning@lkab.com\"),\n example: EmailAddress.parse(\"user@example.com\"),\n exampleOrg: EmailAddress.parse(\"info@example.org\"),\n});\n\nconst UrlSamples = Object.freeze({\n samhall: Url.parse(\"https://samhall.se\"),\n lkab: Url.parse(\"https://lkab.com\"),\n example: Url.parse(\"https://example.com\"),\n exampleOrg: Url.parse(\"https://example.org\"),\n});\n\nexport const WebSampleData = Object.freeze({\n EmailAddress: Object.freeze({\n ...EmailAddressSamples,\n all: Object.freeze(Object.values(EmailAddressSamples)),\n }),\n Url: Object.freeze({\n ...UrlSamples,\n all: Object.freeze(Object.values(UrlSamples)),\n }),\n});\n\nconst CurrencySamples = Object.freeze({\n sek: Currency.SEK,\n eur: Currency.EUR,\n usd: Currency.USD,\n nok: Currency.NOK,\n dkk: Currency.DKK,\n gbp: Currency.GBP,\n});\n\nconst IsinSamples = Object.freeze({\n ericsson: Isin.parse(\"SE0000108656\"),\n telia: Isin.parse(\"SE0000667891\"),\n apple: Isin.parse(\"US0378331005\"),\n});\n\nconst MoneyAmountSamples = Object.freeze({\n oneThousandSek: MoneyAmount.create(1000, Currency.SEK),\n hundredEur: MoneyAmount.create(100, Currency.EUR),\n fiveHundredUsd: MoneyAmount.create(500, Currency.USD),\n});\n\nexport const FinanceSampleData = Object.freeze({\n Currency: Object.freeze({\n ...CurrencySamples,\n all: Object.freeze(Object.values(CurrencySamples)),\n }),\n Isin: Object.freeze({\n ...IsinSamples,\n all: Object.freeze(Object.values(IsinSamples)),\n }),\n MoneyAmount: Object.freeze({\n ...MoneyAmountSamples,\n all: Object.freeze(Object.values(MoneyAmountSamples)),\n }),\n});\n\nconst SwedishPropertyDesignationSamples = Object.freeze({\n uppsalaDomkyrka: SwedishPropertyDesignation.parse(\"Uppsala Fjärdingen 22:1\"),\n genericUrban: SwedishPropertyDesignation.parse(\"Stockholm Norrmalm 3:12\"),\n genericRural: SwedishPropertyDesignation.parse(\"Gävle Olsbacka 11:1\"),\n});\n\nconst SwedishPropertyTaxationCodeSamples = Object.freeze({\n smahusBebyggd: SwedishPropertyTaxationCode.parse(\"220\"),\n hyreshusBostad: SwedishPropertyTaxationCode.parse(\"320\"),\n industriBebyggd: SwedishPropertyTaxationCode.parse(\"420\"),\n});\n\nexport const PropertySampleData = Object.freeze({\n SwedishPropertyDesignation: Object.freeze({\n ...SwedishPropertyDesignationSamples,\n all: Object.freeze(Object.values(SwedishPropertyDesignationSamples)),\n }),\n SwedishPropertyTaxationCode: Object.freeze({\n ...SwedishPropertyTaxationCodeSamples,\n all: Object.freeze(Object.values(SwedishPropertyTaxationCodeSamples)),\n }),\n});\n\nconst IbanSamples = Object.freeze({\n vattenfall: Iban.parse(\"SE7495000099604203849767\"),\n swedishGeneric: Iban.parse(\"SE4550000000058398257466\"),\n germanGeneric: Iban.parse(\"DE89370400440532013000\"),\n britishGeneric: Iban.parse(\"GB29NWBK60161331926819\"),\n});\n\nconst BicSamples = Object.freeze({\n nordea: Bic.parse(\"NDEASESS\"),\n seb: Bic.parse(\"ESSESESS\"),\n swedbank: Bic.parse(\"SWEDSESS\"),\n handelsbanken: Bic.parse(\"HANDSESS\"),\n});\n\nconst SwedishBankgiroNumberSamples = Object.freeze({\n budiAB: SwedishBankgiroNumber.parse(\"235-9321\"),\n vattenfall: SwedishBankgiroNumber.parse(\"5110-8348\"),\n telia: SwedishBankgiroNumber.parse(\"5117-7913\"),\n svenskaKyrkan: SwedishBankgiroNumber.parse(\"900-1223\"),\n});\n\nconst SwedishPostgiroNumberSamples = Object.freeze({\n vattenfall: SwedishPostgiroNumber.parse(\"4131300-8\"),\n svenskaKyrkan: SwedishPostgiroNumber.parse(\"900122-3\"),\n});\n\nconst SwedishOcrReferenceNumberSamples = Object.freeze({\n generic: SwedishOcrReferenceNumber.parse(\"12345674\"),\n short: SwedishOcrReferenceNumber.parse(\"18\"),\n});\n\nconst SwedishBankClearingNumberSamples = Object.freeze({\n seb: SwedishBankClearingNumber.parse(\"5001\"),\n handelsbanken: SwedishBankClearingNumber.parse(\"6789\"),\n swedbank: SwedishBankClearingNumber.parse(\"81234\"),\n nordeaPersonkonto: SwedishBankClearingNumber.parse(\"3300\"),\n});\n\nconst SwedishBankAccountSamples = Object.freeze({\n seb: SwedishBankAccount.parse(\"50011234567\"),\n swedbank: SwedishBankAccount.parse(\"81234123456\"),\n nordeaPersonkonto: SwedishBankAccount.parse(\"33001234567890\"),\n});\n\nconst SwedishBankAccountHolderNameSamples = Object.freeze({\n person: SwedishBankAccountHolderName.parse(\"Anna Andersson\"),\n organization: SwedishBankAccountHolderName.parse(\"VOLVO AB\"),\n});\n\nconst SwedishSwishNumberSamples = Object.freeze({\n rodaKorset: SwedishSwishNumber.parse(\"1236652895\"),\n raddaBarnen: SwedishSwishNumber.parse(\"9020033\"),\n});\n\nexport const BankingSampleData = Object.freeze({\n Iban: Object.freeze({\n ...IbanSamples,\n all: Object.freeze(Object.values(IbanSamples)),\n }),\n Bic: Object.freeze({\n ...BicSamples,\n all: Object.freeze(Object.values(BicSamples)),\n }),\n SwedishBankgiroNumber: Object.freeze({\n ...SwedishBankgiroNumberSamples,\n all: Object.freeze(Object.values(SwedishBankgiroNumberSamples)),\n }),\n SwedishPostgiroNumber: Object.freeze({\n ...SwedishPostgiroNumberSamples,\n all: Object.freeze(Object.values(SwedishPostgiroNumberSamples)),\n }),\n SwedishOcrReferenceNumber: Object.freeze({\n ...SwedishOcrReferenceNumberSamples,\n all: Object.freeze(Object.values(SwedishOcrReferenceNumberSamples)),\n }),\n SwedishBankClearingNumber: Object.freeze({\n ...SwedishBankClearingNumberSamples,\n all: Object.freeze(Object.values(SwedishBankClearingNumberSamples)),\n }),\n SwedishBankAccount: Object.freeze({\n ...SwedishBankAccountSamples,\n all: Object.freeze(Object.values(SwedishBankAccountSamples)),\n }),\n SwedishBankAccountHolderName: Object.freeze({\n ...SwedishBankAccountHolderNameSamples,\n all: Object.freeze(Object.values(SwedishBankAccountHolderNameSamples)),\n }),\n SwedishSwishNumber: Object.freeze({\n ...SwedishSwishNumberSamples,\n all: Object.freeze(Object.values(SwedishSwishNumberSamples)),\n }),\n});\n\nexport const OrganizationSampleData = Object.freeze({\n OrganizationNumber: Object.freeze({\n ...OrganizationNumberSamples,\n all: Object.freeze(Object.values(OrganizationNumberSamples)),\n }),\n EuVatNumber: Object.freeze({\n ...EuVatNumberSamples,\n all: Object.freeze(Object.values(EuVatNumberSamples)),\n }),\n LeiCode: Object.freeze({\n ...LeiCodeSamples,\n all: Object.freeze(Object.values(LeiCodeSamples)),\n }),\n DunsNumber: Object.freeze({\n ...DunsNumberSamples,\n all: Object.freeze(Object.values(DunsNumberSamples)),\n }),\n ElfCode: Object.freeze({\n ...ElfCodeSamples,\n all: Object.freeze(Object.values(ElfCodeSamples)),\n }),\n SwedishSniCode: Object.freeze({\n ...SwedishSniCodeSamples,\n all: Object.freeze(Object.values(SwedishSniCodeSamples)),\n }),\n});\n"]}
|