@budiauktioner/buildi-primitives 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BREAKING_CHANGES.md +81 -0
- package/CHANGELOG.md +72 -1
- package/PARITY.md +202 -0
- package/README.md +58 -9
- package/dist/cjs/banking/bank-resolver.js +378 -0
- package/dist/cjs/banking/bank-resolver.js.map +7 -0
- package/dist/cjs/banking/bic.js +189 -0
- package/dist/cjs/banking/bic.js.map +7 -0
- package/dist/cjs/banking/iban.js +314 -0
- package/dist/cjs/banking/iban.js.map +7 -0
- package/dist/cjs/banking/index.js +60 -0
- package/dist/cjs/banking/index.js.map +7 -0
- package/dist/cjs/banking/swedish-bank-account-holder-name.js +124 -0
- package/dist/cjs/banking/swedish-bank-account-holder-name.js.map +7 -0
- package/dist/cjs/banking/swedish-bank-account.js +211 -0
- package/dist/cjs/banking/swedish-bank-account.js.map +7 -0
- package/dist/cjs/banking/swedish-bank-clearing-number.js +156 -0
- package/dist/cjs/banking/swedish-bank-clearing-number.js.map +7 -0
- package/dist/cjs/banking/swedish-bank.js +89 -0
- package/dist/cjs/banking/swedish-bank.js.map +7 -0
- package/dist/cjs/banking/swedish-bankgiro-number.js +176 -0
- package/dist/cjs/banking/swedish-bankgiro-number.js.map +7 -0
- package/dist/cjs/banking/swedish-banking-number.js +201 -0
- package/dist/cjs/banking/swedish-banking-number.js.map +7 -0
- package/dist/cjs/banking/swedish-ocr-reference-number.js +215 -0
- package/dist/cjs/banking/swedish-ocr-reference-number.js.map +7 -0
- package/dist/cjs/banking/swedish-postgiro-number.js +173 -0
- package/dist/cjs/banking/swedish-postgiro-number.js.map +7 -0
- package/dist/cjs/banking/swedish-swish-number.js +165 -0
- package/dist/cjs/banking/swedish-swish-number.js.map +7 -0
- package/dist/cjs/contact/address-city.js +104 -0
- package/dist/cjs/contact/address-city.js.map +7 -0
- package/dist/cjs/contact/address-street.js +220 -0
- package/dist/cjs/contact/address-street.js.map +7 -0
- package/dist/cjs/contact/address-zip-code.js +195 -0
- package/dist/cjs/contact/address-zip-code.js.map +7 -0
- package/dist/cjs/contact/address.js +405 -0
- package/dist/cjs/contact/address.js.map +7 -0
- package/dist/cjs/contact/contact-address.js +142 -0
- package/dist/cjs/contact/contact-address.js.map +7 -0
- package/dist/cjs/contact/contact-external-links.js +39 -0
- package/dist/cjs/contact/contact-external-links.js.map +7 -0
- package/dist/cjs/contact/contact-lookup.js +31 -0
- package/dist/cjs/contact/contact-lookup.js.map +7 -0
- package/dist/cjs/contact/contact-masking.js +117 -0
- package/dist/cjs/contact/contact-masking.js.map +7 -0
- package/dist/cjs/contact/country-address-factory.js +97 -0
- package/dist/cjs/contact/country-address-factory.js.map +7 -0
- package/dist/cjs/contact/country-address-registry.js +36 -0
- package/dist/cjs/contact/country-address-registry.js.map +7 -0
- package/dist/cjs/contact/country-address.js +98 -0
- package/dist/cjs/contact/country-address.js.map +7 -0
- package/dist/cjs/contact/country-addresses.js +346 -0
- package/dist/cjs/contact/country-addresses.js.map +7 -0
- package/dist/cjs/contact/country-zip-code-factory.js +117 -0
- package/dist/cjs/contact/country-zip-code-factory.js.map +7 -0
- package/dist/cjs/contact/country-zip-codes.js +376 -0
- package/dist/cjs/contact/country-zip-codes.js.map +7 -0
- package/dist/cjs/contact/index.js +72 -0
- package/dist/cjs/contact/index.js.map +7 -0
- package/dist/cjs/contact/phone-calling-code.js +439 -0
- package/dist/cjs/contact/phone-calling-code.js.map +7 -0
- package/dist/cjs/contact/phone-number-test-data.js +63 -0
- package/dist/cjs/contact/phone-number-test-data.js.map +7 -0
- package/dist/cjs/contact/phone-number.js +325 -0
- package/dist/cjs/contact/phone-number.js.map +7 -0
- package/dist/cjs/contact/register-default-country-addresses.js +88 -0
- package/dist/cjs/contact/register-default-country-addresses.js.map +7 -0
- package/dist/cjs/contact/swedish-address-zip-code.js +92 -0
- package/dist/cjs/contact/swedish-address-zip-code.js.map +7 -0
- package/dist/cjs/contact/swedish-address.js +169 -0
- package/dist/cjs/contact/swedish-address.js.map +7 -0
- package/dist/cjs/finance/currency.js +251 -0
- package/dist/cjs/finance/currency.js.map +7 -0
- package/dist/cjs/finance/exchange-rates.js +51 -0
- package/dist/cjs/finance/exchange-rates.js.map +7 -0
- package/dist/cjs/finance/index.js +34 -0
- package/dist/cjs/finance/index.js.map +7 -0
- package/dist/cjs/finance/isin.js +161 -0
- package/dist/cjs/finance/isin.js.map +7 -0
- package/dist/cjs/finance/money-amount.js +307 -0
- package/dist/cjs/finance/money-amount.js.map +7 -0
- package/dist/cjs/geography/adjacency-data.js +335 -0
- package/dist/cjs/geography/adjacency-data.js.map +7 -0
- package/dist/cjs/geography/continent.js +125 -0
- package/dist/cjs/geography/continent.js.map +7 -0
- package/dist/cjs/geography/country-capital.js +45 -0
- package/dist/cjs/geography/country-capital.js.map +7 -0
- package/dist/cjs/geography/country-capitals.js +288 -0
- package/dist/cjs/geography/country-capitals.js.map +7 -0
- package/dist/cjs/geography/country-coordinates.js +238 -0
- package/dist/cjs/geography/country-coordinates.js.map +7 -0
- package/dist/cjs/geography/country-data.js +530 -0
- package/dist/cjs/geography/country-data.js.map +7 -0
- package/dist/cjs/geography/country-metadata.js +627 -0
- package/dist/cjs/geography/country-metadata.js.map +7 -0
- package/dist/cjs/geography/country.js +427 -0
- package/dist/cjs/geography/country.js.map +7 -0
- package/dist/cjs/geography/geo-coordinate.js +244 -0
- package/dist/cjs/geography/geo-coordinate.js.map +7 -0
- package/dist/cjs/geography/geography-extensions.js +82 -0
- package/dist/cjs/geography/geography-extensions.js.map +7 -0
- package/dist/cjs/geography/geography-external-links.js +52 -0
- package/dist/cjs/geography/geography-external-links.js.map +7 -0
- package/dist/cjs/geography/geography-lookup.js +31 -0
- package/dist/cjs/geography/geography-lookup.js.map +7 -0
- package/dist/cjs/geography/geography-masking.js +54 -0
- package/dist/cjs/geography/geography-masking.js.map +7 -0
- package/dist/cjs/geography/index.js +57 -0
- package/dist/cjs/geography/index.js.map +7 -0
- package/dist/cjs/geography/language.js +462 -0
- package/dist/cjs/geography/language.js.map +7 -0
- package/dist/cjs/geography/swedish-county.js +232 -0
- package/dist/cjs/geography/swedish-county.js.map +7 -0
- package/dist/cjs/geography/swedish-municipality-data.js +316 -0
- package/dist/cjs/geography/swedish-municipality-data.js.map +7 -0
- package/dist/cjs/geography/swedish-municipality.js +218 -0
- package/dist/cjs/geography/swedish-municipality.js.map +7 -0
- package/dist/cjs/index.js +33 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/case-folding.js +32 -0
- package/dist/cjs/internal/case-folding.js.map +7 -0
- package/dist/cjs/internal/clock.js +32 -0
- package/dist/cjs/internal/clock.js.map +7 -0
- package/dist/cjs/internal/decimal.js +262 -0
- package/dist/cjs/internal/decimal.js.map +7 -0
- package/dist/cjs/internal/gs1-prefix.js +164 -0
- package/dist/cjs/internal/gs1-prefix.js.map +7 -0
- package/dist/cjs/internal/gtin-check-digit.js +46 -0
- package/dist/cjs/internal/gtin-check-digit.js.map +7 -0
- package/dist/cjs/internal/input-sanitization.js +79 -0
- package/dist/cjs/internal/input-sanitization.js.map +7 -0
- package/dist/cjs/internal/luhn.js +40 -0
- package/dist/cjs/internal/luhn.js.map +7 -0
- package/dist/cjs/internal/measurement-unit-parser.js +86 -0
- package/dist/cjs/internal/measurement-unit-parser.js.map +7 -0
- package/dist/cjs/internal/measurement-unit.js +130 -0
- package/dist/cjs/internal/measurement-unit.js.map +7 -0
- package/dist/cjs/internal/quantity.js +122 -0
- package/dist/cjs/internal/quantity.js.map +7 -0
- package/dist/cjs/internal/shoe-size-format.js +31 -0
- package/dist/cjs/internal/shoe-size-format.js.map +7 -0
- package/dist/cjs/measurement/area-unit.js +158 -0
- package/dist/cjs/measurement/area-unit.js.map +7 -0
- package/dist/cjs/measurement/area.js +183 -0
- package/dist/cjs/measurement/area.js.map +7 -0
- package/dist/cjs/measurement/count.js +132 -0
- package/dist/cjs/measurement/count.js.map +7 -0
- package/dist/cjs/measurement/data-size-unit.js +208 -0
- package/dist/cjs/measurement/data-size-unit.js.map +7 -0
- package/dist/cjs/measurement/data-size.js +207 -0
- package/dist/cjs/measurement/data-size.js.map +7 -0
- package/dist/cjs/measurement/electric-charge-unit.js +109 -0
- package/dist/cjs/measurement/electric-charge-unit.js.map +7 -0
- package/dist/cjs/measurement/electric-charge.js +148 -0
- package/dist/cjs/measurement/electric-charge.js.map +7 -0
- package/dist/cjs/measurement/electric-current-unit.js +108 -0
- package/dist/cjs/measurement/electric-current-unit.js.map +7 -0
- package/dist/cjs/measurement/electric-current.js +154 -0
- package/dist/cjs/measurement/electric-current.js.map +7 -0
- package/dist/cjs/measurement/energy-unit.js +201 -0
- package/dist/cjs/measurement/energy-unit.js.map +7 -0
- package/dist/cjs/measurement/energy.js +207 -0
- package/dist/cjs/measurement/energy.js.map +7 -0
- package/dist/cjs/measurement/flow-rate-unit.js +132 -0
- package/dist/cjs/measurement/flow-rate-unit.js.map +7 -0
- package/dist/cjs/measurement/flow-rate.js +162 -0
- package/dist/cjs/measurement/flow-rate.js.map +7 -0
- package/dist/cjs/measurement/frequency-unit.js +132 -0
- package/dist/cjs/measurement/frequency-unit.js.map +7 -0
- package/dist/cjs/measurement/frequency.js +165 -0
- package/dist/cjs/measurement/frequency.js.map +7 -0
- package/dist/cjs/measurement/index.js +136 -0
- package/dist/cjs/measurement/index.js.map +7 -0
- package/dist/cjs/measurement/length-unit.js +210 -0
- package/dist/cjs/measurement/length-unit.js.map +7 -0
- package/dist/cjs/measurement/length.js +208 -0
- package/dist/cjs/measurement/length.js.map +7 -0
- package/dist/cjs/measurement/luminance-unit.js +110 -0
- package/dist/cjs/measurement/luminance-unit.js.map +7 -0
- package/dist/cjs/measurement/luminance.js +158 -0
- package/dist/cjs/measurement/luminance.js.map +7 -0
- package/dist/cjs/measurement/luminous-flux-unit.js +86 -0
- package/dist/cjs/measurement/luminous-flux-unit.js.map +7 -0
- package/dist/cjs/measurement/luminous-flux.js +139 -0
- package/dist/cjs/measurement/luminous-flux.js.map +7 -0
- package/dist/cjs/measurement/percentage.js +212 -0
- package/dist/cjs/measurement/percentage.js.map +7 -0
- package/dist/cjs/measurement/power-unit.js +155 -0
- package/dist/cjs/measurement/power-unit.js.map +7 -0
- package/dist/cjs/measurement/power.js +184 -0
- package/dist/cjs/measurement/power.js.map +7 -0
- package/dist/cjs/measurement/pressure-unit.js +168 -0
- package/dist/cjs/measurement/pressure-unit.js.map +7 -0
- package/dist/cjs/measurement/pressure.js +189 -0
- package/dist/cjs/measurement/pressure.js.map +7 -0
- package/dist/cjs/measurement/rotational-speed-unit.js +96 -0
- package/dist/cjs/measurement/rotational-speed-unit.js.map +7 -0
- package/dist/cjs/measurement/rotational-speed.js +152 -0
- package/dist/cjs/measurement/rotational-speed.js.map +7 -0
- package/dist/cjs/measurement/sound-level.js +185 -0
- package/dist/cjs/measurement/sound-level.js.map +7 -0
- package/dist/cjs/measurement/speed-unit.js +119 -0
- package/dist/cjs/measurement/speed-unit.js.map +7 -0
- package/dist/cjs/measurement/speed.js +159 -0
- package/dist/cjs/measurement/speed.js.map +7 -0
- package/dist/cjs/measurement/temperature-delta.js +101 -0
- package/dist/cjs/measurement/temperature-delta.js.map +7 -0
- package/dist/cjs/measurement/temperature-unit.js +130 -0
- package/dist/cjs/measurement/temperature-unit.js.map +7 -0
- package/dist/cjs/measurement/temperature.js +216 -0
- package/dist/cjs/measurement/temperature.js.map +7 -0
- package/dist/cjs/measurement/torque-unit.js +138 -0
- package/dist/cjs/measurement/torque-unit.js.map +7 -0
- package/dist/cjs/measurement/torque.js +165 -0
- package/dist/cjs/measurement/torque.js.map +7 -0
- package/dist/cjs/measurement/voltage-unit.js +127 -0
- package/dist/cjs/measurement/voltage-unit.js.map +7 -0
- package/dist/cjs/measurement/voltage.js +159 -0
- package/dist/cjs/measurement/voltage.js.map +7 -0
- package/dist/cjs/measurement/volume-unit.js +178 -0
- package/dist/cjs/measurement/volume-unit.js.map +7 -0
- package/dist/cjs/measurement/volume.js +195 -0
- package/dist/cjs/measurement/volume.js.map +7 -0
- package/dist/cjs/measurement/weight-unit.js +158 -0
- package/dist/cjs/measurement/weight-unit.js.map +7 -0
- package/dist/cjs/measurement/weight.js +183 -0
- package/dist/cjs/measurement/weight.js.map +7 -0
- package/dist/cjs/measurement/year-month.js +204 -0
- package/dist/cjs/measurement/year-month.js.map +7 -0
- package/dist/cjs/measurement/year.js +109 -0
- package/dist/cjs/measurement/year.js.map +7 -0
- package/dist/cjs/organization/duns-number.js +114 -0
- package/dist/cjs/organization/duns-number.js.map +7 -0
- package/dist/cjs/organization/elf-code.js +132 -0
- package/dist/cjs/organization/elf-code.js.map +7 -0
- package/dist/cjs/organization/eu-organization-name.js +119 -0
- package/dist/cjs/organization/eu-organization-name.js.map +7 -0
- package/dist/cjs/organization/eu-vat-number.js +444 -0
- package/dist/cjs/organization/eu-vat-number.js.map +7 -0
- package/dist/cjs/organization/index.js +65 -0
- package/dist/cjs/organization/index.js.map +7 -0
- package/dist/cjs/organization/lei-code.js +133 -0
- package/dist/cjs/organization/lei-code.js.map +7 -0
- package/dist/cjs/organization/organization-extensions.js +80 -0
- package/dist/cjs/organization/organization-extensions.js.map +7 -0
- package/dist/cjs/organization/organization-validation-utils.js +78 -0
- package/dist/cjs/organization/organization-validation-utils.js.map +7 -0
- package/dist/cjs/organization/swedish-cfar-number.js +88 -0
- package/dist/cjs/organization/swedish-cfar-number.js.map +7 -0
- package/dist/cjs/organization/swedish-organization-identifier-type.js +34 -0
- package/dist/cjs/organization/swedish-organization-identifier-type.js.map +7 -0
- package/dist/cjs/organization/swedish-organization-identifier.js +166 -0
- package/dist/cjs/organization/swedish-organization-identifier.js.map +7 -0
- package/dist/cjs/organization/swedish-organization-name.js +255 -0
- package/dist/cjs/organization/swedish-organization-name.js.map +7 -0
- package/dist/cjs/organization/swedish-organization-number.js +289 -0
- package/dist/cjs/organization/swedish-organization-number.js.map +7 -0
- package/dist/cjs/organization/swedish-organization-type.js +51 -0
- package/dist/cjs/organization/swedish-organization-type.js.map +7 -0
- package/dist/cjs/organization/swedish-sni-code.js +96 -0
- package/dist/cjs/organization/swedish-sni-code.js.map +7 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/person/index.js +49 -0
- package/dist/cjs/person/index.js.map +7 -0
- package/dist/cjs/person/person-age.js +187 -0
- package/dist/cjs/person/person-age.js.map +7 -0
- package/dist/cjs/person/person-family-name.js +83 -0
- package/dist/cjs/person/person-family-name.js.map +7 -0
- package/dist/cjs/person/person-full-name.js +106 -0
- package/dist/cjs/person/person-full-name.js.map +7 -0
- package/dist/cjs/person/person-given-name.js +103 -0
- package/dist/cjs/person/person-given-name.js.map +7 -0
- package/dist/cjs/person/person-masking.js +48 -0
- package/dist/cjs/person/person-masking.js.map +7 -0
- package/dist/cjs/person/person-name-normalization.js +99 -0
- package/dist/cjs/person/person-name-normalization.js.map +7 -0
- package/dist/cjs/person/personnummer-parser.js +156 -0
- package/dist/cjs/person/personnummer-parser.js.map +7 -0
- package/dist/cjs/person/swedish-coordination-number.js +186 -0
- package/dist/cjs/person/swedish-coordination-number.js.map +7 -0
- package/dist/cjs/person/swedish-personal-identity-number.js +188 -0
- package/dist/cjs/person/swedish-personal-identity-number.js.map +7 -0
- package/dist/cjs/primitive-type-info.js +17 -0
- package/dist/cjs/primitive-type-info.js.map +7 -0
- package/dist/cjs/primitives-defaults.js +92 -0
- package/dist/cjs/primitives-defaults.js.map +7 -0
- package/dist/cjs/product/adult-clothing-size.js +148 -0
- package/dist/cjs/product/adult-clothing-size.js.map +7 -0
- package/dist/cjs/product/adult-shoe-size.js +139 -0
- package/dist/cjs/product/adult-shoe-size.js.map +7 -0
- package/dist/cjs/product/aspect-ratio.js +188 -0
- package/dist/cjs/product/aspect-ratio.js.map +7 -0
- package/dist/cjs/product/battery-capacity.js +184 -0
- package/dist/cjs/product/battery-capacity.js.map +7 -0
- package/dist/cjs/product/battery-chemistry.js +259 -0
- package/dist/cjs/product/battery-chemistry.js.map +7 -0
- package/dist/cjs/product/camera-resolution.js +161 -0
- package/dist/cjs/product/camera-resolution.js.map +7 -0
- package/dist/cjs/product/child-clothing-size.js +254 -0
- package/dist/cjs/product/child-clothing-size.js.map +7 -0
- package/dist/cjs/product/child-shoe-size.js +200 -0
- package/dist/cjs/product/child-shoe-size.js.map +7 -0
- package/dist/cjs/product/clothing-fit.js +223 -0
- package/dist/cjs/product/clothing-fit.js.map +7 -0
- package/dist/cjs/product/clothing-gender.js +198 -0
- package/dist/cjs/product/clothing-gender.js.map +7 -0
- package/dist/cjs/product/clothing-season.js +202 -0
- package/dist/cjs/product/clothing-season.js.map +7 -0
- package/dist/cjs/product/clothing-size-system.js +31 -0
- package/dist/cjs/product/clothing-size-system.js.map +7 -0
- package/dist/cjs/product/clothing-size.js +146 -0
- package/dist/cjs/product/clothing-size.js.map +7 -0
- package/dist/cjs/product/color.js +334 -0
- package/dist/cjs/product/color.js.map +7 -0
- package/dist/cjs/product/display-panel-type.js +287 -0
- package/dist/cjs/product/display-panel-type.js.map +7 -0
- package/dist/cjs/product/electrical-phase.js +194 -0
- package/dist/cjs/product/electrical-phase.js.map +7 -0
- package/dist/cjs/product/energy-scale.js +31 -0
- package/dist/cjs/product/energy-scale.js.map +7 -0
- package/dist/cjs/product/eu-energy-efficiency-class.js +135 -0
- package/dist/cjs/product/eu-energy-efficiency-class.js.map +7 -0
- package/dist/cjs/product/google-product-category.js +114 -0
- package/dist/cjs/product/google-product-category.js.map +7 -0
- package/dist/cjs/product/gtin.js +99 -0
- package/dist/cjs/product/gtin.js.map +7 -0
- package/dist/cjs/product/gtin12.js +130 -0
- package/dist/cjs/product/gtin12.js.map +7 -0
- package/dist/cjs/product/gtin13.js +147 -0
- package/dist/cjs/product/gtin13.js.map +7 -0
- package/dist/cjs/product/gtin14.js +135 -0
- package/dist/cjs/product/gtin14.js.map +7 -0
- package/dist/cjs/product/gtin8.js +130 -0
- package/dist/cjs/product/gtin8.js.map +7 -0
- package/dist/cjs/product/hs-code-level.js +32 -0
- package/dist/cjs/product/hs-code-level.js.map +7 -0
- package/dist/cjs/product/hs-code.js +126 -0
- package/dist/cjs/product/hs-code.js.map +7 -0
- package/dist/cjs/product/index.js +128 -0
- package/dist/cjs/product/index.js.map +7 -0
- package/dist/cjs/product/ip-rating.js +166 -0
- package/dist/cjs/product/ip-rating.js.map +7 -0
- package/dist/cjs/product/operating-system-family.js +37 -0
- package/dist/cjs/product/operating-system-family.js.map +7 -0
- package/dist/cjs/product/operating-system-info.js +100 -0
- package/dist/cjs/product/operating-system-info.js.map +7 -0
- package/dist/cjs/product/operating-system-name.js +127 -0
- package/dist/cjs/product/operating-system-name.js.map +7 -0
- package/dist/cjs/product/operating-system-version.js +110 -0
- package/dist/cjs/product/operating-system-version.js.map +7 -0
- package/dist/cjs/product/power-source.js +318 -0
- package/dist/cjs/product/power-source.js.map +7 -0
- package/dist/cjs/product/processor-speed.js +159 -0
- package/dist/cjs/product/processor-speed.js.map +7 -0
- package/dist/cjs/product/product-extensions.js +27 -0
- package/dist/cjs/product/product-extensions.js.map +7 -0
- package/dist/cjs/product/product-masking.js +102 -0
- package/dist/cjs/product/product-masking.js.map +7 -0
- package/dist/cjs/product/ram-capacity.js +154 -0
- package/dist/cjs/product/ram-capacity.js.map +7 -0
- package/dist/cjs/product/refrigerant-family.js +40 -0
- package/dist/cjs/product/refrigerant-family.js.map +7 -0
- package/dist/cjs/product/refrigerant.js +419 -0
- package/dist/cjs/product/refrigerant.js.map +7 -0
- package/dist/cjs/product/screen-resolution.js +197 -0
- package/dist/cjs/product/screen-resolution.js.map +7 -0
- package/dist/cjs/product/screen-size.js +184 -0
- package/dist/cjs/product/screen-size.js.map +7 -0
- package/dist/cjs/product/shoe-size-system.js +31 -0
- package/dist/cjs/product/shoe-size-system.js.map +7 -0
- package/dist/cjs/product/shoe-size.js +138 -0
- package/dist/cjs/product/shoe-size.js.map +7 -0
- package/dist/cjs/product/storage-capacity.js +159 -0
- package/dist/cjs/product/storage-capacity.js.map +7 -0
- package/dist/cjs/product/storage-media-type.js +271 -0
- package/dist/cjs/product/storage-media-type.js.map +7 -0
- package/dist/cjs/property/index.js +31 -0
- package/dist/cjs/property/index.js.map +7 -0
- package/dist/cjs/property/swedish-property-designation.js +179 -0
- package/dist/cjs/property/swedish-property-designation.js.map +7 -0
- package/dist/cjs/property/swedish-property-taxation-code.js +218 -0
- package/dist/cjs/property/swedish-property-taxation-code.js.map +7 -0
- package/dist/cjs/register-default-text-scanners.js +290 -0
- package/dist/cjs/register-default-text-scanners.js.map +7 -0
- package/dist/cjs/sample-data/index.js +358 -0
- package/dist/cjs/sample-data/index.js.map +7 -0
- package/dist/cjs/text-scanning/index.js +38 -0
- package/dist/cjs/text-scanning/index.js.map +7 -0
- package/dist/cjs/text-scanning/text-candidate-category.js +35 -0
- package/dist/cjs/text-scanning/text-candidate-category.js.map +7 -0
- package/dist/cjs/text-scanning/text-candidate.js +75 -0
- package/dist/cjs/text-scanning/text-candidate.js.map +7 -0
- package/dist/cjs/text-scanning/text-match-confidence.js +43 -0
- package/dist/cjs/text-scanning/text-match-confidence.js.map +7 -0
- package/dist/cjs/text-scanning/text-scan-helpers.js +98 -0
- package/dist/cjs/text-scanning/text-scan-helpers.js.map +7 -0
- package/dist/cjs/text-scanning/text-scan-result.js +333 -0
- package/dist/cjs/text-scanning/text-scan-result.js.map +7 -0
- package/dist/cjs/text-scanning/text-scanner-options.js +29 -0
- package/dist/cjs/text-scanning/text-scanner-options.js.map +7 -0
- package/dist/cjs/text-scanning/text-scanner.js +60 -0
- package/dist/cjs/text-scanning/text-scanner.js.map +7 -0
- package/dist/cjs/validation/index.js +29 -0
- package/dist/cjs/validation/index.js.map +7 -0
- package/dist/cjs/validation/validation-error-reason.js +53 -0
- package/dist/cjs/validation/validation-error-reason.js.map +7 -0
- package/dist/cjs/validation/validation-issue.js +43 -0
- package/dist/cjs/validation/validation-issue.js.map +7 -0
- package/dist/cjs/validation/validation-result.js +52 -0
- package/dist/cjs/validation/validation-result.js.map +7 -0
- package/dist/cjs/vehicle/boat-ce-design-category.js +200 -0
- package/dist/cjs/vehicle/boat-ce-design-category.js.map +7 -0
- package/dist/cjs/vehicle/boat-hull-material.js +222 -0
- package/dist/cjs/vehicle/boat-hull-material.js.map +7 -0
- package/dist/cjs/vehicle/body-type.js +325 -0
- package/dist/cjs/vehicle/body-type.js.map +7 -0
- package/dist/cjs/vehicle/bolt-pattern.js +150 -0
- package/dist/cjs/vehicle/bolt-pattern.js.map +7 -0
- package/dist/cjs/vehicle/drivetrain-type.js +200 -0
- package/dist/cjs/vehicle/drivetrain-type.js.map +7 -0
- package/dist/cjs/vehicle/emission-rate.js +194 -0
- package/dist/cjs/vehicle/emission-rate.js.map +7 -0
- package/dist/cjs/vehicle/energy-consumption.js +250 -0
- package/dist/cjs/vehicle/energy-consumption.js.map +7 -0
- package/dist/cjs/vehicle/engine-displacement.js +169 -0
- package/dist/cjs/vehicle/engine-displacement.js.map +7 -0
- package/dist/cjs/vehicle/engine-power.js +211 -0
- package/dist/cjs/vehicle/engine-power.js.map +7 -0
- package/dist/cjs/vehicle/eu-type-approval-number.js +196 -0
- package/dist/cjs/vehicle/eu-type-approval-number.js.map +7 -0
- package/dist/cjs/vehicle/eu-vehicle-category.js +167 -0
- package/dist/cjs/vehicle/eu-vehicle-category.js.map +7 -0
- package/dist/cjs/vehicle/euro-emission-class.js +313 -0
- package/dist/cjs/vehicle/euro-emission-class.js.map +7 -0
- package/dist/cjs/vehicle/fuel-consumption-norm.js +206 -0
- package/dist/cjs/vehicle/fuel-consumption-norm.js.map +7 -0
- package/dist/cjs/vehicle/fuel-consumption.js +281 -0
- package/dist/cjs/vehicle/fuel-consumption.js.map +7 -0
- package/dist/cjs/vehicle/fuel-type.js +288 -0
- package/dist/cjs/vehicle/fuel-type.js.map +7 -0
- package/dist/cjs/vehicle/index.js +108 -0
- package/dist/cjs/vehicle/index.js.map +7 -0
- package/dist/cjs/vehicle/odometer-reading.js +165 -0
- package/dist/cjs/vehicle/odometer-reading.js.map +7 -0
- package/dist/cjs/vehicle/operating-hours.js +174 -0
- package/dist/cjs/vehicle/operating-hours.js.map +7 -0
- package/dist/cjs/vehicle/suspension-type.js +312 -0
- package/dist/cjs/vehicle/suspension-type.js.map +7 -0
- package/dist/cjs/vehicle/swedish-driving-license-category.js +404 -0
- package/dist/cjs/vehicle/swedish-driving-license-category.js.map +7 -0
- package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js +32 -0
- package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
- package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js +232 -0
- package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
- package/dist/cjs/vehicle/swedish-vehicle-registration-number.js +193 -0
- package/dist/cjs/vehicle/swedish-vehicle-registration-number.js.map +7 -0
- package/dist/cjs/vehicle/swedish-vehicle-status.js +172 -0
- package/dist/cjs/vehicle/swedish-vehicle-status.js.map +7 -0
- package/dist/cjs/vehicle/swedish-vehicle-type.js +282 -0
- package/dist/cjs/vehicle/swedish-vehicle-type.js.map +7 -0
- package/dist/cjs/vehicle/tire-dimension.js +206 -0
- package/dist/cjs/vehicle/tire-dimension.js.map +7 -0
- package/dist/cjs/vehicle/tire-type.js +228 -0
- package/dist/cjs/vehicle/tire-type.js.map +7 -0
- package/dist/cjs/vehicle/track-type.js +188 -0
- package/dist/cjs/vehicle/track-type.js.map +7 -0
- package/dist/cjs/vehicle/transmission-type.js +258 -0
- package/dist/cjs/vehicle/transmission-type.js.map +7 -0
- package/dist/cjs/vehicle/vehicle-extensions.js +35 -0
- package/dist/cjs/vehicle/vehicle-extensions.js.map +7 -0
- package/dist/cjs/vehicle/vehicle-identification-number.js +265 -0
- package/dist/cjs/vehicle/vehicle-identification-number.js.map +7 -0
- package/dist/cjs/vehicle/vehicle-masking.js +68 -0
- package/dist/cjs/vehicle/vehicle-masking.js.map +7 -0
- package/dist/cjs/vehicle/wheel-rim-dimension.js +183 -0
- package/dist/cjs/vehicle/wheel-rim-dimension.js.map +7 -0
- package/dist/cjs/web/email-address.js +542 -0
- package/dist/cjs/web/email-address.js.map +7 -0
- package/dist/cjs/web/index.js +31 -0
- package/dist/cjs/web/index.js.map +7 -0
- package/dist/cjs/web/url.js +353 -0
- package/dist/cjs/web/url.js.map +7 -0
- package/dist/esm/banking/bank-resolver.js +358 -0
- package/dist/esm/banking/bank-resolver.js.map +7 -0
- package/dist/esm/banking/bic.js +169 -0
- package/dist/esm/banking/bic.js.map +7 -0
- package/dist/esm/banking/iban.js +294 -0
- package/dist/esm/banking/iban.js.map +7 -0
- package/dist/esm/banking/index.js +60 -0
- package/dist/esm/banking/index.js.map +7 -0
- package/dist/esm/banking/swedish-bank-account-holder-name.js +104 -0
- package/dist/esm/banking/swedish-bank-account-holder-name.js.map +7 -0
- package/dist/esm/banking/swedish-bank-account.js +199 -0
- package/dist/esm/banking/swedish-bank-account.js.map +7 -0
- package/dist/esm/banking/swedish-bank-clearing-number.js +136 -0
- package/dist/esm/banking/swedish-bank-clearing-number.js.map +7 -0
- package/dist/esm/banking/swedish-bank.js +69 -0
- package/dist/esm/banking/swedish-bank.js.map +7 -0
- package/dist/esm/banking/swedish-bankgiro-number.js +156 -0
- package/dist/esm/banking/swedish-bankgiro-number.js.map +7 -0
- package/dist/esm/banking/swedish-banking-number.js +181 -0
- package/dist/esm/banking/swedish-banking-number.js.map +7 -0
- package/dist/esm/banking/swedish-ocr-reference-number.js +195 -0
- package/dist/esm/banking/swedish-ocr-reference-number.js.map +7 -0
- package/dist/esm/banking/swedish-postgiro-number.js +153 -0
- package/dist/esm/banking/swedish-postgiro-number.js.map +7 -0
- package/dist/esm/banking/swedish-swish-number.js +145 -0
- package/dist/esm/banking/swedish-swish-number.js.map +7 -0
- package/dist/esm/contact/address-city.js +84 -0
- package/dist/esm/contact/address-city.js.map +7 -0
- package/dist/esm/contact/address-street.js +200 -0
- package/dist/esm/contact/address-street.js.map +7 -0
- package/dist/esm/contact/address-zip-code.js +175 -0
- package/dist/esm/contact/address-zip-code.js.map +7 -0
- package/dist/esm/contact/address.js +388 -0
- package/dist/esm/contact/address.js.map +7 -0
- package/dist/esm/contact/contact-address.js +122 -0
- package/dist/esm/contact/contact-address.js.map +7 -0
- package/dist/esm/contact/contact-external-links.js +19 -0
- package/dist/esm/contact/contact-external-links.js.map +7 -0
- package/dist/esm/contact/contact-lookup.js +11 -0
- package/dist/esm/contact/contact-lookup.js.map +7 -0
- package/dist/esm/contact/contact-masking.js +97 -0
- package/dist/esm/contact/contact-masking.js.map +7 -0
- package/dist/esm/contact/country-address-factory.js +80 -0
- package/dist/esm/contact/country-address-factory.js.map +7 -0
- package/dist/esm/contact/country-address-registry.js +16 -0
- package/dist/esm/contact/country-address-registry.js.map +7 -0
- package/dist/esm/contact/country-address.js +78 -0
- package/dist/esm/contact/country-address.js.map +7 -0
- package/dist/esm/contact/country-addresses.js +316 -0
- package/dist/esm/contact/country-addresses.js.map +7 -0
- package/dist/esm/contact/country-zip-code-factory.js +97 -0
- package/dist/esm/contact/country-zip-code-factory.js.map +7 -0
- package/dist/esm/contact/country-zip-codes.js +363 -0
- package/dist/esm/contact/country-zip-codes.js.map +7 -0
- package/dist/esm/contact/index.js +63 -0
- package/dist/esm/contact/index.js.map +7 -0
- package/dist/esm/contact/phone-calling-code.js +419 -0
- package/dist/esm/contact/phone-calling-code.js.map +7 -0
- package/dist/esm/contact/phone-number-test-data.js +43 -0
- package/dist/esm/contact/phone-number-test-data.js.map +7 -0
- package/dist/esm/contact/phone-number.js +305 -0
- package/dist/esm/contact/phone-number.js.map +7 -0
- package/dist/esm/contact/register-default-country-addresses.js +58 -0
- package/dist/esm/contact/register-default-country-addresses.js.map +7 -0
- package/dist/esm/contact/swedish-address-zip-code.js +72 -0
- package/dist/esm/contact/swedish-address-zip-code.js.map +7 -0
- package/dist/esm/contact/swedish-address.js +149 -0
- package/dist/esm/contact/swedish-address.js.map +7 -0
- package/dist/esm/finance/currency.js +231 -0
- package/dist/esm/finance/currency.js.map +7 -0
- package/dist/esm/finance/exchange-rates.js +31 -0
- package/dist/esm/finance/exchange-rates.js.map +7 -0
- package/dist/esm/finance/index.js +14 -0
- package/dist/esm/finance/index.js.map +7 -0
- package/dist/esm/finance/isin.js +141 -0
- package/dist/esm/finance/isin.js.map +7 -0
- package/dist/esm/finance/money-amount.js +287 -0
- package/dist/esm/finance/money-amount.js.map +7 -0
- package/dist/esm/geography/adjacency-data.js +315 -0
- package/dist/esm/geography/adjacency-data.js.map +7 -0
- package/dist/esm/geography/continent.js +105 -0
- package/dist/esm/geography/continent.js.map +7 -0
- package/dist/esm/geography/country-capital.js +25 -0
- package/dist/esm/geography/country-capital.js.map +7 -0
- package/dist/esm/geography/country-capitals.js +268 -0
- package/dist/esm/geography/country-capitals.js.map +7 -0
- package/dist/esm/geography/country-coordinates.js +218 -0
- package/dist/esm/geography/country-coordinates.js.map +7 -0
- package/dist/esm/geography/country-data.js +510 -0
- package/dist/esm/geography/country-data.js.map +7 -0
- package/dist/esm/geography/country-metadata.js +607 -0
- package/dist/esm/geography/country-metadata.js.map +7 -0
- package/dist/esm/geography/country.js +417 -0
- package/dist/esm/geography/country.js.map +7 -0
- package/dist/esm/geography/geo-coordinate.js +224 -0
- package/dist/esm/geography/geo-coordinate.js.map +7 -0
- package/dist/esm/geography/geography-extensions.js +62 -0
- package/dist/esm/geography/geography-extensions.js.map +7 -0
- package/dist/esm/geography/geography-external-links.js +32 -0
- package/dist/esm/geography/geography-external-links.js.map +7 -0
- package/dist/esm/geography/geography-lookup.js +11 -0
- package/dist/esm/geography/geography-lookup.js.map +7 -0
- package/dist/esm/geography/geography-masking.js +34 -0
- package/dist/esm/geography/geography-masking.js.map +7 -0
- package/dist/esm/geography/index.js +55 -0
- package/dist/esm/geography/index.js.map +7 -0
- package/dist/esm/geography/language.js +442 -0
- package/dist/esm/geography/language.js.map +7 -0
- package/dist/esm/geography/swedish-county.js +212 -0
- package/dist/esm/geography/swedish-county.js.map +7 -0
- package/dist/esm/geography/swedish-municipality-data.js +296 -0
- package/dist/esm/geography/swedish-municipality-data.js.map +7 -0
- package/dist/esm/geography/swedish-municipality.js +198 -0
- package/dist/esm/geography/swedish-municipality.js.map +7 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/internal/case-folding.js +12 -0
- package/dist/esm/internal/case-folding.js.map +7 -0
- package/dist/esm/internal/clock.js +12 -0
- package/dist/esm/internal/clock.js.map +7 -0
- package/dist/esm/internal/decimal.js +242 -0
- package/dist/esm/internal/decimal.js.map +7 -0
- package/dist/esm/internal/gs1-prefix.js +144 -0
- package/dist/esm/internal/gs1-prefix.js.map +7 -0
- package/dist/esm/internal/gtin-check-digit.js +26 -0
- package/dist/esm/internal/gtin-check-digit.js.map +7 -0
- package/dist/esm/internal/input-sanitization.js +59 -0
- package/dist/esm/internal/input-sanitization.js.map +7 -0
- package/dist/esm/internal/luhn.js +20 -0
- package/dist/esm/internal/luhn.js.map +7 -0
- package/dist/esm/internal/measurement-unit-parser.js +66 -0
- package/dist/esm/internal/measurement-unit-parser.js.map +7 -0
- package/dist/esm/internal/measurement-unit.js +110 -0
- package/dist/esm/internal/measurement-unit.js.map +7 -0
- package/dist/esm/internal/quantity.js +102 -0
- package/dist/esm/internal/quantity.js.map +7 -0
- package/dist/esm/internal/shoe-size-format.js +11 -0
- package/dist/esm/internal/shoe-size-format.js.map +7 -0
- package/dist/esm/measurement/area-unit.js +138 -0
- package/dist/esm/measurement/area-unit.js.map +7 -0
- package/dist/esm/measurement/area.js +163 -0
- package/dist/esm/measurement/area.js.map +7 -0
- package/dist/esm/measurement/count.js +112 -0
- package/dist/esm/measurement/count.js.map +7 -0
- package/dist/esm/measurement/data-size-unit.js +188 -0
- package/dist/esm/measurement/data-size-unit.js.map +7 -0
- package/dist/esm/measurement/data-size.js +187 -0
- package/dist/esm/measurement/data-size.js.map +7 -0
- package/dist/esm/measurement/electric-charge-unit.js +89 -0
- package/dist/esm/measurement/electric-charge-unit.js.map +7 -0
- package/dist/esm/measurement/electric-charge.js +128 -0
- package/dist/esm/measurement/electric-charge.js.map +7 -0
- package/dist/esm/measurement/electric-current-unit.js +88 -0
- package/dist/esm/measurement/electric-current-unit.js.map +7 -0
- package/dist/esm/measurement/electric-current.js +134 -0
- package/dist/esm/measurement/electric-current.js.map +7 -0
- package/dist/esm/measurement/energy-unit.js +181 -0
- package/dist/esm/measurement/energy-unit.js.map +7 -0
- package/dist/esm/measurement/energy.js +187 -0
- package/dist/esm/measurement/energy.js.map +7 -0
- package/dist/esm/measurement/flow-rate-unit.js +112 -0
- package/dist/esm/measurement/flow-rate-unit.js.map +7 -0
- package/dist/esm/measurement/flow-rate.js +142 -0
- package/dist/esm/measurement/flow-rate.js.map +7 -0
- package/dist/esm/measurement/frequency-unit.js +112 -0
- package/dist/esm/measurement/frequency-unit.js.map +7 -0
- package/dist/esm/measurement/frequency.js +145 -0
- package/dist/esm/measurement/frequency.js.map +7 -0
- package/dist/esm/measurement/index.js +129 -0
- package/dist/esm/measurement/index.js.map +7 -0
- package/dist/esm/measurement/length-unit.js +190 -0
- package/dist/esm/measurement/length-unit.js.map +7 -0
- package/dist/esm/measurement/length.js +188 -0
- package/dist/esm/measurement/length.js.map +7 -0
- package/dist/esm/measurement/luminance-unit.js +90 -0
- package/dist/esm/measurement/luminance-unit.js.map +7 -0
- package/dist/esm/measurement/luminance.js +138 -0
- package/dist/esm/measurement/luminance.js.map +7 -0
- package/dist/esm/measurement/luminous-flux-unit.js +66 -0
- package/dist/esm/measurement/luminous-flux-unit.js.map +7 -0
- package/dist/esm/measurement/luminous-flux.js +119 -0
- package/dist/esm/measurement/luminous-flux.js.map +7 -0
- package/dist/esm/measurement/percentage.js +192 -0
- package/dist/esm/measurement/percentage.js.map +7 -0
- package/dist/esm/measurement/power-unit.js +135 -0
- package/dist/esm/measurement/power-unit.js.map +7 -0
- package/dist/esm/measurement/power.js +164 -0
- package/dist/esm/measurement/power.js.map +7 -0
- package/dist/esm/measurement/pressure-unit.js +148 -0
- package/dist/esm/measurement/pressure-unit.js.map +7 -0
- package/dist/esm/measurement/pressure.js +169 -0
- package/dist/esm/measurement/pressure.js.map +7 -0
- package/dist/esm/measurement/rotational-speed-unit.js +76 -0
- package/dist/esm/measurement/rotational-speed-unit.js.map +7 -0
- package/dist/esm/measurement/rotational-speed.js +132 -0
- package/dist/esm/measurement/rotational-speed.js.map +7 -0
- package/dist/esm/measurement/sound-level.js +165 -0
- package/dist/esm/measurement/sound-level.js.map +7 -0
- package/dist/esm/measurement/speed-unit.js +99 -0
- package/dist/esm/measurement/speed-unit.js.map +7 -0
- package/dist/esm/measurement/speed.js +139 -0
- package/dist/esm/measurement/speed.js.map +7 -0
- package/dist/esm/measurement/temperature-delta.js +81 -0
- package/dist/esm/measurement/temperature-delta.js.map +7 -0
- package/dist/esm/measurement/temperature-unit.js +110 -0
- package/dist/esm/measurement/temperature-unit.js.map +7 -0
- package/dist/esm/measurement/temperature.js +196 -0
- package/dist/esm/measurement/temperature.js.map +7 -0
- package/dist/esm/measurement/torque-unit.js +118 -0
- package/dist/esm/measurement/torque-unit.js.map +7 -0
- package/dist/esm/measurement/torque.js +145 -0
- package/dist/esm/measurement/torque.js.map +7 -0
- package/dist/esm/measurement/voltage-unit.js +107 -0
- package/dist/esm/measurement/voltage-unit.js.map +7 -0
- package/dist/esm/measurement/voltage.js +139 -0
- package/dist/esm/measurement/voltage.js.map +7 -0
- package/dist/esm/measurement/volume-unit.js +158 -0
- package/dist/esm/measurement/volume-unit.js.map +7 -0
- package/dist/esm/measurement/volume.js +175 -0
- package/dist/esm/measurement/volume.js.map +7 -0
- package/dist/esm/measurement/weight-unit.js +138 -0
- package/dist/esm/measurement/weight-unit.js.map +7 -0
- package/dist/esm/measurement/weight.js +163 -0
- package/dist/esm/measurement/weight.js.map +7 -0
- package/dist/esm/measurement/year-month.js +184 -0
- package/dist/esm/measurement/year-month.js.map +7 -0
- package/dist/esm/measurement/year.js +89 -0
- package/dist/esm/measurement/year.js.map +7 -0
- package/dist/esm/organization/duns-number.js +94 -0
- package/dist/esm/organization/duns-number.js.map +7 -0
- package/dist/esm/organization/elf-code.js +112 -0
- package/dist/esm/organization/elf-code.js.map +7 -0
- package/dist/esm/organization/eu-organization-name.js +99 -0
- package/dist/esm/organization/eu-organization-name.js.map +7 -0
- package/dist/esm/organization/eu-vat-number.js +424 -0
- package/dist/esm/organization/eu-vat-number.js.map +7 -0
- package/dist/esm/organization/index.js +62 -0
- package/dist/esm/organization/index.js.map +7 -0
- package/dist/esm/organization/lei-code.js +113 -0
- package/dist/esm/organization/lei-code.js.map +7 -0
- package/dist/esm/organization/organization-extensions.js +60 -0
- package/dist/esm/organization/organization-extensions.js.map +7 -0
- package/dist/esm/organization/organization-validation-utils.js +58 -0
- package/dist/esm/organization/organization-validation-utils.js.map +7 -0
- package/dist/esm/organization/swedish-cfar-number.js +68 -0
- package/dist/esm/organization/swedish-cfar-number.js.map +7 -0
- package/dist/esm/organization/swedish-organization-identifier-type.js +14 -0
- package/dist/esm/organization/swedish-organization-identifier-type.js.map +7 -0
- package/dist/esm/organization/swedish-organization-identifier.js +146 -0
- package/dist/esm/organization/swedish-organization-identifier.js.map +7 -0
- package/dist/esm/organization/swedish-organization-name.js +235 -0
- package/dist/esm/organization/swedish-organization-name.js.map +7 -0
- package/dist/esm/organization/swedish-organization-number.js +269 -0
- package/dist/esm/organization/swedish-organization-number.js.map +7 -0
- package/dist/esm/organization/swedish-organization-type.js +31 -0
- package/dist/esm/organization/swedish-organization-type.js.map +7 -0
- package/dist/esm/organization/swedish-sni-code.js +76 -0
- package/dist/esm/organization/swedish-sni-code.js.map +7 -0
- package/dist/esm/person/index.js +42 -0
- package/dist/esm/person/index.js.map +7 -0
- package/dist/esm/person/person-age.js +167 -0
- package/dist/esm/person/person-age.js.map +7 -0
- package/dist/esm/person/person-family-name.js +67 -0
- package/dist/esm/person/person-family-name.js.map +7 -0
- package/dist/esm/person/person-full-name.js +86 -0
- package/dist/esm/person/person-full-name.js.map +7 -0
- package/dist/esm/person/person-given-name.js +87 -0
- package/dist/esm/person/person-given-name.js.map +7 -0
- package/dist/esm/person/person-masking.js +28 -0
- package/dist/esm/person/person-masking.js.map +7 -0
- package/dist/esm/person/person-name-normalization.js +79 -0
- package/dist/esm/person/person-name-normalization.js.map +7 -0
- package/dist/esm/person/personnummer-parser.js +136 -0
- package/dist/esm/person/personnummer-parser.js.map +7 -0
- package/dist/esm/person/swedish-coordination-number.js +173 -0
- package/dist/esm/person/swedish-coordination-number.js.map +7 -0
- package/dist/esm/person/swedish-personal-identity-number.js +175 -0
- package/dist/esm/person/swedish-personal-identity-number.js.map +7 -0
- package/dist/esm/primitive-type-info.js +1 -0
- package/dist/esm/primitive-type-info.js.map +7 -0
- package/dist/esm/primitives-defaults.js +72 -0
- package/dist/esm/primitives-defaults.js.map +7 -0
- package/dist/esm/product/adult-clothing-size.js +128 -0
- package/dist/esm/product/adult-clothing-size.js.map +7 -0
- package/dist/esm/product/adult-shoe-size.js +119 -0
- package/dist/esm/product/adult-shoe-size.js.map +7 -0
- package/dist/esm/product/aspect-ratio.js +168 -0
- package/dist/esm/product/aspect-ratio.js.map +7 -0
- package/dist/esm/product/battery-capacity.js +164 -0
- package/dist/esm/product/battery-capacity.js.map +7 -0
- package/dist/esm/product/battery-chemistry.js +239 -0
- package/dist/esm/product/battery-chemistry.js.map +7 -0
- package/dist/esm/product/camera-resolution.js +141 -0
- package/dist/esm/product/camera-resolution.js.map +7 -0
- package/dist/esm/product/child-clothing-size.js +234 -0
- package/dist/esm/product/child-clothing-size.js.map +7 -0
- package/dist/esm/product/child-shoe-size.js +180 -0
- package/dist/esm/product/child-shoe-size.js.map +7 -0
- package/dist/esm/product/clothing-fit.js +203 -0
- package/dist/esm/product/clothing-fit.js.map +7 -0
- package/dist/esm/product/clothing-gender.js +178 -0
- package/dist/esm/product/clothing-gender.js.map +7 -0
- package/dist/esm/product/clothing-season.js +182 -0
- package/dist/esm/product/clothing-season.js.map +7 -0
- package/dist/esm/product/clothing-size-system.js +11 -0
- package/dist/esm/product/clothing-size-system.js.map +7 -0
- package/dist/esm/product/clothing-size.js +126 -0
- package/dist/esm/product/clothing-size.js.map +7 -0
- package/dist/esm/product/color.js +314 -0
- package/dist/esm/product/color.js.map +7 -0
- package/dist/esm/product/display-panel-type.js +267 -0
- package/dist/esm/product/display-panel-type.js.map +7 -0
- package/dist/esm/product/electrical-phase.js +174 -0
- package/dist/esm/product/electrical-phase.js.map +7 -0
- package/dist/esm/product/energy-scale.js +11 -0
- package/dist/esm/product/energy-scale.js.map +7 -0
- package/dist/esm/product/eu-energy-efficiency-class.js +115 -0
- package/dist/esm/product/eu-energy-efficiency-class.js.map +7 -0
- package/dist/esm/product/google-product-category.js +94 -0
- package/dist/esm/product/google-product-category.js.map +7 -0
- package/dist/esm/product/gtin.js +83 -0
- package/dist/esm/product/gtin.js.map +7 -0
- package/dist/esm/product/gtin12.js +110 -0
- package/dist/esm/product/gtin12.js.map +7 -0
- package/dist/esm/product/gtin13.js +127 -0
- package/dist/esm/product/gtin13.js.map +7 -0
- package/dist/esm/product/gtin14.js +115 -0
- package/dist/esm/product/gtin14.js.map +7 -0
- package/dist/esm/product/gtin8.js +110 -0
- package/dist/esm/product/gtin8.js.map +7 -0
- package/dist/esm/product/hs-code-level.js +12 -0
- package/dist/esm/product/hs-code-level.js.map +7 -0
- package/dist/esm/product/hs-code.js +106 -0
- package/dist/esm/product/hs-code.js.map +7 -0
- package/dist/esm/product/index.js +137 -0
- package/dist/esm/product/index.js.map +7 -0
- package/dist/esm/product/ip-rating.js +146 -0
- package/dist/esm/product/ip-rating.js.map +7 -0
- package/dist/esm/product/operating-system-family.js +17 -0
- package/dist/esm/product/operating-system-family.js.map +7 -0
- package/dist/esm/product/operating-system-info.js +80 -0
- package/dist/esm/product/operating-system-info.js.map +7 -0
- package/dist/esm/product/operating-system-name.js +107 -0
- package/dist/esm/product/operating-system-name.js.map +7 -0
- package/dist/esm/product/operating-system-version.js +90 -0
- package/dist/esm/product/operating-system-version.js.map +7 -0
- package/dist/esm/product/power-source.js +298 -0
- package/dist/esm/product/power-source.js.map +7 -0
- package/dist/esm/product/processor-speed.js +139 -0
- package/dist/esm/product/processor-speed.js.map +7 -0
- package/dist/esm/product/product-extensions.js +7 -0
- package/dist/esm/product/product-extensions.js.map +7 -0
- package/dist/esm/product/product-masking.js +82 -0
- package/dist/esm/product/product-masking.js.map +7 -0
- package/dist/esm/product/ram-capacity.js +134 -0
- package/dist/esm/product/ram-capacity.js.map +7 -0
- package/dist/esm/product/refrigerant-family.js +20 -0
- package/dist/esm/product/refrigerant-family.js.map +7 -0
- package/dist/esm/product/refrigerant.js +399 -0
- package/dist/esm/product/refrigerant.js.map +7 -0
- package/dist/esm/product/screen-resolution.js +177 -0
- package/dist/esm/product/screen-resolution.js.map +7 -0
- package/dist/esm/product/screen-size.js +164 -0
- package/dist/esm/product/screen-size.js.map +7 -0
- package/dist/esm/product/shoe-size-system.js +11 -0
- package/dist/esm/product/shoe-size-system.js.map +7 -0
- package/dist/esm/product/shoe-size.js +118 -0
- package/dist/esm/product/shoe-size.js.map +7 -0
- package/dist/esm/product/storage-capacity.js +139 -0
- package/dist/esm/product/storage-capacity.js.map +7 -0
- package/dist/esm/product/storage-media-type.js +251 -0
- package/dist/esm/product/storage-media-type.js.map +7 -0
- package/dist/esm/property/index.js +19 -0
- package/dist/esm/property/index.js.map +7 -0
- package/dist/esm/property/swedish-property-designation.js +159 -0
- package/dist/esm/property/swedish-property-designation.js.map +7 -0
- package/dist/esm/property/swedish-property-taxation-code.js +198 -0
- package/dist/esm/property/swedish-property-taxation-code.js.map +7 -0
- package/dist/esm/register-default-text-scanners.js +270 -0
- package/dist/esm/register-default-text-scanners.js.map +7 -0
- package/dist/esm/sample-data/index.js +355 -0
- package/dist/esm/sample-data/index.js.map +7 -0
- package/dist/esm/text-scanning/index.js +21 -0
- package/dist/esm/text-scanning/index.js.map +7 -0
- package/dist/esm/text-scanning/text-candidate-category.js +15 -0
- package/dist/esm/text-scanning/text-candidate-category.js.map +7 -0
- package/dist/esm/text-scanning/text-candidate.js +55 -0
- package/dist/esm/text-scanning/text-candidate.js.map +7 -0
- package/dist/esm/text-scanning/text-match-confidence.js +23 -0
- package/dist/esm/text-scanning/text-match-confidence.js.map +7 -0
- package/dist/esm/text-scanning/text-scan-helpers.js +78 -0
- package/dist/esm/text-scanning/text-scan-helpers.js.map +7 -0
- package/dist/esm/text-scanning/text-scan-result.js +313 -0
- package/dist/esm/text-scanning/text-scan-result.js.map +7 -0
- package/dist/esm/text-scanning/text-scanner-options.js +9 -0
- package/dist/esm/text-scanning/text-scanner-options.js.map +7 -0
- package/dist/esm/text-scanning/text-scanner.js +40 -0
- package/dist/esm/text-scanning/text-scanner.js.map +7 -0
- package/dist/esm/validation/index.js +9 -0
- package/dist/esm/validation/index.js.map +7 -0
- package/dist/esm/validation/validation-error-reason.js +33 -0
- package/dist/esm/validation/validation-error-reason.js.map +7 -0
- package/dist/esm/validation/validation-issue.js +23 -0
- package/dist/esm/validation/validation-issue.js.map +7 -0
- package/dist/esm/validation/validation-result.js +32 -0
- package/dist/esm/validation/validation-result.js.map +7 -0
- package/dist/esm/vehicle/boat-ce-design-category.js +180 -0
- package/dist/esm/vehicle/boat-ce-design-category.js.map +7 -0
- package/dist/esm/vehicle/boat-hull-material.js +202 -0
- package/dist/esm/vehicle/boat-hull-material.js.map +7 -0
- package/dist/esm/vehicle/body-type.js +305 -0
- package/dist/esm/vehicle/body-type.js.map +7 -0
- package/dist/esm/vehicle/bolt-pattern.js +130 -0
- package/dist/esm/vehicle/bolt-pattern.js.map +7 -0
- package/dist/esm/vehicle/drivetrain-type.js +180 -0
- package/dist/esm/vehicle/drivetrain-type.js.map +7 -0
- package/dist/esm/vehicle/emission-rate.js +174 -0
- package/dist/esm/vehicle/emission-rate.js.map +7 -0
- package/dist/esm/vehicle/energy-consumption.js +230 -0
- package/dist/esm/vehicle/energy-consumption.js.map +7 -0
- package/dist/esm/vehicle/engine-displacement.js +149 -0
- package/dist/esm/vehicle/engine-displacement.js.map +7 -0
- package/dist/esm/vehicle/engine-power.js +191 -0
- package/dist/esm/vehicle/engine-power.js.map +7 -0
- package/dist/esm/vehicle/eu-type-approval-number.js +176 -0
- package/dist/esm/vehicle/eu-type-approval-number.js.map +7 -0
- package/dist/esm/vehicle/eu-vehicle-category.js +147 -0
- package/dist/esm/vehicle/eu-vehicle-category.js.map +7 -0
- package/dist/esm/vehicle/euro-emission-class.js +293 -0
- package/dist/esm/vehicle/euro-emission-class.js.map +7 -0
- package/dist/esm/vehicle/fuel-consumption-norm.js +186 -0
- package/dist/esm/vehicle/fuel-consumption-norm.js.map +7 -0
- package/dist/esm/vehicle/fuel-consumption.js +261 -0
- package/dist/esm/vehicle/fuel-consumption.js.map +7 -0
- package/dist/esm/vehicle/fuel-type.js +268 -0
- package/dist/esm/vehicle/fuel-type.js.map +7 -0
- package/dist/esm/vehicle/index.js +134 -0
- package/dist/esm/vehicle/index.js.map +7 -0
- package/dist/esm/vehicle/odometer-reading.js +145 -0
- package/dist/esm/vehicle/odometer-reading.js.map +7 -0
- package/dist/esm/vehicle/operating-hours.js +154 -0
- package/dist/esm/vehicle/operating-hours.js.map +7 -0
- package/dist/esm/vehicle/suspension-type.js +292 -0
- package/dist/esm/vehicle/suspension-type.js.map +7 -0
- package/dist/esm/vehicle/swedish-driving-license-category.js +384 -0
- package/dist/esm/vehicle/swedish-driving-license-category.js.map +7 -0
- package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js +12 -0
- package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
- package/dist/esm/vehicle/swedish-eco-vehicle-classification.js +212 -0
- package/dist/esm/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
- package/dist/esm/vehicle/swedish-vehicle-registration-number.js +176 -0
- package/dist/esm/vehicle/swedish-vehicle-registration-number.js.map +7 -0
- package/dist/esm/vehicle/swedish-vehicle-status.js +152 -0
- package/dist/esm/vehicle/swedish-vehicle-status.js.map +7 -0
- package/dist/esm/vehicle/swedish-vehicle-type.js +262 -0
- package/dist/esm/vehicle/swedish-vehicle-type.js.map +7 -0
- package/dist/esm/vehicle/tire-dimension.js +186 -0
- package/dist/esm/vehicle/tire-dimension.js.map +7 -0
- package/dist/esm/vehicle/tire-type.js +208 -0
- package/dist/esm/vehicle/tire-type.js.map +7 -0
- package/dist/esm/vehicle/track-type.js +168 -0
- package/dist/esm/vehicle/track-type.js.map +7 -0
- package/dist/esm/vehicle/transmission-type.js +238 -0
- package/dist/esm/vehicle/transmission-type.js.map +7 -0
- package/dist/esm/vehicle/vehicle-extensions.js +15 -0
- package/dist/esm/vehicle/vehicle-extensions.js.map +7 -0
- package/dist/esm/vehicle/vehicle-identification-number.js +248 -0
- package/dist/esm/vehicle/vehicle-identification-number.js.map +7 -0
- package/dist/esm/vehicle/vehicle-masking.js +48 -0
- package/dist/esm/vehicle/vehicle-masking.js.map +7 -0
- package/dist/esm/vehicle/wheel-rim-dimension.js +163 -0
- package/dist/esm/vehicle/wheel-rim-dimension.js.map +7 -0
- package/dist/esm/web/email-address.js +522 -0
- package/dist/esm/web/email-address.js.map +7 -0
- package/dist/esm/web/index.js +16 -0
- package/dist/esm/web/index.js.map +7 -0
- package/dist/esm/web/url.js +333 -0
- package/dist/esm/web/url.js.map +7 -0
- package/dist/types/frequency-CweGfJFS.d.cts +329 -0
- package/dist/types/frequency-DdOMV6Sw.d.ts +329 -0
- package/dist/{index.d.cts → types/index.d.cts} +9 -0
- package/dist/{index.d.ts → types/index.d.ts} +9 -0
- package/dist/types/length-CceXIJYY.d.ts +354 -0
- package/dist/types/length-XRL5Eg7F.d.cts +354 -0
- package/dist/types/measurement/index.d.cts +136 -0
- package/dist/types/measurement/index.d.ts +136 -0
- package/dist/types/product/index.d.cts +1239 -0
- package/dist/types/product/index.d.ts +1239 -0
- package/dist/types/screen-size-BD4t3wzb.d.cts +473 -0
- package/dist/types/screen-size-DUmjNjxG.d.ts +473 -0
- package/dist/{text-scanning → types/text-scanning}/index.d.cts +50 -0
- package/dist/{text-scanning → types/text-scanning}/index.d.ts +50 -0
- package/dist/types/vehicle/index.d.cts +798 -0
- package/dist/types/vehicle/index.d.ts +798 -0
- package/dist/types/volume-CFA4e3dc.d.cts +175 -0
- package/dist/types/volume-DGLPQypt.d.ts +175 -0
- package/dist/types/weight-B30-Hzxu.d.ts +1057 -0
- package/dist/types/weight-C5C7OuV_.d.cts +1057 -0
- package/dist/types/wheel-rim-dimension-CVCmLASl.d.ts +699 -0
- package/dist/types/wheel-rim-dimension-CdkDrzad.d.cts +699 -0
- package/package.json +100 -65
- package/dist/banking/index.cjs +0 -6491
- package/dist/banking/index.cjs.map +0 -1
- package/dist/banking/index.js +0 -6464
- package/dist/banking/index.js.map +0 -1
- package/dist/contact/index.cjs +0 -6678
- package/dist/contact/index.cjs.map +0 -1
- package/dist/contact/index.js +0 -6586
- package/dist/contact/index.js.map +0 -1
- package/dist/finance/index.cjs +0 -3592
- package/dist/finance/index.cjs.map +0 -1
- package/dist/finance/index.js +0 -3584
- package/dist/finance/index.js.map +0 -1
- package/dist/geography/index.cjs +0 -4227
- package/dist/geography/index.cjs.map +0 -1
- package/dist/geography/index.js +0 -4202
- package/dist/geography/index.js.map +0 -1
- package/dist/index.cjs +0 -14087
- package/dist/index.cjs.map +0 -1
- package/dist/index.js +0 -13868
- package/dist/index.js.map +0 -1
- package/dist/organization/index.cjs +0 -2376
- package/dist/organization/index.cjs.map +0 -1
- package/dist/organization/index.js +0 -2346
- package/dist/organization/index.js.map +0 -1
- package/dist/person/index.cjs +0 -1144
- package/dist/person/index.cjs.map +0 -1
- package/dist/person/index.js +0 -1125
- package/dist/person/index.js.map +0 -1
- package/dist/property/index.cjs +0 -487
- package/dist/property/index.cjs.map +0 -1
- package/dist/property/index.js +0 -480
- package/dist/property/index.js.map +0 -1
- package/dist/sample-data/index.cjs +0 -12310
- package/dist/sample-data/index.cjs.map +0 -1
- package/dist/sample-data/index.js +0 -12302
- package/dist/sample-data/index.js.map +0 -1
- package/dist/text-scanning/index.cjs +0 -10414
- package/dist/text-scanning/index.cjs.map +0 -1
- package/dist/text-scanning/index.js +0 -10406
- package/dist/text-scanning/index.js.map +0 -1
- package/dist/validation/index.cjs +0 -83
- package/dist/validation/index.cjs.map +0 -1
- package/dist/validation/index.js +0 -79
- package/dist/validation/index.js.map +0 -1
- package/dist/web/index.cjs +0 -3994
- package/dist/web/index.cjs.map +0 -1
- package/dist/web/index.js +0 -3987
- package/dist/web/index.js.map +0 -1
- /package/dist/{banking → types/banking}/index.d.cts +0 -0
- /package/dist/{banking → types/banking}/index.d.ts +0 -0
- /package/dist/{contact → types/contact}/index.d.cts +0 -0
- /package/dist/{contact → types/contact}/index.d.ts +0 -0
- /package/dist/{country-BhD51LDL.d.cts → types/country-BhD51LDL.d.cts} +0 -0
- /package/dist/{country-p0n0EVQ9.d.ts → types/country-p0n0EVQ9.d.ts} +0 -0
- /package/dist/{finance → types/finance}/index.d.cts +0 -0
- /package/dist/{finance → types/finance}/index.d.ts +0 -0
- /package/dist/{geography → types/geography}/index.d.cts +0 -0
- /package/dist/{geography → types/geography}/index.d.ts +0 -0
- /package/dist/{isin-EeVPpNWu.d.ts → types/isin-EeVPpNWu.d.ts} +0 -0
- /package/dist/{isin-ZlQLBVm8.d.cts → types/isin-ZlQLBVm8.d.cts} +0 -0
- /package/dist/{organization → types/organization}/index.d.cts +0 -0
- /package/dist/{organization → types/organization}/index.d.ts +0 -0
- /package/dist/{person → types/person}/index.d.cts +0 -0
- /package/dist/{person → types/person}/index.d.ts +0 -0
- /package/dist/{person-full-name-Cmc9Ynuc.d.cts → types/person-full-name-Cmc9Ynuc.d.cts} +0 -0
- /package/dist/{person-full-name-D6Hbsab6.d.ts → types/person-full-name-D6Hbsab6.d.ts} +0 -0
- /package/dist/{phone-number-C24--ggy.d.ts → types/phone-number-C24--ggy.d.ts} +0 -0
- /package/dist/{phone-number-DZ-YxCQQ.d.cts → types/phone-number-DZ-YxCQQ.d.cts} +0 -0
- /package/dist/{property → types/property}/index.d.cts +0 -0
- /package/dist/{property → types/property}/index.d.ts +0 -0
- /package/dist/{sample-data → types/sample-data}/index.d.cts +0 -0
- /package/dist/{sample-data → types/sample-data}/index.d.ts +0 -0
- /package/dist/{swedish-address-DNC3ftRF.d.cts → types/swedish-address-DNC3ftRF.d.cts} +0 -0
- /package/dist/{swedish-address-GMzjqgxb.d.ts → types/swedish-address-GMzjqgxb.d.ts} +0 -0
- /package/dist/{swedish-bank-account-holder-name-BFJ8h1aO.d.cts → types/swedish-bank-account-holder-name-BFJ8h1aO.d.cts} +0 -0
- /package/dist/{swedish-bank-account-holder-name-CAAru07F.d.ts → types/swedish-bank-account-holder-name-CAAru07F.d.ts} +0 -0
- /package/dist/{swedish-municipality-DlUS7g7h.d.cts → types/swedish-municipality-DlUS7g7h.d.cts} +0 -0
- /package/dist/{swedish-municipality-nDRHYRAd.d.ts → types/swedish-municipality-nDRHYRAd.d.ts} +0 -0
- /package/dist/{swedish-organization-name-D7NvERxA.d.cts → types/swedish-organization-name-D7NvERxA.d.cts} +0 -0
- /package/dist/{swedish-organization-name-rR0Q836C.d.ts → types/swedish-organization-name-rR0Q836C.d.ts} +0 -0
- /package/dist/{swedish-organization-number-Bcj7V_lh.d.cts → types/swedish-organization-number-Bcj7V_lh.d.cts} +0 -0
- /package/dist/{swedish-organization-number-DM8dpXwR.d.ts → types/swedish-organization-number-DM8dpXwR.d.ts} +0 -0
- /package/dist/{swedish-organization-type-CZOdETwG.d.cts → types/swedish-organization-type-CZOdETwG.d.cts} +0 -0
- /package/dist/{swedish-organization-type-CZOdETwG.d.ts → types/swedish-organization-type-CZOdETwG.d.ts} +0 -0
- /package/dist/{swedish-personal-identity-number-BiIg4io3.d.ts → types/swedish-personal-identity-number-BiIg4io3.d.ts} +0 -0
- /package/dist/{swedish-personal-identity-number-Cp9Coz55.d.cts → types/swedish-personal-identity-number-Cp9Coz55.d.cts} +0 -0
- /package/dist/{swedish-property-designation-BM-gdd9x.d.ts → types/swedish-property-designation-BM-gdd9x.d.ts} +0 -0
- /package/dist/{swedish-property-designation-BaHXufqV.d.cts → types/swedish-property-designation-BaHXufqV.d.cts} +0 -0
- /package/dist/{swedish-sni-code-Ccsswpni.d.ts → types/swedish-sni-code-Ccsswpni.d.ts} +0 -0
- /package/dist/{swedish-sni-code-CuJFyM6l.d.cts → types/swedish-sni-code-CuJFyM6l.d.cts} +0 -0
- /package/dist/{swedish-swish-number-CL6Gx_h3.d.cts → types/swedish-swish-number-CL6Gx_h3.d.cts} +0 -0
- /package/dist/{swedish-swish-number-DDG3mNDg.d.ts → types/swedish-swish-number-DDG3mNDg.d.ts} +0 -0
- /package/dist/{text-candidate-qg2bD9PY.d.cts → types/text-candidate-qg2bD9PY.d.cts} +0 -0
- /package/dist/{text-candidate-qg2bD9PY.d.ts → types/text-candidate-qg2bD9PY.d.ts} +0 -0
- /package/dist/{validation → types/validation}/index.d.cts +0 -0
- /package/dist/{validation → types/validation}/index.d.ts +0 -0
- /package/dist/{web → types/web}/index.d.cts +0 -0
- /package/dist/{web → types/web}/index.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/internal/input-sanitization.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/primitives-defaults.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts","../../src/validation/validation-error-reason.ts","../../src/banking/iban.ts","../../src/finance/currency.ts","../../src/geography/geo-coordinate.ts","../../src/geography/language.ts","../../src/geography/continent.ts","../../src/geography/country-data.ts","../../src/geography/country-coordinates.ts","../../src/geography/country-capital.ts","../../src/geography/country-capitals.ts","../../src/geography/country-metadata.ts","../../src/geography/country.ts","../../src/banking/bic.ts","../../src/internal/luhn.ts","../../src/banking/swedish-bankgiro-number.ts","../../src/banking/swedish-postgiro-number.ts","../../src/banking/swedish-ocr-reference-number.ts","../../src/banking/swedish-bank.ts","../../src/banking/bank-resolver.ts","../../src/banking/swedish-bank-clearing-number.ts","../../src/banking/swedish-bank-account.ts","../../src/person/person-name-normalization.ts","../../src/person/person-given-name.ts","../../src/person/person-family-name.ts","../../src/person/person-full-name.ts","../../src/organization/organization-validation-utils.ts","../../src/organization/swedish-organization-name.ts","../../src/banking/swedish-bank-account-holder-name.ts","../../src/contact/phone-calling-code.ts","../../src/contact/phone-number.ts","../../src/banking/swedish-swish-number.ts","../../src/banking/swedish-banking-number.ts"],"names":["prefix","MAX_INPUT_LENGTH","BY_KEY","BY_NAME","parseInt4","collapseWhitespace","capitalizeWord","ALL","bg","pg"],"mappings":"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J,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EAC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,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC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AA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AA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","file":"index.js","sourcesContent":["/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n","/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepAsciiAlphanumericUppercase, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nconst NORMALIZED_PATTERN = /^[A-Z]{2}\\d{2}[A-Z0-9]{1,30}$/;\n\nconst COUNTRY_IBAN_LENGTHS: Readonly<Record<string, number>> = Object.freeze({\n AL: 28,\n AD: 24,\n AT: 20,\n AZ: 28,\n BE: 16,\n BA: 20,\n BG: 22,\n BH: 22,\n BR: 29,\n CH: 21,\n CY: 28,\n CZ: 24,\n DE: 22,\n DK: 18,\n DO: 28,\n EE: 20,\n ES: 24,\n FI: 18,\n FO: 18,\n FR: 27,\n GB: 22,\n GE: 22,\n GI: 23,\n GL: 18,\n GR: 27,\n GT: 28,\n HR: 21,\n HU: 28,\n IE: 22,\n IL: 23,\n IS: 26,\n IT: 27,\n IQ: 23,\n JO: 30,\n KW: 30,\n KZ: 20,\n LB: 28,\n LC: 32,\n LI: 21,\n LT: 20,\n LU: 20,\n LV: 21,\n MC: 27,\n MD: 24,\n ME: 22,\n MK: 19,\n MR: 27,\n MT: 31,\n NL: 18,\n NO: 15,\n PK: 24,\n PL: 28,\n PS: 29,\n PT: 25,\n QA: 29,\n RO: 24,\n RS: 22,\n SA: 24,\n SC: 31,\n SE: 24,\n SI: 19,\n SK: 24,\n SM: 27,\n ST: 25,\n SV: 28,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n VA: 22,\n VG: 24,\n XK: 20,\n});\n\n/**\n * The International Bank Account Number (ISO 13616), e.g. `SE4550000000058398257466`.\n * Validated using MOD-97 check digits.\n */\nexport class Iban {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"IBAN\",\n localizedName: \"IBAN\",\n emoji: \"\\u{1F3E6}\",\n sources: Object.freeze([\n \"https://www.iso.org/standard/81090.html\",\n \"https://www.iban.com/\",\n \"https://en.wikipedia.org/wiki/International_Bank_Account_Number\",\n ]),\n });\n\n static readonly displayName = \"IBAN\";\n static readonly displayNameShort = \"IBAN\";\n\n /** Normalized IBAN without spaces, e.g. `SE4550000000058398257466`. */\n readonly value: string;\n /** ISO 3166-1 alpha-2 country code, e.g. `SE`. */\n readonly countryCode: string;\n /** Display form grouped in blocks of four characters, e.g. `SE45 5000 0000 0583 9825 7466`. */\n readonly formatted: string;\n\n private constructor(value: string, countryCode: string, formatted: string) {\n this.value = value;\n this.countryCode = countryCode;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): Iban | null;\n static tryParse(input: string | null | undefined, countryCode: string): Iban | null;\n static tryParse(input: string | null | undefined, countryCode?: string): Iban | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n if (!isStructurallyValid(normalized)) return null;\n if (!hasValidCheckDigits(normalized)) return null;\n\n const cc = normalized.slice(0, 2);\n if (countryCode !== undefined && cc !== countryCode.toUpperCase()) return null;\n return new Iban(normalized, cc, formatValue(normalized));\n }\n\n static parse(input: string): Iban {\n const r = Iban.tryParse(input);\n if (r === null) throw new Error(\"Invalid IBAN.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Iban.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Iban.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Iban.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${Iban.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${Iban.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = keepAsciiAlphanumericUppercase(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (normalized.length < 15 || normalized.length > 34)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"IBAN must be 15–34 characters.\",\n \"IBAN måste vara 15–34 tecken.\",\n );\n\n if (!NORMALIZED_PATTERN.test(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"IBAN has an invalid format.\",\n \"IBAN har ett ogiltigt format.\",\n );\n\n const cc = normalized.slice(0, 2);\n const expectedLength = COUNTRY_IBAN_LENGTHS[cc];\n if (expectedLength === undefined)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown IBAN country code.\",\n \"Okänd IBAN-landskod.\",\n );\n\n if (normalized.length !== expectedLength)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLengthForCountry,\n \"IBAN length is wrong for the specified country.\",\n \"IBAN-längden stämmer inte för det angivna landet.\",\n );\n\n if (!hasValidCheckDigits(normalized))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid IBAN check digits.\",\n \"Ogiltiga IBAN-kontrollsiffror.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Iban>[] {\n if (!text) return [];\n const out: TextCandidate<Iban>[] = [];\n const re = /\\b[A-Z]{2}\\d{2}\\s?[A-Z0-9]{4}[\\sA-Z0-9]{6,30}\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = Iban.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<Iban>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Iban\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskIban(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Iban | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: Iban | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction isStructurallyValid(normalized: string): boolean {\n if (normalized.length < 15 || normalized.length > 34) return false;\n if (!NORMALIZED_PATTERN.test(normalized)) return false;\n const cc = normalized.slice(0, 2);\n const expected = COUNTRY_IBAN_LENGTHS[cc];\n if (expected === undefined) return false;\n if (normalized.length !== expected) return false;\n return true;\n}\n\n/** ISO 7064 MOD-97-10: rotate first 4 chars to end, A=10..Z=35, remainder must be 1. */\nfunction hasValidCheckDigits(normalized: string): boolean {\n let remainder = 0;\n const len = normalized.length;\n for (let i = 4; i < len + 4; i++) {\n const c = normalized.charCodeAt(i % len);\n if (c >= 0x30 && c <= 0x39) {\n remainder = (remainder * 10 + (c - 0x30)) % 97;\n } else {\n const value = c - 0x41 + 10;\n const tens = Math.floor(value / 10);\n const ones = value % 10;\n remainder = (remainder * 10 + tens) % 97;\n remainder = (remainder * 10 + ones) % 97;\n }\n }\n return remainder === 1;\n}\n\nfunction formatValue(normalized: string): string {\n const parts: string[] = [];\n for (let i = 0; i < normalized.length; i += 4) {\n parts.push(normalized.slice(i, i + 4));\n }\n return parts.join(\" \");\n}\n\n/**\n * Returns a masked IBAN preserving the country code and check digits,\n * e.g. `SE45 **** **** **** **** ****`.\n */\nexport function maskIban(iban: Iban): string {\n const formatted = iban.formatted;\n const firstSpace = formatted.indexOf(\" \");\n if (firstSpace < 0) {\n const prefix = formatted.slice(0, Math.min(4, formatted.length));\n return prefix + \"*\".repeat(Math.max(0, formatted.length - 4));\n }\n const prefix = formatted.slice(0, firstSpace);\n const rest = formatted.slice(firstSpace + 1);\n let masked = \"\";\n for (const ch of rest) masked += ch === \" \" ? \" \" : \"*\";\n return `${prefix} ${masked}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n// `geography/country.ts` imports this module for its currency accessors. Both\n// directions are only used inside function bodies, never at module-evaluation\n// time, so the cycle resolves safely under ESM.\nimport { Country } from \"../geography/country.js\";\n\ninterface CurrencyRow {\n code: string;\n en: string;\n sv: string;\n symbol: string;\n decimalPlaces: number;\n}\n\nconst KNOWN_CURRENCIES: readonly CurrencyRow[] = [\n { code: \"SEK\", en: \"Swedish krona\", sv: \"Svensk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"NOK\", en: \"Norwegian krone\", sv: \"Norsk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"DKK\", en: \"Danish krone\", sv: \"Dansk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"ISK\", en: \"Icelandic króna\", sv: \"Isländsk krona\", symbol: \"kr\", decimalPlaces: 0 },\n { code: \"EUR\", en: \"Euro\", sv: \"Euro\", symbol: \"€\", decimalPlaces: 2 },\n {\n code: \"USD\",\n en: \"United States dollar\",\n sv: \"Amerikansk dollar\",\n symbol: \"$\",\n decimalPlaces: 2,\n },\n { code: \"GBP\", en: \"Pound sterling\", sv: \"Brittiskt pund\", symbol: \"£\", decimalPlaces: 2 },\n { code: \"CHF\", en: \"Swiss franc\", sv: \"Schweizisk franc\", symbol: \"CHF\", decimalPlaces: 2 },\n { code: \"JPY\", en: \"Japanese yen\", sv: \"Japansk yen\", symbol: \"¥\", decimalPlaces: 0 },\n { code: \"CNY\", en: \"Chinese yuan\", sv: \"Kinesisk yuan\", symbol: \"¥\", decimalPlaces: 2 },\n { code: \"CAD\", en: \"Canadian dollar\", sv: \"Kanadensisk dollar\", symbol: \"CA$\", decimalPlaces: 2 },\n { code: \"AUD\", en: \"Australian dollar\", sv: \"Australisk dollar\", symbol: \"A$\", decimalPlaces: 2 },\n {\n code: \"NZD\",\n en: \"New Zealand dollar\",\n sv: \"Nyzeeländsk dollar\",\n symbol: \"NZ$\",\n decimalPlaces: 2,\n },\n { code: \"PLN\", en: \"Polish złoty\", sv: \"Polsk zloty\", symbol: \"zł\", decimalPlaces: 2 },\n { code: \"CZK\", en: \"Czech koruna\", sv: \"Tjeckisk koruna\", symbol: \"Kč\", decimalPlaces: 2 },\n { code: \"HUF\", en: \"Hungarian forint\", sv: \"Ungersk forint\", symbol: \"Ft\", decimalPlaces: 2 },\n { code: \"RON\", en: \"Romanian leu\", sv: \"Rumänsk leu\", symbol: \"lei\", decimalPlaces: 2 },\n { code: \"BGN\", en: \"Bulgarian lev\", sv: \"Bulgarisk lev\", symbol: \"лв\", decimalPlaces: 2 },\n { code: \"HRK\", en: \"Croatian kuna\", sv: \"Kroatisk kuna\", symbol: \"kn\", decimalPlaces: 2 },\n { code: \"TRY\", en: \"Turkish lira\", sv: \"Turkisk lira\", symbol: \"₺\", decimalPlaces: 2 },\n { code: \"RUB\", en: \"Russian ruble\", sv: \"Rysk rubel\", symbol: \"₽\", decimalPlaces: 2 },\n { code: \"INR\", en: \"Indian rupee\", sv: \"Indisk rupie\", symbol: \"₹\", decimalPlaces: 2 },\n { code: \"BRL\", en: \"Brazilian real\", sv: \"Brasiliansk real\", symbol: \"R$\", decimalPlaces: 2 },\n { code: \"ZAR\", en: \"South African rand\", sv: \"Sydafrikansk rand\", symbol: \"R\", decimalPlaces: 2 },\n { code: \"MXN\", en: \"Mexican peso\", sv: \"Mexikansk peso\", symbol: \"MX$\", decimalPlaces: 2 },\n {\n code: \"SGD\",\n en: \"Singapore dollar\",\n sv: \"Singaporiansk dollar\",\n symbol: \"S$\",\n decimalPlaces: 2,\n },\n { code: \"HKD\", en: \"Hong Kong dollar\", sv: \"Hongkongdollar\", symbol: \"HK$\", decimalPlaces: 2 },\n { code: \"KRW\", en: \"South Korean won\", sv: \"Sydkoreansk won\", symbol: \"₩\", decimalPlaces: 0 },\n { code: \"THB\", en: \"Thai baht\", sv: \"Thailändsk baht\", symbol: \"฿\", decimalPlaces: 2 },\n {\n code: \"TWD\",\n en: \"New Taiwan dollar\",\n sv: \"Taiwanesisk dollar\",\n symbol: \"NT$\",\n decimalPlaces: 2,\n },\n { code: \"ILS\", en: \"Israeli new shekel\", sv: \"Israelisk shekel\", symbol: \"₪\", decimalPlaces: 2 },\n {\n code: \"AED\",\n en: \"United Arab Emirates dirham\",\n sv: \"Emiratisk dirham\",\n symbol: \"د.إ\",\n decimalPlaces: 2,\n },\n { code: \"SAR\", en: \"Saudi riyal\", sv: \"Saudisk riyal\", symbol: \"﷼\", decimalPlaces: 2 },\n { code: \"PHP\", en: \"Philippine peso\", sv: \"Filippinsk peso\", symbol: \"₱\", decimalPlaces: 2 },\n { code: \"IDR\", en: \"Indonesian rupiah\", sv: \"Indonesisk rupiah\", symbol: \"Rp\", decimalPlaces: 2 },\n { code: \"MYR\", en: \"Malaysian ringgit\", sv: \"Malaysisk ringgit\", symbol: \"RM\", decimalPlaces: 2 },\n { code: \"VND\", en: \"Vietnamese đồng\", sv: \"Vietnamesisk dong\", symbol: \"₫\", decimalPlaces: 0 },\n { code: \"UAH\", en: \"Ukrainian hryvnia\", sv: \"Ukrainsk hryvnia\", symbol: \"₴\", decimalPlaces: 2 },\n { code: \"EGP\", en: \"Egyptian pound\", sv: \"Egyptiskt pund\", symbol: \"E£\", decimalPlaces: 2 },\n { code: \"NGN\", en: \"Nigerian naira\", sv: \"Nigeriansk naira\", symbol: \"₦\", decimalPlaces: 2 },\n { code: \"KES\", en: \"Kenyan shilling\", sv: \"Kenyansk shilling\", symbol: \"KSh\", decimalPlaces: 2 },\n { code: \"COP\", en: \"Colombian peso\", sv: \"Colombiansk peso\", symbol: \"CO$\", decimalPlaces: 2 },\n { code: \"ARS\", en: \"Argentine peso\", sv: \"Argentinsk peso\", symbol: \"AR$\", decimalPlaces: 2 },\n { code: \"CLP\", en: \"Chilean peso\", sv: \"Chilensk peso\", symbol: \"CL$\", decimalPlaces: 0 },\n { code: \"PEN\", en: \"Peruvian sol\", sv: \"Peruansk sol\", symbol: \"S/.\", decimalPlaces: 2 },\n];\n\n/**\n * An ISO 4217 currency identified by its three-letter code (e.g. `SEK`, `EUR`).\n */\nexport class Currency {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Currency\",\n localizedName: \"Valuta\",\n emoji: \"\\u{1F4B1}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-4217-currency-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_4217\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly symbol: string;\n readonly decimalPlaces: number;\n\n private constructor(row: CurrencyRow) {\n this.code = row.code;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.symbol = row.symbol;\n this.decimalPlaces = row.decimalPlaces;\n }\n\n /** @internal */\n static _fromRow(row: CurrencyRow): Currency {\n return new Currency(row);\n }\n\n /** Display name in current UI culture (Swedish or English). */\n /**\n * The currency name as used in its issuing country. Falls back to\n * {@link englishName} when no issuing country is known.\n */\n get nativeName(): string {\n const country = Country.all.find(\n (c) => c.currencyCode != null && c.currencyCode.toUpperCase() === this.code.toUpperCase(),\n );\n if (country === undefined) return this.englishName;\n return country.nativeName === country.englishName ? this.englishName : this.localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): Currency | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n const byCode = BY_CODE.get(trimmed.toUpperCase());\n if (byCode) return byCode;\n const byName = BY_NAME.get(trimmed.toLowerCase());\n if (byName) return byName;\n return null;\n }\n\n static parse(input: string): Currency {\n const r = Currency.tryParse(input);\n if (r === null) throw new Error(\"Unknown currency.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Currency.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Currency.normalize(input) === input;\n }\n\n /** All known currencies. */\n static get all(): readonly Currency[] {\n return ALL_CURRENCIES;\n }\n\n /** @internal Lookup by symbol. */\n static tryParseSymbol(symbol: string | null | undefined): Currency | null {\n if (symbol == null || symbol.trim() === \"\") return null;\n return BY_SYMBOL.get(symbol.trim().toLowerCase()) ?? null;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Currency | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Currency | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n static get SEK(): Currency {\n return BY_CODE.get(\"SEK\")!;\n }\n static get EUR(): Currency {\n return BY_CODE.get(\"EUR\")!;\n }\n static get USD(): Currency {\n return BY_CODE.get(\"USD\")!;\n }\n static get NOK(): Currency {\n return BY_CODE.get(\"NOK\")!;\n }\n static get DKK(): Currency {\n return BY_CODE.get(\"DKK\")!;\n }\n static get GBP(): Currency {\n return BY_CODE.get(\"GBP\")!;\n }\n}\n\nconst ALL_CURRENCIES: readonly Currency[] = KNOWN_CURRENCIES.map((r) => Currency._fromRow(r));\n\nconst BY_CODE = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) BY_CODE.set(c.code.toUpperCase(), c);\n\nconst BY_NAME = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n BY_NAME.set(c.englishName.toLowerCase(), c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n}\n\nconst BY_SYMBOL = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n if (!BY_SYMBOL.has(c.symbol.toLowerCase())) BY_SYMBOL.set(c.symbol.toLowerCase(), c);\n}\n\n/**\n * Returns the primary currency for a country, or `null` when no association\n * is known. Resolves the country's first `currencyCodes` entry to a\n * {@link Currency} instance.\n */\nexport function getCurrencyForCountry(country: Country): Currency | null {\n const codes = country.currencyCodes;\n if (codes.length === 0) return null;\n const first = codes[0];\n if (first == null) return null;\n return Currency.tryParse(first);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\nexport interface GeoCoordinateFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A geographic coordinate pair (latitude, longitude) in the WGS 84 reference\n * system (`geografisk koordinat`). Parsing accepts decimal degrees, degrees\n * with cardinal directions, DMS, and DDM formats. Swedish cardinal letters Ö\n * (east) and V (west) are accepted alongside E and W.\n */\nexport class GeoCoordinate {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Geographic Coordinate\",\n localizedName: \"Geografisk koordinat\",\n emoji: \"\\u{1F4CD}\",\n sources: Object.freeze([\n \"https://en.wikipedia.org/wiki/Geographic_coordinate_system\",\n \"https://epsg.io/4326\",\n ]),\n });\n\n readonly latitude: number;\n readonly longitude: number;\n\n private constructor(latitude: number, longitude: number) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n\n /** @internal */\n static _unsafe(latitude: number, longitude: number): GeoCoordinate {\n return new GeoCoordinate(latitude, longitude);\n }\n\n get latitudeDirection(): \"N\" | \"S\" {\n return this.latitude >= 0 ? \"N\" : \"S\";\n }\n\n get longitudeDirection(): \"E\" | \"W\" {\n return this.longitude >= 0 ? \"E\" : \"W\";\n }\n\n /** Creates a coordinate from explicit latitude and longitude values. */\n static create(latitude: number, longitude: number): GeoCoordinate {\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new RangeError(\"Latitude must be between -90 and 90.\");\n }\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new RangeError(\"Longitude must be between -180 and 180.\");\n }\n return GeoCoordinate._unsafe(latitude, longitude);\n }\n\n static tryParse(input: string | null | undefined): GeoCoordinate | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > 200) return null;\n\n let m: RegExpMatchArray | null;\n\n m = sanitized.match(DECIMAL_DEGREES);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(SPACE_SEPARATED);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(DECIMAL_CARDINAL_SUFFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(CARDINAL_PREFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(DMS);\n if (m) return tryDms(m.groups!);\n\n m = sanitized.match(DDM);\n if (m) return tryDdm(m.groups!);\n\n return null;\n }\n\n static parse(input: string): GeoCoordinate {\n const r = GeoCoordinate.tryParse(input);\n if (r === null) throw new Error(\"Invalid geographic coordinate.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return GeoCoordinate.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && GeoCoordinate.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return `${formatNumber(this.latitude)}, ${formatNumber(this.longitude)}`;\n }\n\n toString(): string {\n return `${formatNumber(Math.abs(this.latitude))}°${this.latitudeDirection}, ${formatNumber(Math.abs(this.longitude))}°${this.longitudeDirection}`;\n }\n\n /** Returns the coordinate in degrees, minutes, and seconds, e.g. `59°19'45.5\"N, 18°4'7\"E`. */\n toDmsString(): string {\n const [latDeg, latMin, latSec] = toDmsParts(Math.abs(this.latitude));\n const [lonDeg, lonMin, lonSec] = toDmsParts(Math.abs(this.longitude));\n return `${latDeg}°${latMin}'${formatSeconds(latSec)}\"${this.latitudeDirection}, ${lonDeg}°${lonMin}'${formatSeconds(lonSec)}\"${this.longitudeDirection}`;\n }\n\n /** Distance in kilometers (Haversine) between two coordinates. */\n static distanceKilometers(a: GeoCoordinate, b: GeoCoordinate): number {\n return haversineKm(a, b);\n }\n\n /** Returns true if coordinates `a` and `b` are within `radiusKm` kilometers of each other. */\n static isWithinKilometers(a: GeoCoordinate, b: GeoCoordinate, radiusKm: number): boolean {\n return GeoCoordinate.distanceKilometers(a, b) <= radiusKm;\n }\n\n /** Distance in kilometers from this coordinate to `other`. */\n distanceKilometersTo(other: GeoCoordinate): number {\n return haversineKm(this, other);\n }\n\n /**\n * Returns true if `other` is within `radiusKm` kilometers of this\n * coordinate (inclusive).\n */\n isWithinKilometers(other: GeoCoordinate, radiusKm: number): boolean {\n return this.distanceKilometersTo(other) <= radiusKm;\n }\n\n equals(other: GeoCoordinate | null | undefined): boolean {\n return other != null && this.latitude === other.latitude && this.longitude === other.longitude;\n }\n}\n\n// --- Regexes ---\n\nconst DECIMAL_DEGREES =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s*[,;]\\s*(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst SPACE_SEPARATED =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s+(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst DECIMAL_CARDINAL_SUFFIX =\n /^\\s*\\(?\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst CARDINAL_PREFIX =\n /^\\s*\\(?\\s*(?<latDir>[NSns])\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*[,;\\s]\\s*(?<lonDir>[EWewÖöVv])\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*\\)?\\s*$/u;\n\nconst DMS =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latMin>\\d+)\\s*[′']\\s*(?<latSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonMin>\\d+)\\s*[′']\\s*(?<lonSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst DDM =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\n// --- Helpers ---\n\nfunction tryDecimal(latStr: string, lonStr: string): GeoCoordinate | null {\n const lat = parseFloat(latStr);\n const lon = parseFloat(lonStr);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDecimalCardinal(\n latStr: string,\n latDir: string,\n lonStr: string,\n lonDir: string,\n): GeoCoordinate | null {\n const lat = applyLatDirection(parseFloat(latStr), latDir);\n const lon = applyLonDirection(parseFloat(lonStr), lonDir);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDms(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latMin = parseFloat(g.latMin!);\n const latSec = parseFloat(g.latSec!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonMin = parseFloat(g.lonMin!);\n const lonSec = parseFloat(g.lonSec!);\n if (latMin >= 60 || latSec >= 60 || lonMin >= 60 || lonSec >= 60) return null;\n let lat = round8(latDeg + latMin / 60 + latSec / 3600);\n let lon = round8(lonDeg + lonMin / 60 + lonSec / 3600);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDdm(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latDecMin = parseFloat(g.latDecMin!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonDecMin = parseFloat(g.lonDecMin!);\n if (latDecMin >= 60 || lonDecMin >= 60) return null;\n let lat = round8(latDeg + latDecMin / 60);\n let lon = round8(lonDeg + lonDecMin / 60);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction applyLatDirection(lat: number, dir: string): number {\n return dir.toUpperCase() === \"S\" ? -lat : lat;\n}\n\nfunction applyLonDirection(lon: number, dir: string): number {\n const u = dir.toUpperCase();\n return u === \"W\" || u === \"V\" ? -lon : lon;\n}\n\nfunction isInRange(lat: number, lon: number): boolean {\n return lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180;\n}\n\nfunction round8(v: number): number {\n return Math.round(v * 1e8) / 1e8;\n}\n\nfunction toDmsParts(dd: number): [number, number, number] {\n const degrees = Math.trunc(dd);\n const fracMinutes = (dd - degrees) * 60;\n const minutes = Math.trunc(fracMinutes);\n const seconds = Math.round((fracMinutes - minutes) * 600) / 10;\n return [degrees, minutes, seconds];\n}\n\nfunction formatNumber(value: number): string {\n // Match C# \"G\" format on a double: minimal representation, no trailing zeros.\n // For our use cases this matches `value.toString()` in JS.\n return value.toString();\n}\n\nfunction formatSeconds(seconds: number): string {\n // Match C# \"0.#\" format: drop trailing zero after the decimal point.\n if (Number.isInteger(seconds)) return seconds.toString();\n return seconds.toString().replace(/(\\.\\d*?)0+$/, \"$1\");\n}\n\nfunction haversineKm(a: GeoCoordinate, b: GeoCoordinate): number {\n const R = 6371;\n const dLat = toRadians(b.latitude - a.latitude);\n const dLon = toRadians(b.longitude - a.longitude);\n const lat1 = toRadians(a.latitude);\n const lat2 = toRadians(b.latitude);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));\n}\n\nfunction toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\n/** Text direction for a writing system. */\nexport const TextDirection = {\n LeftToRight: \"LeftToRight\",\n RightToLeft: \"RightToLeft\",\n} as const;\nexport type TextDirection = (typeof TextDirection)[keyof typeof TextDirection];\n\n/** Primary writing script / writing system used by a language. */\nexport const WritingScript = {\n Unknown: \"Unknown\",\n Latin: \"Latin\",\n Cyrillic: \"Cyrillic\",\n Arabic: \"Arabic\",\n Greek: \"Greek\",\n Hebrew: \"Hebrew\",\n Devanagari: \"Devanagari\",\n Bengali: \"Bengali\",\n Gurmukhi: \"Gurmukhi\",\n Gujarati: \"Gujarati\",\n Oriya: \"Oriya\",\n Tamil: \"Tamil\",\n Telugu: \"Telugu\",\n Kannada: \"Kannada\",\n Malayalam: \"Malayalam\",\n Sinhala: \"Sinhala\",\n Thai: \"Thai\",\n Lao: \"Lao\",\n Tibetan: \"Tibetan\",\n Myanmar: \"Myanmar\",\n Georgian: \"Georgian\",\n Hangul: \"Hangul\",\n Ethiopic: \"Ethiopic\",\n Cherokee: \"Cherokee\",\n Canadian: \"Canadian\",\n Khmer: \"Khmer\",\n Mongolian: \"Mongolian\",\n Han: \"Han\",\n Armenian: \"Armenian\",\n Thaana: \"Thaana\",\n} as const;\nexport type WritingScript = (typeof WritingScript)[keyof typeof WritingScript];\n\nconst MAX_INPUT_LENGTH = 100;\n\nexport interface LanguageFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A language (`språk`) identified by its ISO 639-1 two-letter code, ISO 639-2/T\n * three-letter code, English name, Swedish name, or native name (endonym).\n */\nexport class Language {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Language\",\n localizedName: \"Språk\",\n emoji: \"\\u{1F5E3}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.loc.gov/standards/iso639-2/php/code_list.php\",\n \"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\",\n \"https://iso639-3.sil.org/\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly script: WritingScript;\n readonly direction: TextDirection;\n\n private constructor(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection,\n ) {\n this.alpha2Code = alpha2;\n this.alpha3Code = alpha3;\n this.englishName = en;\n this.localizedName = sv;\n this.nativeName = native;\n this.script = script;\n this.direction = direction;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.alpha2Code;\n }\n\n /** @internal Used by Country and other types. */\n static _create(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection = TextDirection.LeftToRight,\n ): Language {\n return new Language(alpha2, alpha3, en, sv, native, script, direction);\n }\n\n static tryParse(input: string | null | undefined): Language | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Language {\n const r = Language.tryParse(input);\n if (r === null) throw new Error(\"Unknown language.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Language.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: LanguageFormatOptions): string | null {\n const r = Language.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: LanguageFormatOptions,\n ): string | null {\n const r = Language.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Language.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Language | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n\n compareTo(other: Language | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n /** All recognized ISO 639-1 languages. */\n static get all(): readonly Language[] {\n return ALL;\n }\n\n // Frequently used language constants — populated below ALL.\n static readonly Afrikaans: Language;\n static readonly Albanian: Language;\n static readonly Arabic: Language;\n static readonly Bulgarian: Language;\n static readonly Catalan: Language;\n static readonly Chinese: Language;\n static readonly Croatian: Language;\n static readonly Czech: Language;\n static readonly Danish: Language;\n static readonly Dutch: Language;\n static readonly English: Language;\n static readonly Estonian: Language;\n static readonly Faroese: Language;\n static readonly Finnish: Language;\n static readonly French: Language;\n static readonly German: Language;\n static readonly Greek: Language;\n static readonly Hindi: Language;\n static readonly Hungarian: Language;\n static readonly Icelandic: Language;\n static readonly Italian: Language;\n static readonly Japanese: Language;\n static readonly Korean: Language;\n static readonly Latvian: Language;\n static readonly Lithuanian: Language;\n static readonly NorthernSami: Language;\n static readonly Norwegian: Language;\n static readonly NorwegianBokmal: Language;\n static readonly NorwegianNynorsk: Language;\n static readonly Polish: Language;\n static readonly Portuguese: Language;\n static readonly Romanian: Language;\n static readonly Russian: Language;\n static readonly Slovak: Language;\n static readonly Slovenian: Language;\n static readonly Spanish: Language;\n static readonly Swahili: Language;\n static readonly Swedish: Language;\n static readonly Turkish: Language;\n static readonly Ukrainian: Language;\n}\n\nconst L = Language._create;\n\nconst ALL: readonly Language[] = Object.freeze([\n L(\"aa\", \"aar\", \"Afar\", \"Afar\", \"Afaraf\", WritingScript.Latin),\n L(\"ab\", \"abk\", \"Abkhazian\", \"Abchaziska\", \"Аҧсуа\", WritingScript.Cyrillic),\n L(\"af\", \"afr\", \"Afrikaans\", \"Afrikaans\", \"Afrikaans\", WritingScript.Latin),\n L(\"ak\", \"aka\", \"Akan\", \"Akan\", \"Akan\", WritingScript.Latin),\n L(\"am\", \"amh\", \"Amharic\", \"Amhariska\", \"አማርኛ\", WritingScript.Ethiopic),\n L(\"an\", \"arg\", \"Aragonese\", \"Aragonesiska\", \"Aragonés\", WritingScript.Latin),\n L(\"ar\", \"ara\", \"Arabic\", \"Arabiska\", \"العربية\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"as\", \"asm\", \"Assamese\", \"Assamesiska\", \"অসমীয়া\", WritingScript.Bengali),\n L(\"av\", \"ava\", \"Avaric\", \"Avariska\", \"Авар\", WritingScript.Cyrillic),\n L(\"ay\", \"aym\", \"Aymara\", \"Aymara\", \"Aymar\", WritingScript.Latin),\n L(\"az\", \"aze\", \"Azerbaijani\", \"Azerbajdzjanska\", \"Azərbaycan\", WritingScript.Latin),\n L(\"ba\", \"bak\", \"Bashkir\", \"Basjkiriska\", \"Башҡорт\", WritingScript.Cyrillic),\n L(\"be\", \"bel\", \"Belarusian\", \"Vitryska\", \"Беларуская\", WritingScript.Cyrillic),\n L(\"bg\", \"bul\", \"Bulgarian\", \"Bulgariska\", \"Български\", WritingScript.Cyrillic),\n L(\"bh\", \"bih\", \"Bihari\", \"Bihari\", \"भोजपुरी\", WritingScript.Devanagari),\n L(\"bi\", \"bis\", \"Bislama\", \"Bislama\", \"Bislama\", WritingScript.Latin),\n L(\"bm\", \"bam\", \"Bambara\", \"Bambara\", \"Bamanankan\", WritingScript.Latin),\n L(\"bn\", \"ben\", \"Bengali\", \"Bengali\", \"বাংলা\", WritingScript.Bengali),\n L(\"bo\", \"bod\", \"Tibetan\", \"Tibetanska\", \"བོད་ཡིག\", WritingScript.Tibetan),\n L(\"br\", \"bre\", \"Breton\", \"Bretonska\", \"Brezhoneg\", WritingScript.Latin),\n L(\"bs\", \"bos\", \"Bosnian\", \"Bosniska\", \"Bosanski\", WritingScript.Latin),\n L(\"ca\", \"cat\", \"Catalan\", \"Katalanska\", \"Català\", WritingScript.Latin),\n L(\"ce\", \"che\", \"Chechen\", \"Tjetjenska\", \"Нохчийн\", WritingScript.Cyrillic),\n L(\"ch\", \"cha\", \"Chamorro\", \"Chamorro\", \"Chamoru\", WritingScript.Latin),\n L(\"co\", \"cos\", \"Corsican\", \"Korsikanska\", \"Corsu\", WritingScript.Latin),\n L(\"cr\", \"cre\", \"Cree\", \"Cree\", \"ᓀᐦᐃᔭᐍᐏᐣ\", WritingScript.Canadian),\n L(\"cs\", \"ces\", \"Czech\", \"Tjeckiska\", \"Čeština\", WritingScript.Latin),\n L(\"cu\", \"chu\", \"Church Slavonic\", \"Kyrkoslaviska\", \"Словѣньскъ\", WritingScript.Cyrillic),\n L(\"cv\", \"chv\", \"Chuvash\", \"Tjuvasjiska\", \"Чӑваш\", WritingScript.Cyrillic),\n L(\"cy\", \"cym\", \"Welsh\", \"Walesiska\", \"Cymraeg\", WritingScript.Latin),\n L(\"da\", \"dan\", \"Danish\", \"Danska\", \"Dansk\", WritingScript.Latin),\n L(\"de\", \"deu\", \"German\", \"Tyska\", \"Deutsch\", WritingScript.Latin),\n L(\"dv\", \"div\", \"Divehi\", \"Divehi\", \"ދިވެހި\", WritingScript.Thaana, TextDirection.RightToLeft),\n L(\"dz\", \"dzo\", \"Dzongkha\", \"Dzongkha\", \"རྫོང་ཁ\", WritingScript.Tibetan),\n L(\"ee\", \"ewe\", \"Ewe\", \"Ewe\", \"Eʋegbe\", WritingScript.Latin),\n L(\"el\", \"ell\", \"Greek\", \"Grekiska\", \"Ελληνικά\", WritingScript.Greek),\n L(\"en\", \"eng\", \"English\", \"Engelska\", \"English\", WritingScript.Latin),\n L(\"eo\", \"epo\", \"Esperanto\", \"Esperanto\", \"Esperanto\", WritingScript.Latin),\n L(\"es\", \"spa\", \"Spanish\", \"Spanska\", \"Español\", WritingScript.Latin),\n L(\"et\", \"est\", \"Estonian\", \"Estniska\", \"Eesti\", WritingScript.Latin),\n L(\"eu\", \"eus\", \"Basque\", \"Baskiska\", \"Euskara\", WritingScript.Latin),\n L(\"fa\", \"fas\", \"Persian\", \"Persiska\", \"فارسی\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"ff\", \"ful\", \"Fulah\", \"Fulani\", \"Fulfulde\", WritingScript.Latin),\n L(\"fi\", \"fin\", \"Finnish\", \"Finska\", \"Suomi\", WritingScript.Latin),\n L(\"fj\", \"fij\", \"Fijian\", \"Fijianska\", \"Vosa Vakaviti\", WritingScript.Latin),\n L(\"fo\", \"fao\", \"Faroese\", \"Färöiska\", \"Føroyskt\", WritingScript.Latin),\n L(\"fr\", \"fra\", \"French\", \"Franska\", \"Français\", WritingScript.Latin),\n L(\"fy\", \"fry\", \"Western Frisian\", \"Frisiska\", \"Frysk\", WritingScript.Latin),\n L(\"ga\", \"gle\", \"Irish\", \"Iriska\", \"Gaeilge\", WritingScript.Latin),\n L(\"gd\", \"gla\", \"Scottish Gaelic\", \"Skotsk gaeliska\", \"Gàidhlig\", WritingScript.Latin),\n L(\"gl\", \"glg\", \"Galician\", \"Galiciska\", \"Galego\", WritingScript.Latin),\n L(\"gn\", \"grn\", \"Guarani\", \"Guaraní\", \"Avañe'ẽ\", WritingScript.Latin),\n L(\"gu\", \"guj\", \"Gujarati\", \"Gujarati\", \"ગુજરાતી\", WritingScript.Gujarati),\n L(\"gv\", \"glv\", \"Manx\", \"Manx\", \"Gaelg\", WritingScript.Latin),\n L(\"ha\", \"hau\", \"Hausa\", \"Hausa\", \"Hausa\", WritingScript.Latin),\n L(\"he\", \"heb\", \"Hebrew\", \"Hebreiska\", \"עברית\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"hi\", \"hin\", \"Hindi\", \"Hindi\", \"हिन्दी\", WritingScript.Devanagari),\n L(\"ho\", \"hmo\", \"Hiri Motu\", \"Hiri Motu\", \"Hiri Motu\", WritingScript.Latin),\n L(\"hr\", \"hrv\", \"Croatian\", \"Kroatiska\", \"Hrvatski\", WritingScript.Latin),\n L(\"ht\", \"hat\", \"Haitian Creole\", \"Haitisk kreol\", \"Kreyòl Ayisyen\", WritingScript.Latin),\n L(\"hu\", \"hun\", \"Hungarian\", \"Ungerska\", \"Magyar\", WritingScript.Latin),\n L(\"hy\", \"hye\", \"Armenian\", \"Armeniska\", \"Հայերեն\", WritingScript.Armenian),\n L(\"ia\", \"ina\", \"Interlingua\", \"Interlingua\", \"Interlingua\", WritingScript.Latin),\n L(\"id\", \"ind\", \"Indonesian\", \"Indonesiska\", \"Bahasa Indonesia\", WritingScript.Latin),\n L(\"ie\", \"ile\", \"Interlingue\", \"Interlingue\", \"Interlingue\", WritingScript.Latin),\n L(\"ig\", \"ibo\", \"Igbo\", \"Igbo\", \"Igbo\", WritingScript.Latin),\n L(\"ii\", \"iii\", \"Sichuan Yi\", \"Yi\", \"ꆈꌠ꒡\", WritingScript.Unknown),\n L(\"ik\", \"ipk\", \"Inupiaq\", \"Inupiaq\", \"Iñupiaq\", WritingScript.Latin),\n L(\"io\", \"ido\", \"Ido\", \"Ido\", \"Ido\", WritingScript.Latin),\n L(\"is\", \"isl\", \"Icelandic\", \"Isländska\", \"Íslenska\", WritingScript.Latin),\n L(\"it\", \"ita\", \"Italian\", \"Italienska\", \"Italiano\", WritingScript.Latin),\n L(\"iu\", \"iku\", \"Inuktitut\", \"Inuktitut\", \"ᐃᓄᒃᑎᑐᑦ\", WritingScript.Canadian),\n L(\"ja\", \"jpn\", \"Japanese\", \"Japanska\", \"日本語\", WritingScript.Han),\n L(\"jv\", \"jav\", \"Javanese\", \"Javanesiska\", \"Basa Jawa\", WritingScript.Latin),\n L(\"ka\", \"kat\", \"Georgian\", \"Georgiska\", \"ქართული\", WritingScript.Georgian),\n L(\"kg\", \"kon\", \"Kongo\", \"Kikongo\", \"KiKongo\", WritingScript.Latin),\n L(\"ki\", \"kik\", \"Kikuyu\", \"Kikuyu\", \"Gĩkũyũ\", WritingScript.Latin),\n L(\"kj\", \"kua\", \"Kuanyama\", \"Kuanyama\", \"Kuanyama\", WritingScript.Latin),\n L(\"kk\", \"kaz\", \"Kazakh\", \"Kazakiska\", \"Қазақша\", WritingScript.Cyrillic),\n L(\"kl\", \"kal\", \"Kalaallisut\", \"Grönländska\", \"Kalaallisut\", WritingScript.Latin),\n L(\"km\", \"khm\", \"Khmer\", \"Khmer\", \"ភាសាខ្មែរ\", WritingScript.Khmer),\n L(\"kn\", \"kan\", \"Kannada\", \"Kannada\", \"ಕನ್ನಡ\", WritingScript.Kannada),\n L(\"ko\", \"kor\", \"Korean\", \"Koreanska\", \"한국어\", WritingScript.Hangul),\n L(\"kr\", \"kau\", \"Kanuri\", \"Kanuri\", \"Kanuri\", WritingScript.Latin),\n L(\n \"ks\",\n \"kas\",\n \"Kashmiri\",\n \"Kashmiri\",\n \"कश्मीरी\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"ku\", \"kur\", \"Kurdish\", \"Kurdiska\", \"Kurdî\", WritingScript.Latin),\n L(\"kv\", \"kom\", \"Komi\", \"Komi\", \"Коми\", WritingScript.Cyrillic),\n L(\"kw\", \"cor\", \"Cornish\", \"Korniska\", \"Kernewek\", WritingScript.Latin),\n L(\"ky\", \"kir\", \"Kyrgyz\", \"Kirgiziska\", \"Кыргызча\", WritingScript.Cyrillic),\n L(\"la\", \"lat\", \"Latin\", \"Latin\", \"Latina\", WritingScript.Latin),\n L(\"lb\", \"ltz\", \"Luxembourgish\", \"Luxemburgiska\", \"Lëtzebuergesch\", WritingScript.Latin),\n L(\"lg\", \"lug\", \"Ganda\", \"Luganda\", \"Luganda\", WritingScript.Latin),\n L(\"li\", \"lim\", \"Limburgish\", \"Limburgiska\", \"Limburgs\", WritingScript.Latin),\n L(\"ln\", \"lin\", \"Lingala\", \"Lingala\", \"Lingála\", WritingScript.Latin),\n L(\"lo\", \"lao\", \"Lao\", \"Laotiska\", \"ພາສາລາວ\", WritingScript.Lao),\n L(\"lt\", \"lit\", \"Lithuanian\", \"Litauiska\", \"Lietuvių\", WritingScript.Latin),\n L(\"lu\", \"lub\", \"Luba-Katanga\", \"Luba-Katanga\", \"Kiluba\", WritingScript.Latin),\n L(\"lv\", \"lav\", \"Latvian\", \"Lettiska\", \"Latviešu\", WritingScript.Latin),\n L(\"mg\", \"mlg\", \"Malagasy\", \"Malagassiska\", \"Malagasy\", WritingScript.Latin),\n L(\"mh\", \"mah\", \"Marshallese\", \"Marshallesiska\", \"Kajin M̧ajeļ\", WritingScript.Latin),\n L(\"mi\", \"mri\", \"Maori\", \"Maori\", \"Te Reo Māori\", WritingScript.Latin),\n L(\"mk\", \"mkd\", \"Macedonian\", \"Makedonska\", \"Македонски\", WritingScript.Cyrillic),\n L(\"ml\", \"mal\", \"Malayalam\", \"Malayalam\", \"മലയാളം\", WritingScript.Malayalam),\n L(\"mn\", \"mon\", \"Mongolian\", \"Mongoliska\", \"Монгол\", WritingScript.Cyrillic),\n L(\"mr\", \"mar\", \"Marathi\", \"Marathi\", \"मराठी\", WritingScript.Devanagari),\n L(\"ms\", \"msa\", \"Malay\", \"Malajiska\", \"Bahasa Melayu\", WritingScript.Latin),\n L(\"mt\", \"mlt\", \"Maltese\", \"Maltesiska\", \"Malti\", WritingScript.Latin),\n L(\"my\", \"mya\", \"Burmese\", \"Burmesiska\", \"မြန်မာစာ\", WritingScript.Myanmar),\n L(\"na\", \"nau\", \"Nauru\", \"Nauru\", \"Dorerin Naoero\", WritingScript.Latin),\n L(\"nb\", \"nob\", \"Norwegian Bokmål\", \"Norska (bokmål)\", \"Norsk bokmål\", WritingScript.Latin),\n L(\"nd\", \"nde\", \"Northern Ndebele\", \"Nordndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"ne\", \"nep\", \"Nepali\", \"Nepalesiska\", \"नेपाली\", WritingScript.Devanagari),\n L(\"ng\", \"ndo\", \"Ndonga\", \"Ndonga\", \"Owambo\", WritingScript.Latin),\n L(\"nl\", \"nld\", \"Dutch\", \"Nederländska\", \"Nederlands\", WritingScript.Latin),\n L(\"nn\", \"nno\", \"Norwegian Nynorsk\", \"Norska (nynorsk)\", \"Norsk nynorsk\", WritingScript.Latin),\n L(\"no\", \"nor\", \"Norwegian\", \"Norska\", \"Norsk\", WritingScript.Latin),\n L(\"nr\", \"nbl\", \"Southern Ndebele\", \"Sydndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"nv\", \"nav\", \"Navajo\", \"Navajo\", \"Diné Bizaad\", WritingScript.Latin),\n L(\"ny\", \"nya\", \"Chichewa\", \"Chichewa\", \"Chichewa\", WritingScript.Latin),\n L(\"oc\", \"oci\", \"Occitan\", \"Occitanska\", \"Occitan\", WritingScript.Latin),\n L(\"oj\", \"oji\", \"Ojibwa\", \"Ojibwa\", \"ᐊᓂᔑᓈᐯᒧᐎᓐ\", WritingScript.Canadian),\n L(\"om\", \"orm\", \"Oromo\", \"Oromo\", \"Afaan Oromoo\", WritingScript.Latin),\n L(\"or\", \"ori\", \"Oriya\", \"Oriya\", \"ଓଡ଼ିଆ\", WritingScript.Oriya),\n L(\"os\", \"oss\", \"Ossetian\", \"Ossetiska\", \"Ирон\", WritingScript.Cyrillic),\n L(\"pa\", \"pan\", \"Punjabi\", \"Punjabi\", \"ਪੰਜਾਬੀ\", WritingScript.Gurmukhi),\n L(\"pi\", \"pli\", \"Pali\", \"Pali\", \"पालि\", WritingScript.Devanagari),\n L(\"pl\", \"pol\", \"Polish\", \"Polska\", \"Polski\", WritingScript.Latin),\n L(\"ps\", \"pus\", \"Pashto\", \"Pashto\", \"پښتو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"pt\", \"por\", \"Portuguese\", \"Portugisiska\", \"Português\", WritingScript.Latin),\n L(\"qu\", \"que\", \"Quechua\", \"Quechua\", \"Runa Simi\", WritingScript.Latin),\n L(\"rm\", \"roh\", \"Romansh\", \"Rätoromanska\", \"Rumantsch\", WritingScript.Latin),\n L(\"rn\", \"run\", \"Rundi\", \"Kirundi\", \"Ikirundi\", WritingScript.Latin),\n L(\"ro\", \"ron\", \"Romanian\", \"Rumänska\", \"Română\", WritingScript.Latin),\n L(\"ru\", \"rus\", \"Russian\", \"Ryska\", \"Русский\", WritingScript.Cyrillic),\n L(\"rw\", \"kin\", \"Kinyarwanda\", \"Kinyarwanda\", \"Ikinyarwanda\", WritingScript.Latin),\n L(\"sa\", \"san\", \"Sanskrit\", \"Sanskrit\", \"संस्कृतम्\", WritingScript.Devanagari),\n L(\"sc\", \"srd\", \"Sardinian\", \"Sardiska\", \"Sardu\", WritingScript.Latin),\n L(\"sd\", \"snd\", \"Sindhi\", \"Sindhi\", \"سنڌي\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"se\", \"sme\", \"Northern Sami\", \"Nordsamiska\", \"Davvisámegiella\", WritingScript.Latin),\n L(\"sg\", \"sag\", \"Sango\", \"Sango\", \"Yângâ tî Sängö\", WritingScript.Latin),\n L(\"si\", \"sin\", \"Sinhala\", \"Singalesiska\", \"සිංහල\", WritingScript.Sinhala),\n L(\"sk\", \"slk\", \"Slovak\", \"Slovakiska\", \"Slovenčina\", WritingScript.Latin),\n L(\"sl\", \"slv\", \"Slovenian\", \"Slovenska\", \"Slovenščina\", WritingScript.Latin),\n L(\"sm\", \"smo\", \"Samoan\", \"Samoanska\", \"Gagana Sāmoa\", WritingScript.Latin),\n L(\"sn\", \"sna\", \"Shona\", \"Shona\", \"ChiShona\", WritingScript.Latin),\n L(\"so\", \"som\", \"Somali\", \"Somaliska\", \"Soomaali\", WritingScript.Latin),\n L(\"sq\", \"sqi\", \"Albanian\", \"Albanska\", \"Shqip\", WritingScript.Latin),\n L(\"sr\", \"srp\", \"Serbian\", \"Serbiska\", \"Српски\", WritingScript.Cyrillic),\n L(\"ss\", \"ssw\", \"Swati\", \"Swati\", \"SiSwati\", WritingScript.Latin),\n L(\"st\", \"sot\", \"Southern Sotho\", \"Sotho\", \"Sesotho\", WritingScript.Latin),\n L(\"su\", \"sun\", \"Sundanese\", \"Sundanesiska\", \"Basa Sunda\", WritingScript.Latin),\n L(\"sv\", \"swe\", \"Swedish\", \"Svenska\", \"Svenska\", WritingScript.Latin),\n L(\"sw\", \"swa\", \"Swahili\", \"Swahili\", \"Kiswahili\", WritingScript.Latin),\n L(\"ta\", \"tam\", \"Tamil\", \"Tamil\", \"தமிழ்\", WritingScript.Tamil),\n L(\"te\", \"tel\", \"Telugu\", \"Telugu\", \"తెలుగు\", WritingScript.Telugu),\n L(\"tg\", \"tgk\", \"Tajik\", \"Tadzjikiska\", \"Тоҷикӣ\", WritingScript.Cyrillic),\n L(\"th\", \"tha\", \"Thai\", \"Thailändska\", \"ไทย\", WritingScript.Thai),\n L(\"ti\", \"tir\", \"Tigrinya\", \"Tigrinja\", \"ትግርኛ\", WritingScript.Ethiopic),\n L(\"tk\", \"tuk\", \"Turkmen\", \"Turkmeniska\", \"Türkmen\", WritingScript.Latin),\n L(\"tl\", \"tgl\", \"Tagalog\", \"Tagalog\", \"Tagalog\", WritingScript.Latin),\n L(\"tn\", \"tsn\", \"Tswana\", \"Tswana\", \"Setswana\", WritingScript.Latin),\n L(\"to\", \"ton\", \"Tongan\", \"Tonganska\", \"Lea Faka-Tonga\", WritingScript.Latin),\n L(\"tr\", \"tur\", \"Turkish\", \"Turkiska\", \"Türkçe\", WritingScript.Latin),\n L(\"ts\", \"tso\", \"Tsonga\", \"Tsonga\", \"Xitsonga\", WritingScript.Latin),\n L(\"tt\", \"tat\", \"Tatar\", \"Tatariska\", \"Татар\", WritingScript.Cyrillic),\n L(\"tw\", \"twi\", \"Twi\", \"Twi\", \"Twi\", WritingScript.Latin),\n L(\"ty\", \"tah\", \"Tahitian\", \"Tahitiska\", \"Reo Tahiti\", WritingScript.Latin),\n L(\n \"ug\",\n \"uig\",\n \"Uyghur\",\n \"Uiguriska\",\n \"ئۇيغۇرچە\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"uk\", \"ukr\", \"Ukrainian\", \"Ukrainska\", \"Українська\", WritingScript.Cyrillic),\n L(\"ur\", \"urd\", \"Urdu\", \"Urdu\", \"اردو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"uz\", \"uzb\", \"Uzbek\", \"Uzbekiska\", \"Oʻzbek\", WritingScript.Latin),\n L(\"ve\", \"ven\", \"Venda\", \"Venda\", \"Tshivenḓa\", WritingScript.Latin),\n L(\"vi\", \"vie\", \"Vietnamese\", \"Vietnamesiska\", \"Tiếng Việt\", WritingScript.Latin),\n L(\"vo\", \"vol\", \"Volapük\", \"Volapük\", \"Volapük\", WritingScript.Latin),\n L(\"wa\", \"wln\", \"Walloon\", \"Vallonska\", \"Walon\", WritingScript.Latin),\n L(\"wo\", \"wol\", \"Wolof\", \"Wolof\", \"Wollof\", WritingScript.Latin),\n L(\"xh\", \"xho\", \"Xhosa\", \"Xhosa\", \"isiXhosa\", WritingScript.Latin),\n L(\"yi\", \"yid\", \"Yiddish\", \"Jiddisch\", \"ייִדיש\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"yo\", \"yor\", \"Yoruba\", \"Yoruba\", \"Yorùbá\", WritingScript.Latin),\n L(\"za\", \"zha\", \"Zhuang\", \"Zhuang\", \"Saɯ cueŋƅ\", WritingScript.Latin),\n L(\"zh\", \"zho\", \"Chinese\", \"Kinesiska\", \"中文\", WritingScript.Han),\n L(\"zu\", \"zul\", \"Zulu\", \"Zulu\", \"isiZulu\", WritingScript.Latin),\n]);\n\nconst BY_KEY = (() => {\n const m = new Map<string, Language>();\n for (const lang of ALL) {\n m.set(lang.alpha2Code, lang);\n m.set(lang.alpha3Code, lang);\n m.set(lang.englishName.toLowerCase(), lang);\n if (!m.has(lang.localizedName.toLowerCase())) {\n m.set(lang.localizedName.toLowerCase(), lang);\n }\n if (\n lang.nativeName.toLowerCase() !== lang.englishName.toLowerCase() &&\n !m.has(lang.nativeName.toLowerCase())\n ) {\n m.set(lang.nativeName.toLowerCase(), lang);\n }\n }\n return m;\n})();\n\nconst byA2 = (a2: string) => BY_KEY.get(a2)!;\n\n(Language as { Afrikaans: Language }).Afrikaans = byA2(\"af\");\n(Language as { Albanian: Language }).Albanian = byA2(\"sq\");\n(Language as { Arabic: Language }).Arabic = byA2(\"ar\");\n(Language as { Bulgarian: Language }).Bulgarian = byA2(\"bg\");\n(Language as { Catalan: Language }).Catalan = byA2(\"ca\");\n(Language as { Chinese: Language }).Chinese = byA2(\"zh\");\n(Language as { Croatian: Language }).Croatian = byA2(\"hr\");\n(Language as { Czech: Language }).Czech = byA2(\"cs\");\n(Language as { Danish: Language }).Danish = byA2(\"da\");\n(Language as { Dutch: Language }).Dutch = byA2(\"nl\");\n(Language as { English: Language }).English = byA2(\"en\");\n(Language as { Estonian: Language }).Estonian = byA2(\"et\");\n(Language as { Faroese: Language }).Faroese = byA2(\"fo\");\n(Language as { Finnish: Language }).Finnish = byA2(\"fi\");\n(Language as { French: Language }).French = byA2(\"fr\");\n(Language as { German: Language }).German = byA2(\"de\");\n(Language as { Greek: Language }).Greek = byA2(\"el\");\n(Language as { Hindi: Language }).Hindi = byA2(\"hi\");\n(Language as { Hungarian: Language }).Hungarian = byA2(\"hu\");\n(Language as { Icelandic: Language }).Icelandic = byA2(\"is\");\n(Language as { Italian: Language }).Italian = byA2(\"it\");\n(Language as { Japanese: Language }).Japanese = byA2(\"ja\");\n(Language as { Korean: Language }).Korean = byA2(\"ko\");\n(Language as { Latvian: Language }).Latvian = byA2(\"lv\");\n(Language as { Lithuanian: Language }).Lithuanian = byA2(\"lt\");\n(Language as { NorthernSami: Language }).NorthernSami = byA2(\"se\");\n(Language as { Norwegian: Language }).Norwegian = byA2(\"no\");\n(Language as { NorwegianBokmal: Language }).NorwegianBokmal = byA2(\"nb\");\n(Language as { NorwegianNynorsk: Language }).NorwegianNynorsk = byA2(\"nn\");\n(Language as { Polish: Language }).Polish = byA2(\"pl\");\n(Language as { Portuguese: Language }).Portuguese = byA2(\"pt\");\n(Language as { Romanian: Language }).Romanian = byA2(\"ro\");\n(Language as { Russian: Language }).Russian = byA2(\"ru\");\n(Language as { Slovak: Language }).Slovak = byA2(\"sk\");\n(Language as { Slovenian: Language }).Slovenian = byA2(\"sl\");\n(Language as { Spanish: Language }).Spanish = byA2(\"es\");\n(Language as { Swahili: Language }).Swahili = byA2(\"sw\");\n(Language as { Swedish: Language }).Swedish = byA2(\"sv\");\n(Language as { Turkish: Language }).Turkish = byA2(\"tr\");\n(Language as { Ukrainian: Language }).Ukrainian = byA2(\"uk\");\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nexport interface ContinentFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A continent (`kontinent`) identified by its two-letter code, English name,\n * or Swedish name. Seven continents are recognized: Africa, Antarctica, Asia,\n * Europe, North America, Oceania, and South America.\n *\n * Sources:\n * - UN M49 Standard\n * - Datahub continent codes\n */\nexport class Continent {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Continent\",\n localizedName: \"Kontinent\",\n emoji: \"\\u{1F5FA}\\uFE0F\",\n sources: Object.freeze([\n \"https://unstats.un.org/unsd/methodology/m49/\",\n \"https://datahub.io/core/continent-codes\",\n ]),\n });\n\n static readonly Africa: Continent = new Continent(\"AF\", \"Africa\", \"Afrika\");\n static readonly Antarctica: Continent = new Continent(\"AN\", \"Antarctica\", \"Antarktis\");\n static readonly Asia: Continent = new Continent(\"AS\", \"Asia\", \"Asien\");\n static readonly Europe: Continent = new Continent(\"EU\", \"Europe\", \"Europa\");\n static readonly NorthAmerica: Continent = new Continent(\"NA\", \"North America\", \"Nordamerika\");\n static readonly Oceania: Continent = new Continent(\"OC\", \"Oceania\", \"Oceanien\");\n static readonly SouthAmerica: Continent = new Continent(\"SA\", \"South America\", \"Sydamerika\");\n\n /** All seven continents. */\n static readonly all: readonly Continent[] = Object.freeze([\n Continent.Africa,\n Continent.Antarctica,\n Continent.Asia,\n Continent.Europe,\n Continent.NorthAmerica,\n Continent.Oceania,\n Continent.SouthAmerica,\n ]);\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n\n private constructor(code: string, englishName: string, localizedName: string) {\n this.code = code;\n this.englishName = englishName;\n this.localizedName = localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.code;\n }\n\n static tryParse(input: string | null | undefined): Continent | null {\n if (input == null) return null;\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Continent {\n const r = Continent.tryParse(input);\n if (r === null) throw new Error(\"Unknown continent.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Continent.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: ContinentFormatOptions): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: ContinentFormatOptions,\n ): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Continent.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Continent | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Continent | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nconst BY_KEY = (() => {\n const m = new Map<string, Continent>();\n for (const c of Continent.all) {\n m.set(c.code.toLowerCase(), c);\n m.set(c.englishName.toLowerCase(), c);\n m.set(c.localizedName.toLowerCase(), c);\n }\n return m;\n})();\n","import { Continent } from \"./continent.js\";\n\n/**\n * Static country data: ISO 3166-1 alpha-2/alpha-3/numeric codes, English/Swedish/native names,\n * E.164 calling code, ccTLD, continent. Sourced from ISO 3166, ITU-T E.164, and IANA root db.\n */\nexport interface CountryRow {\n readonly alpha2: string;\n readonly alpha3: string;\n readonly numeric: number;\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly callingCode: string;\n readonly tld: string;\n readonly continent: Continent;\n}\n\nconst C = (\n alpha2: string,\n alpha3: string,\n numeric: number,\n en: string,\n sv: string,\n native: string,\n callingCode: string,\n tld: string,\n continent: Continent,\n): CountryRow => ({ alpha2, alpha3, numeric, en, sv, native, callingCode, tld, continent });\n\nexport const COUNTRY_ROWS: readonly CountryRow[] = [\n C(\"AF\", \"AFG\", 4, \"Afghanistan\", \"Afghanistan\", \"افغانستان\", \"93\", \".af\", Continent.Asia),\n C(\"AL\", \"ALB\", 8, \"Albania\", \"Albanien\", \"Shqipëria\", \"355\", \".al\", Continent.Europe),\n C(\"DZ\", \"DZA\", 12, \"Algeria\", \"Algeriet\", \"الجزائر\", \"213\", \".dz\", Continent.Africa),\n C(\n \"AS\",\n \"ASM\",\n 16,\n \"American Samoa\",\n \"Amerikanska Samoa\",\n \"American Samoa\",\n \"1\",\n \".as\",\n Continent.Oceania,\n ),\n C(\"AD\", \"AND\", 20, \"Andorra\", \"Andorra\", \"Andorra\", \"376\", \".ad\", Continent.Europe),\n C(\"AO\", \"AGO\", 24, \"Angola\", \"Angola\", \"Angola\", \"244\", \".ao\", Continent.Africa),\n C(\n \"AG\",\n \"ATG\",\n 28,\n \"Antigua and Barbuda\",\n \"Antigua och Barbuda\",\n \"Antigua and Barbuda\",\n \"1\",\n \".ag\",\n Continent.NorthAmerica,\n ),\n C(\"AR\", \"ARG\", 32, \"Argentina\", \"Argentina\", \"Argentina\", \"54\", \".ar\", Continent.SouthAmerica),\n C(\"AM\", \"ARM\", 51, \"Armenia\", \"Armenien\", \"Հայաստան\", \"374\", \".am\", Continent.Asia),\n C(\"AW\", \"ABW\", 533, \"Aruba\", \"Aruba\", \"Aruba\", \"297\", \".aw\", Continent.NorthAmerica),\n C(\"AU\", \"AUS\", 36, \"Australia\", \"Australien\", \"Australia\", \"61\", \".au\", Continent.Oceania),\n C(\"AT\", \"AUT\", 40, \"Austria\", \"Österrike\", \"Österreich\", \"43\", \".at\", Continent.Europe),\n C(\"AZ\", \"AZE\", 31, \"Azerbaijan\", \"Azerbajdzjan\", \"Azərbaycan\", \"994\", \".az\", Continent.Asia),\n C(\"BS\", \"BHS\", 44, \"Bahamas\", \"Bahamas\", \"Bahamas\", \"1\", \".bs\", Continent.NorthAmerica),\n C(\"BH\", \"BHR\", 48, \"Bahrain\", \"Bahrain\", \"البحرين\", \"973\", \".bh\", Continent.Asia),\n C(\"BD\", \"BGD\", 50, \"Bangladesh\", \"Bangladesh\", \"বাংলাদেশ\", \"880\", \".bd\", Continent.Asia),\n C(\"BB\", \"BRB\", 52, \"Barbados\", \"Barbados\", \"Barbados\", \"1\", \".bb\", Continent.NorthAmerica),\n C(\"BY\", \"BLR\", 112, \"Belarus\", \"Belarus\", \"Беларусь\", \"375\", \".by\", Continent.Europe),\n C(\"BE\", \"BEL\", 56, \"Belgium\", \"Belgien\", \"België\", \"32\", \".be\", Continent.Europe),\n C(\"BZ\", \"BLZ\", 84, \"Belize\", \"Belize\", \"Belize\", \"501\", \".bz\", Continent.NorthAmerica),\n C(\"BJ\", \"BEN\", 204, \"Benin\", \"Benin\", \"Bénin\", \"229\", \".bj\", Continent.Africa),\n C(\"BM\", \"BMU\", 60, \"Bermuda\", \"Bermuda\", \"Bermuda\", \"1\", \".bm\", Continent.NorthAmerica),\n C(\"BT\", \"BTN\", 64, \"Bhutan\", \"Bhutan\", \"འབྲུག\", \"975\", \".bt\", Continent.Asia),\n C(\"BO\", \"BOL\", 68, \"Bolivia\", \"Bolivia\", \"Bolivia\", \"591\", \".bo\", Continent.SouthAmerica),\n C(\n \"BA\",\n \"BIH\",\n 70,\n \"Bosnia and Herzegovina\",\n \"Bosnien och Hercegovina\",\n \"Bosna i Hercegovina\",\n \"387\",\n \".ba\",\n Continent.Europe,\n ),\n C(\"BW\", \"BWA\", 72, \"Botswana\", \"Botswana\", \"Botswana\", \"267\", \".bw\", Continent.Africa),\n C(\"BR\", \"BRA\", 76, \"Brazil\", \"Brasilien\", \"Brasil\", \"55\", \".br\", Continent.SouthAmerica),\n C(\"BN\", \"BRN\", 96, \"Brunei\", \"Brunei\", \"Brunei\", \"673\", \".bn\", Continent.Asia),\n C(\"BG\", \"BGR\", 100, \"Bulgaria\", \"Bulgarien\", \"България\", \"359\", \".bg\", Continent.Europe),\n C(\n \"BF\",\n \"BFA\",\n 854,\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"226\",\n \".bf\",\n Continent.Africa,\n ),\n C(\"BI\", \"BDI\", 108, \"Burundi\", \"Burundi\", \"Burundi\", \"257\", \".bi\", Continent.Africa),\n C(\"CV\", \"CPV\", 132, \"Cabo Verde\", \"Kap Verde\", \"Cabo Verde\", \"238\", \".cv\", Continent.Africa),\n C(\"KH\", \"KHM\", 116, \"Cambodia\", \"Kambodja\", \"កម្ពុជា\", \"855\", \".kh\", Continent.Asia),\n C(\"CM\", \"CMR\", 120, \"Cameroon\", \"Kamerun\", \"Cameroun\", \"237\", \".cm\", Continent.Africa),\n C(\"CA\", \"CAN\", 124, \"Canada\", \"Kanada\", \"Canada\", \"1\", \".ca\", Continent.NorthAmerica),\n C(\n \"CF\",\n \"CAF\",\n 140,\n \"Central African Republic\",\n \"Centralafrikanska republiken\",\n \"République centrafricaine\",\n \"236\",\n \".cf\",\n Continent.Africa,\n ),\n C(\"TD\", \"TCD\", 148, \"Chad\", \"Tchad\", \"Tchad\", \"235\", \".td\", Continent.Africa),\n C(\"CL\", \"CHL\", 152, \"Chile\", \"Chile\", \"Chile\", \"56\", \".cl\", Continent.SouthAmerica),\n C(\"CN\", \"CHN\", 156, \"China\", \"Kina\", \"中国\", \"86\", \".cn\", Continent.Asia),\n C(\"CO\", \"COL\", 170, \"Colombia\", \"Colombia\", \"Colombia\", \"57\", \".co\", Continent.SouthAmerica),\n C(\"KM\", \"COM\", 174, \"Comoros\", \"Komorerna\", \"Komori\", \"269\", \".km\", Continent.Africa),\n C(\"CG\", \"COG\", 178, \"Congo\", \"Kongo\", \"Congo\", \"242\", \".cg\", Continent.Africa),\n C(\n \"CD\",\n \"COD\",\n 180,\n \"Congo (Democratic Republic)\",\n \"Demokratiska republiken Kongo\",\n \"République démocratique du Congo\",\n \"243\",\n \".cd\",\n Continent.Africa,\n ),\n C(\n \"CR\",\n \"CRI\",\n 188,\n \"Costa Rica\",\n \"Costa Rica\",\n \"Costa Rica\",\n \"506\",\n \".cr\",\n Continent.NorthAmerica,\n ),\n C(\n \"CI\",\n \"CIV\",\n 384,\n \"Côte d'Ivoire\",\n \"Elfenbenskusten\",\n \"Côte d'Ivoire\",\n \"225\",\n \".ci\",\n Continent.Africa,\n ),\n C(\"HR\", \"HRV\", 191, \"Croatia\", \"Kroatien\", \"Hrvatska\", \"385\", \".hr\", Continent.Europe),\n C(\"CU\", \"CUB\", 192, \"Cuba\", \"Kuba\", \"Cuba\", \"53\", \".cu\", Continent.NorthAmerica),\n C(\"CW\", \"CUW\", 531, \"Curaçao\", \"Curaçao\", \"Curaçao\", \"599\", \".cw\", Continent.NorthAmerica),\n C(\"CY\", \"CYP\", 196, \"Cyprus\", \"Cypern\", \"Κύπρος\", \"357\", \".cy\", Continent.Europe),\n C(\"CZ\", \"CZE\", 203, \"Czechia\", \"Tjeckien\", \"Česko\", \"420\", \".cz\", Continent.Europe),\n C(\"DK\", \"DNK\", 208, \"Denmark\", \"Danmark\", \"Danmark\", \"45\", \".dk\", Continent.Europe),\n C(\"DJ\", \"DJI\", 262, \"Djibouti\", \"Djibouti\", \"Djibouti\", \"253\", \".dj\", Continent.Africa),\n C(\"DM\", \"DMA\", 212, \"Dominica\", \"Dominica\", \"Dominica\", \"1\", \".dm\", Continent.NorthAmerica),\n C(\n \"DO\",\n \"DOM\",\n 214,\n \"Dominican Republic\",\n \"Dominikanska republiken\",\n \"República Dominicana\",\n \"1\",\n \".do\",\n Continent.NorthAmerica,\n ),\n C(\"EC\", \"ECU\", 218, \"Ecuador\", \"Ecuador\", \"Ecuador\", \"593\", \".ec\", Continent.SouthAmerica),\n C(\"EG\", \"EGY\", 818, \"Egypt\", \"Egypten\", \"مصر\", \"20\", \".eg\", Continent.Africa),\n C(\n \"SV\",\n \"SLV\",\n 222,\n \"El Salvador\",\n \"El Salvador\",\n \"El Salvador\",\n \"503\",\n \".sv\",\n Continent.NorthAmerica,\n ),\n C(\n \"GQ\",\n \"GNQ\",\n 226,\n \"Equatorial Guinea\",\n \"Ekvatorialguinea\",\n \"Guinea Ecuatorial\",\n \"240\",\n \".gq\",\n Continent.Africa,\n ),\n C(\"ER\", \"ERI\", 232, \"Eritrea\", \"Eritrea\", \"ኤርትራ\", \"291\", \".er\", Continent.Africa),\n C(\"EE\", \"EST\", 233, \"Estonia\", \"Estland\", \"Eesti\", \"372\", \".ee\", Continent.Europe),\n C(\"SZ\", \"SWZ\", 748, \"Eswatini\", \"Eswatini\", \"eSwatini\", \"268\", \".sz\", Continent.Africa),\n C(\"ET\", \"ETH\", 231, \"Ethiopia\", \"Etiopien\", \"ኢትዮጵያ\", \"251\", \".et\", Continent.Africa),\n C(\"FJ\", \"FJI\", 242, \"Fiji\", \"Fiji\", \"Fiji\", \"679\", \".fj\", Continent.Oceania),\n C(\"FI\", \"FIN\", 246, \"Finland\", \"Finland\", \"Suomi\", \"358\", \".fi\", Continent.Europe),\n C(\"FR\", \"FRA\", 250, \"France\", \"Frankrike\", \"France\", \"33\", \".fr\", Continent.Europe),\n C(\"GA\", \"GAB\", 266, \"Gabon\", \"Gabon\", \"Gabon\", \"241\", \".ga\", Continent.Africa),\n C(\"GM\", \"GMB\", 270, \"Gambia\", \"Gambia\", \"Gambia\", \"220\", \".gm\", Continent.Africa),\n C(\"GE\", \"GEO\", 268, \"Georgia\", \"Georgien\", \"საქართველო\", \"995\", \".ge\", Continent.Asia),\n C(\"DE\", \"DEU\", 276, \"Germany\", \"Tyskland\", \"Deutschland\", \"49\", \".de\", Continent.Europe),\n C(\"GH\", \"GHA\", 288, \"Ghana\", \"Ghana\", \"Ghana\", \"233\", \".gh\", Continent.Africa),\n C(\"GI\", \"GIB\", 292, \"Gibraltar\", \"Gibraltar\", \"Gibraltar\", \"350\", \".gi\", Continent.Europe),\n C(\"GR\", \"GRC\", 300, \"Greece\", \"Grekland\", \"Ελλάδα\", \"30\", \".gr\", Continent.Europe),\n C(\n \"GL\",\n \"GRL\",\n 304,\n \"Greenland\",\n \"Grönland\",\n \"Kalaallit Nunaat\",\n \"299\",\n \".gl\",\n Continent.NorthAmerica,\n ),\n C(\"GD\", \"GRD\", 308, \"Grenada\", \"Grenada\", \"Grenada\", \"1\", \".gd\", Continent.NorthAmerica),\n C(\"GU\", \"GUM\", 316, \"Guam\", \"Guam\", \"Guam\", \"1\", \".gu\", Continent.Oceania),\n C(\"GT\", \"GTM\", 320, \"Guatemala\", \"Guatemala\", \"Guatemala\", \"502\", \".gt\", Continent.NorthAmerica),\n C(\"GG\", \"GGY\", 831, \"Guernsey\", \"Guernsey\", \"Guernsey\", \"44\", \".gg\", Continent.Europe),\n C(\"GN\", \"GIN\", 324, \"Guinea\", \"Guinea\", \"Guinée\", \"224\", \".gn\", Continent.Africa),\n C(\n \"GW\",\n \"GNB\",\n 624,\n \"Guinea-Bissau\",\n \"Guinea-Bissau\",\n \"Guiné-Bissau\",\n \"245\",\n \".gw\",\n Continent.Africa,\n ),\n C(\"GY\", \"GUY\", 328, \"Guyana\", \"Guyana\", \"Guyana\", \"592\", \".gy\", Continent.SouthAmerica),\n C(\"HT\", \"HTI\", 332, \"Haiti\", \"Haiti\", \"Haïti\", \"509\", \".ht\", Continent.NorthAmerica),\n C(\"HN\", \"HND\", 340, \"Honduras\", \"Honduras\", \"Honduras\", \"504\", \".hn\", Continent.NorthAmerica),\n C(\"HK\", \"HKG\", 344, \"Hong Kong\", \"Hongkong\", \"香港\", \"852\", \".hk\", Continent.Asia),\n C(\"HU\", \"HUN\", 348, \"Hungary\", \"Ungern\", \"Magyarország\", \"36\", \".hu\", Continent.Europe),\n C(\"IS\", \"ISL\", 352, \"Iceland\", \"Island\", \"Ísland\", \"354\", \".is\", Continent.Europe),\n C(\"IN\", \"IND\", 356, \"India\", \"Indien\", \"भारत\", \"91\", \".in\", Continent.Asia),\n C(\"ID\", \"IDN\", 360, \"Indonesia\", \"Indonesien\", \"Indonesia\", \"62\", \".id\", Continent.Asia),\n C(\"IR\", \"IRN\", 364, \"Iran\", \"Iran\", \"ایران\", \"98\", \".ir\", Continent.Asia),\n C(\"IQ\", \"IRQ\", 368, \"Iraq\", \"Irak\", \"العراق\", \"964\", \".iq\", Continent.Asia),\n C(\"IE\", \"IRL\", 372, \"Ireland\", \"Irland\", \"Éire\", \"353\", \".ie\", Continent.Europe),\n C(\"IM\", \"IMN\", 833, \"Isle of Man\", \"Isle of Man\", \"Isle of Man\", \"44\", \".im\", Continent.Europe),\n C(\"IL\", \"ISR\", 376, \"Israel\", \"Israel\", \"ישראל\", \"972\", \".il\", Continent.Asia),\n C(\"IT\", \"ITA\", 380, \"Italy\", \"Italien\", \"Italia\", \"39\", \".it\", Continent.Europe),\n C(\"JM\", \"JAM\", 388, \"Jamaica\", \"Jamaica\", \"Jamaica\", \"1\", \".jm\", Continent.NorthAmerica),\n C(\"JP\", \"JPN\", 392, \"Japan\", \"Japan\", \"日本\", \"81\", \".jp\", Continent.Asia),\n C(\"JE\", \"JEY\", 832, \"Jersey\", \"Jersey\", \"Jersey\", \"44\", \".je\", Continent.Europe),\n C(\"JO\", \"JOR\", 400, \"Jordan\", \"Jordanien\", \"الأردن\", \"962\", \".jo\", Continent.Asia),\n C(\"KZ\", \"KAZ\", 398, \"Kazakhstan\", \"Kazakstan\", \"Қазақстан\", \"7\", \".kz\", Continent.Asia),\n C(\"KE\", \"KEN\", 404, \"Kenya\", \"Kenya\", \"Kenya\", \"254\", \".ke\", Continent.Africa),\n C(\"KI\", \"KIR\", 296, \"Kiribati\", \"Kiribati\", \"Kiribati\", \"686\", \".ki\", Continent.Oceania),\n C(\"KP\", \"PRK\", 408, \"North Korea\", \"Nordkorea\", \"조선\", \"850\", \".kp\", Continent.Asia),\n C(\"KR\", \"KOR\", 410, \"South Korea\", \"Sydkorea\", \"대한민국\", \"82\", \".kr\", Continent.Asia),\n C(\"KW\", \"KWT\", 414, \"Kuwait\", \"Kuwait\", \"الكويت\", \"965\", \".kw\", Continent.Asia),\n C(\"KG\", \"KGZ\", 417, \"Kyrgyzstan\", \"Kirgizistan\", \"Кыргызстан\", \"996\", \".kg\", Continent.Asia),\n C(\"LA\", \"LAO\", 418, \"Laos\", \"Laos\", \"ລາວ\", \"856\", \".la\", Continent.Asia),\n C(\"LV\", \"LVA\", 428, \"Latvia\", \"Lettland\", \"Latvija\", \"371\", \".lv\", Continent.Europe),\n C(\"LB\", \"LBN\", 422, \"Lebanon\", \"Libanon\", \"لبنان\", \"961\", \".lb\", Continent.Asia),\n C(\"LS\", \"LSO\", 426, \"Lesotho\", \"Lesotho\", \"Lesotho\", \"266\", \".ls\", Continent.Africa),\n C(\"LR\", \"LBR\", 430, \"Liberia\", \"Liberia\", \"Liberia\", \"231\", \".lr\", Continent.Africa),\n C(\"LY\", \"LBY\", 434, \"Libya\", \"Libyen\", \"ليبيا\", \"218\", \".ly\", Continent.Africa),\n C(\n \"LI\",\n \"LIE\",\n 438,\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"423\",\n \".li\",\n Continent.Europe,\n ),\n C(\"LT\", \"LTU\", 440, \"Lithuania\", \"Litauen\", \"Lietuva\", \"370\", \".lt\", Continent.Europe),\n C(\"LU\", \"LUX\", 442, \"Luxembourg\", \"Luxemburg\", \"Lëtzebuerg\", \"352\", \".lu\", Continent.Europe),\n C(\"MO\", \"MAC\", 446, \"Macao\", \"Macao\", \"澳門\", \"853\", \".mo\", Continent.Asia),\n C(\"MG\", \"MDG\", 450, \"Madagascar\", \"Madagaskar\", \"Madagasikara\", \"261\", \".mg\", Continent.Africa),\n C(\"MW\", \"MWI\", 454, \"Malawi\", \"Malawi\", \"Malawi\", \"265\", \".mw\", Continent.Africa),\n C(\"MY\", \"MYS\", 458, \"Malaysia\", \"Malaysia\", \"Malaysia\", \"60\", \".my\", Continent.Asia),\n C(\"MV\", \"MDV\", 462, \"Maldives\", \"Maldiverna\", \"ދިވެހިރާއްޖެ\", \"960\", \".mv\", Continent.Asia),\n C(\"ML\", \"MLI\", 466, \"Mali\", \"Mali\", \"Mali\", \"223\", \".ml\", Continent.Africa),\n C(\"MT\", \"MLT\", 470, \"Malta\", \"Malta\", \"Malta\", \"356\", \".mt\", Continent.Europe),\n C(\n \"MH\",\n \"MHL\",\n 584,\n \"Marshall Islands\",\n \"Marshallöarna\",\n \"Marshall Islands\",\n \"692\",\n \".mh\",\n Continent.Oceania,\n ),\n C(\"MR\", \"MRT\", 478, \"Mauritania\", \"Mauretanien\", \"موريتانيا\", \"222\", \".mr\", Continent.Africa),\n C(\"MU\", \"MUS\", 480, \"Mauritius\", \"Mauritius\", \"Maurice\", \"230\", \".mu\", Continent.Africa),\n C(\"MX\", \"MEX\", 484, \"Mexico\", \"Mexiko\", \"México\", \"52\", \".mx\", Continent.NorthAmerica),\n C(\"FM\", \"FSM\", 583, \"Micronesia\", \"Mikronesien\", \"Micronesia\", \"691\", \".fm\", Continent.Oceania),\n C(\"MD\", \"MDA\", 498, \"Moldova\", \"Moldavien\", \"Moldova\", \"373\", \".md\", Continent.Europe),\n C(\"MC\", \"MCO\", 492, \"Monaco\", \"Monaco\", \"Monaco\", \"377\", \".mc\", Continent.Europe),\n C(\"MN\", \"MNG\", 496, \"Mongolia\", \"Mongoliet\", \"Монгол\", \"976\", \".mn\", Continent.Asia),\n C(\"ME\", \"MNE\", 499, \"Montenegro\", \"Montenegro\", \"Crna Gora\", \"382\", \".me\", Continent.Europe),\n C(\"MA\", \"MAR\", 504, \"Morocco\", \"Marocko\", \"المغرب\", \"212\", \".ma\", Continent.Africa),\n C(\"MZ\", \"MOZ\", 508, \"Mozambique\", \"Moçambique\", \"Moçambique\", \"258\", \".mz\", Continent.Africa),\n C(\"MM\", \"MMR\", 104, \"Myanmar\", \"Myanmar\", \"မြန်မာ\", \"95\", \".mm\", Continent.Asia),\n C(\"NA\", \"NAM\", 516, \"Namibia\", \"Namibia\", \"Namibia\", \"264\", \".na\", Continent.Africa),\n C(\"NR\", \"NRU\", 520, \"Nauru\", \"Nauru\", \"Nauru\", \"674\", \".nr\", Continent.Oceania),\n C(\"NP\", \"NPL\", 524, \"Nepal\", \"Nepal\", \"नेपाल\", \"977\", \".np\", Continent.Asia),\n C(\"NL\", \"NLD\", 528, \"Netherlands\", \"Nederländerna\", \"Nederland\", \"31\", \".nl\", Continent.Europe),\n C(\"NZ\", \"NZL\", 554, \"New Zealand\", \"Nya Zeeland\", \"Aotearoa\", \"64\", \".nz\", Continent.Oceania),\n C(\"NI\", \"NIC\", 558, \"Nicaragua\", \"Nicaragua\", \"Nicaragua\", \"505\", \".ni\", Continent.NorthAmerica),\n C(\"NE\", \"NER\", 562, \"Niger\", \"Niger\", \"Niger\", \"227\", \".ne\", Continent.Africa),\n C(\"NG\", \"NGA\", 566, \"Nigeria\", \"Nigeria\", \"Nigeria\", \"234\", \".ng\", Continent.Africa),\n C(\n \"MK\",\n \"MKD\",\n 807,\n \"North Macedonia\",\n \"Nordmakedonien\",\n \"Северна Македонија\",\n \"389\",\n \".mk\",\n Continent.Europe,\n ),\n C(\"NO\", \"NOR\", 578, \"Norway\", \"Norge\", \"Norge\", \"47\", \".no\", Continent.Europe),\n C(\"OM\", \"OMN\", 512, \"Oman\", \"Oman\", \"عمان\", \"968\", \".om\", Continent.Asia),\n C(\"PK\", \"PAK\", 586, \"Pakistan\", \"Pakistan\", \"پاکستان\", \"92\", \".pk\", Continent.Asia),\n C(\"PW\", \"PLW\", 585, \"Palau\", \"Palau\", \"Palau\", \"680\", \".pw\", Continent.Oceania),\n C(\"PS\", \"PSE\", 275, \"Palestine\", \"Palestina\", \"فلسطين\", \"970\", \".ps\", Continent.Asia),\n C(\"PA\", \"PAN\", 591, \"Panama\", \"Panama\", \"Panamá\", \"507\", \".pa\", Continent.NorthAmerica),\n C(\n \"PG\",\n \"PNG\",\n 598,\n \"Papua New Guinea\",\n \"Papua Nya Guinea\",\n \"Papua Niugini\",\n \"675\",\n \".pg\",\n Continent.Oceania,\n ),\n C(\"PY\", \"PRY\", 600, \"Paraguay\", \"Paraguay\", \"Paraguay\", \"595\", \".py\", Continent.SouthAmerica),\n C(\"PE\", \"PER\", 604, \"Peru\", \"Peru\", \"Perú\", \"51\", \".pe\", Continent.SouthAmerica),\n C(\"PH\", \"PHL\", 608, \"Philippines\", \"Filippinerna\", \"Pilipinas\", \"63\", \".ph\", Continent.Asia),\n C(\"PL\", \"POL\", 616, \"Poland\", \"Polen\", \"Polska\", \"48\", \".pl\", Continent.Europe),\n C(\"PT\", \"PRT\", 620, \"Portugal\", \"Portugal\", \"Portugal\", \"351\", \".pt\", Continent.Europe),\n C(\n \"PR\",\n \"PRI\",\n 630,\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"1\",\n \".pr\",\n Continent.NorthAmerica,\n ),\n C(\"QA\", \"QAT\", 634, \"Qatar\", \"Qatar\", \"قطر\", \"974\", \".qa\", Continent.Asia),\n C(\"RO\", \"ROU\", 642, \"Romania\", \"Rumänien\", \"România\", \"40\", \".ro\", Continent.Europe),\n C(\"RU\", \"RUS\", 643, \"Russia\", \"Ryssland\", \"Россия\", \"7\", \".ru\", Continent.Europe),\n C(\"RW\", \"RWA\", 646, \"Rwanda\", \"Rwanda\", \"Rwanda\", \"250\", \".rw\", Continent.Africa),\n C(\n \"KN\",\n \"KNA\",\n 659,\n \"Saint Kitts and Nevis\",\n \"Saint Kitts och Nevis\",\n \"Saint Kitts and Nevis\",\n \"1\",\n \".kn\",\n Continent.NorthAmerica,\n ),\n C(\n \"LC\",\n \"LCA\",\n 662,\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"1\",\n \".lc\",\n Continent.NorthAmerica,\n ),\n C(\n \"VC\",\n \"VCT\",\n 670,\n \"Saint Vincent and the Grenadines\",\n \"Saint Vincent och Grenadinerna\",\n \"Saint Vincent and the Grenadines\",\n \"1\",\n \".vc\",\n Continent.NorthAmerica,\n ),\n C(\"WS\", \"WSM\", 882, \"Samoa\", \"Samoa\", \"Sāmoa\", \"685\", \".ws\", Continent.Oceania),\n C(\"SM\", \"SMR\", 674, \"San Marino\", \"San Marino\", \"San Marino\", \"378\", \".sm\", Continent.Europe),\n C(\n \"ST\",\n \"STP\",\n 678,\n \"São Tomé and Príncipe\",\n \"São Tomé och Príncipe\",\n \"São Tomé e Príncipe\",\n \"239\",\n \".st\",\n Continent.Africa,\n ),\n C(\"SA\", \"SAU\", 682, \"Saudi Arabia\", \"Saudiarabien\", \"السعودية\", \"966\", \".sa\", Continent.Asia),\n C(\"SN\", \"SEN\", 686, \"Senegal\", \"Senegal\", \"Sénégal\", \"221\", \".sn\", Continent.Africa),\n C(\"RS\", \"SRB\", 688, \"Serbia\", \"Serbien\", \"Србија\", \"381\", \".rs\", Continent.Europe),\n C(\"SC\", \"SYC\", 690, \"Seychelles\", \"Seychellerna\", \"Seychelles\", \"248\", \".sc\", Continent.Africa),\n C(\n \"SL\",\n \"SLE\",\n 694,\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"232\",\n \".sl\",\n Continent.Africa,\n ),\n C(\"SG\", \"SGP\", 702, \"Singapore\", \"Singapore\", \"Singapore\", \"65\", \".sg\", Continent.Asia),\n C(\"SK\", \"SVK\", 703, \"Slovakia\", \"Slovakien\", \"Slovensko\", \"421\", \".sk\", Continent.Europe),\n C(\"SI\", \"SVN\", 705, \"Slovenia\", \"Slovenien\", \"Slovenija\", \"386\", \".si\", Continent.Europe),\n C(\n \"SB\",\n \"SLB\",\n 90,\n \"Solomon Islands\",\n \"Salomonöarna\",\n \"Solomon Islands\",\n \"677\",\n \".sb\",\n Continent.Oceania,\n ),\n C(\"SO\", \"SOM\", 706, \"Somalia\", \"Somalia\", \"Soomaaliya\", \"252\", \".so\", Continent.Africa),\n C(\"ZA\", \"ZAF\", 710, \"South Africa\", \"Sydafrika\", \"Suid-Afrika\", \"27\", \".za\", Continent.Africa),\n C(\"SS\", \"SSD\", 728, \"South Sudan\", \"Sydsudan\", \"South Sudan\", \"211\", \".ss\", Continent.Africa),\n C(\"ES\", \"ESP\", 724, \"Spain\", \"Spanien\", \"España\", \"34\", \".es\", Continent.Europe),\n C(\"LK\", \"LKA\", 144, \"Sri Lanka\", \"Sri Lanka\", \"ශ්රී ලංකාව\", \"94\", \".lk\", Continent.Asia),\n C(\"SD\", \"SDN\", 729, \"Sudan\", \"Sudan\", \"السودان\", \"249\", \".sd\", Continent.Africa),\n C(\"SR\", \"SUR\", 740, \"Suriname\", \"Surinam\", \"Suriname\", \"597\", \".sr\", Continent.SouthAmerica),\n C(\"SE\", \"SWE\", 752, \"Sweden\", \"Sverige\", \"Sverige\", \"46\", \".se\", Continent.Europe),\n C(\"CH\", \"CHE\", 756, \"Switzerland\", \"Schweiz\", \"Schweiz\", \"41\", \".ch\", Continent.Europe),\n C(\"SY\", \"SYR\", 760, \"Syria\", \"Syrien\", \"سوريا\", \"963\", \".sy\", Continent.Asia),\n C(\"TW\", \"TWN\", 158, \"Taiwan\", \"Taiwan\", \"臺灣\", \"886\", \".tw\", Continent.Asia),\n C(\"TJ\", \"TJK\", 762, \"Tajikistan\", \"Tadzjikistan\", \"Тоҷикистон\", \"992\", \".tj\", Continent.Asia),\n C(\"TZ\", \"TZA\", 834, \"Tanzania\", \"Tanzania\", \"Tanzania\", \"255\", \".tz\", Continent.Africa),\n C(\"TH\", \"THA\", 764, \"Thailand\", \"Thailand\", \"ประเทศไทย\", \"66\", \".th\", Continent.Asia),\n C(\"TL\", \"TLS\", 626, \"Timor-Leste\", \"Östtimor\", \"Timor-Leste\", \"670\", \".tl\", Continent.Asia),\n C(\"TG\", \"TGO\", 768, \"Togo\", \"Togo\", \"Togo\", \"228\", \".tg\", Continent.Africa),\n C(\"TO\", \"TON\", 776, \"Tonga\", \"Tonga\", \"Tonga\", \"676\", \".to\", Continent.Oceania),\n C(\n \"TT\",\n \"TTO\",\n 780,\n \"Trinidad and Tobago\",\n \"Trinidad och Tobago\",\n \"Trinidad and Tobago\",\n \"1\",\n \".tt\",\n Continent.NorthAmerica,\n ),\n C(\"TN\", \"TUN\", 788, \"Tunisia\", \"Tunisien\", \"تونس\", \"216\", \".tn\", Continent.Africa),\n C(\"TR\", \"TUR\", 792, \"Turkey\", \"Turkiet\", \"Türkiye\", \"90\", \".tr\", Continent.Asia),\n C(\"TM\", \"TKM\", 795, \"Turkmenistan\", \"Turkmenistan\", \"Türkmenistan\", \"993\", \".tm\", Continent.Asia),\n C(\"TV\", \"TUV\", 798, \"Tuvalu\", \"Tuvalu\", \"Tuvalu\", \"688\", \".tv\", Continent.Oceania),\n C(\"UG\", \"UGA\", 800, \"Uganda\", \"Uganda\", \"Uganda\", \"256\", \".ug\", Continent.Africa),\n C(\"UA\", \"UKR\", 804, \"Ukraine\", \"Ukraina\", \"Україна\", \"380\", \".ua\", Continent.Europe),\n C(\n \"AE\",\n \"ARE\",\n 784,\n \"United Arab Emirates\",\n \"Förenade Arabemiraten\",\n \"الإمارات\",\n \"971\",\n \".ae\",\n Continent.Asia,\n ),\n C(\n \"GB\",\n \"GBR\",\n 826,\n \"United Kingdom\",\n \"Storbritannien\",\n \"United Kingdom\",\n \"44\",\n \".uk\",\n Continent.Europe,\n ),\n C(\n \"US\",\n \"USA\",\n 840,\n \"United States\",\n \"Förenta staterna\",\n \"United States\",\n \"1\",\n \".us\",\n Continent.NorthAmerica,\n ),\n C(\"UY\", \"URY\", 858, \"Uruguay\", \"Uruguay\", \"Uruguay\", \"598\", \".uy\", Continent.SouthAmerica),\n C(\"UZ\", \"UZB\", 860, \"Uzbekistan\", \"Uzbekistan\", \"Oʻzbekiston\", \"998\", \".uz\", Continent.Asia),\n C(\"VU\", \"VUT\", 548, \"Vanuatu\", \"Vanuatu\", \"Vanuatu\", \"678\", \".vu\", Continent.Oceania),\n C(\n \"VA\",\n \"VAT\",\n 336,\n \"Vatican City\",\n \"Vatikanstaten\",\n \"Città del Vaticano\",\n \"379\",\n \".va\",\n Continent.Europe,\n ),\n C(\"VE\", \"VEN\", 862, \"Venezuela\", \"Venezuela\", \"Venezuela\", \"58\", \".ve\", Continent.SouthAmerica),\n C(\"VN\", \"VNM\", 704, \"Vietnam\", \"Vietnam\", \"Việt Nam\", \"84\", \".vn\", Continent.Asia),\n C(\"YE\", \"YEM\", 887, \"Yemen\", \"Jemen\", \"اليمن\", \"967\", \".ye\", Continent.Asia),\n C(\"ZM\", \"ZMB\", 894, \"Zambia\", \"Zambia\", \"Zambia\", \"260\", \".zm\", Continent.Africa),\n C(\"ZW\", \"ZWE\", 716, \"Zimbabwe\", \"Zimbabwe\", \"Zimbabwe\", \"263\", \".zw\", Continent.Africa),\n C(\"AX\", \"ALA\", 248, \"Åland Islands\", \"Åland\", \"Åland\", \"358\", \".ax\", Continent.Europe),\n C(\"FO\", \"FRO\", 234, \"Faroe Islands\", \"Färöarna\", \"Føroyar\", \"298\", \".fo\", Continent.Europe),\n C(\"XK\", \"XKX\", 0, \"Kosovo\", \"Kosovo\", \"Kosova\", \"383\", \".xk\", Continent.Europe),\n];\n","/** Geographic coordinates (latitude, longitude) for each country, sourced from Wikidata P625. */\nexport const COUNTRY_COORDINATES: Readonly<Record<string, readonly [number, number]>> =\n Object.freeze({\n AF: [33.0, 65.0],\n AL: [41.0, 20.0],\n DZ: [28.0, 3.0],\n AS: [-14.27, -170.7],\n AD: [42.5, 1.5],\n AO: [-12.5, 18.5],\n AG: [17.05, -61.8],\n AR: [-34.0, -64.0],\n AM: [40.0, 45.0],\n AW: [12.5, -69.97],\n AU: [-27.0, 133.0],\n AT: [47.33, 13.33],\n AZ: [40.5, 47.5],\n BS: [24.25, -76.0],\n BH: [26.0, 50.55],\n BD: [24.0, 90.0],\n BB: [13.17, -59.53],\n BY: [53.0, 28.0],\n BE: [50.83, 4.0],\n BZ: [17.25, -88.75],\n BJ: [9.5, 2.25],\n BM: [32.33, -64.75],\n BT: [27.5, 90.5],\n BO: [-17.0, -65.0],\n BA: [44.0, 18.0],\n BW: [-22.0, 24.0],\n BR: [-10.0, -55.0],\n BN: [4.5, 114.67],\n BG: [43.0, 25.0],\n BF: [13.0, -2.0],\n BI: [-3.5, 30.0],\n CV: [16.0, -24.0],\n KH: [13.0, 105.0],\n CM: [6.0, 12.0],\n CA: [60.0, -95.0],\n CF: [7.0, 21.0],\n TD: [15.0, 19.0],\n CL: [-30.0, -71.0],\n CN: [35.0, 105.0],\n CO: [4.0, -72.0],\n KM: [-12.17, 44.25],\n CG: [-1.0, 15.0],\n CD: [0.0, 25.0],\n CR: [10.0, -84.0],\n CI: [8.0, -5.0],\n HR: [45.17, 15.5],\n CU: [21.5, -80.0],\n CW: [12.17, -68.98],\n CY: [35.0, 33.0],\n CZ: [49.75, 15.5],\n DK: [56.0, 10.0],\n DJ: [11.5, 43.0],\n DM: [15.42, -61.33],\n DO: [19.0, -70.67],\n EC: [-2.0, -77.5],\n EG: [27.0, 30.0],\n SV: [13.83, -88.92],\n GQ: [2.0, 10.0],\n ER: [15.0, 39.0],\n EE: [59.0, 26.0],\n SZ: [-26.5, 31.5],\n ET: [8.0, 38.0],\n FJ: [-18.0, 175.0],\n FI: [64.0, 26.0],\n FR: [46.0, 2.0],\n GA: [-1.0, 11.75],\n GM: [13.47, -16.57],\n GE: [42.0, 43.5],\n DE: [51.0, 9.0],\n GH: [8.0, -2.0],\n GI: [36.13, -5.35],\n GR: [39.0, 22.0],\n GL: [72.0, -40.0],\n GD: [12.12, -61.67],\n GU: [13.47, 144.78],\n GT: [15.5, -90.25],\n GG: [49.45, -2.54],\n GN: [11.0, -10.0],\n GW: [12.0, -15.0],\n GY: [5.0, -59.0],\n HT: [19.0, -72.42],\n HN: [15.0, -86.5],\n HK: [22.25, 114.17],\n HU: [47.0, 20.0],\n IS: [65.0, -18.0],\n IN: [20.0, 77.0],\n ID: [-5.0, 120.0],\n IR: [32.0, 53.0],\n IQ: [33.0, 44.0],\n IE: [53.0, -8.0],\n IM: [54.23, -4.55],\n IL: [31.5, 34.75],\n IT: [42.83, 12.83],\n JM: [18.25, -77.5],\n JP: [36.0, 138.0],\n JE: [49.21, -2.13],\n JO: [31.0, 36.0],\n KZ: [48.0, 68.0],\n KE: [1.0, 38.0],\n KI: [1.42, 173.0],\n KP: [40.0, 127.0],\n KR: [37.0, 127.5],\n KW: [29.34, 47.66],\n KG: [41.0, 75.0],\n LA: [18.0, 105.0],\n LV: [57.0, 25.0],\n LB: [33.83, 35.83],\n LS: [-29.5, 28.5],\n LR: [6.5, -9.5],\n LY: [25.0, 17.0],\n LI: [47.17, 9.53],\n LT: [56.0, 24.0],\n LU: [49.75, 6.17],\n MO: [22.17, 113.55],\n MG: [-20.0, 47.0],\n MW: [-13.5, 34.0],\n MY: [2.5, 112.5],\n MV: [3.25, 73.0],\n ML: [17.0, -4.0],\n MT: [35.83, 14.58],\n MH: [9.0, 168.0],\n MR: [20.0, -12.0],\n MU: [-20.28, 57.55],\n MX: [23.0, -102.0],\n FM: [6.92, 158.25],\n MD: [47.0, 29.0],\n MC: [43.73, 7.42],\n MN: [46.0, 105.0],\n ME: [42.0, 19.0],\n MA: [32.0, -5.0],\n MZ: [-18.25, 35.0],\n MM: [22.0, 98.0],\n NA: [-22.0, 17.0],\n NR: [-0.53, 166.92],\n NP: [28.0, 84.0],\n NL: [52.5, 5.75],\n NZ: [-41.0, 174.0],\n NI: [13.0, -85.0],\n NE: [16.0, 8.0],\n NG: [10.0, 8.0],\n MK: [41.83, 22.0],\n NO: [62.0, 10.0],\n OM: [21.0, 57.0],\n PK: [30.0, 70.0],\n PW: [7.5, 134.5],\n PS: [32.0, 35.25],\n PA: [9.0, -80.0],\n PG: [-6.0, 147.0],\n PY: [-23.0, -58.0],\n PE: [-10.0, -76.0],\n PH: [13.0, 122.0],\n PL: [52.0, 20.0],\n PT: [39.5, -8.0],\n PR: [18.25, -66.5],\n QA: [25.5, 51.25],\n RO: [46.0, 25.0],\n RU: [60.0, 100.0],\n RW: [-2.0, 30.0],\n KN: [17.33, -62.75],\n LC: [13.88, -61.13],\n VC: [13.25, -61.2],\n WS: [-13.58, -172.33],\n SM: [43.77, 12.42],\n ST: [1.0, 7.0],\n SA: [25.0, 45.0],\n SN: [14.0, -14.0],\n RS: [44.0, 21.0],\n SC: [-4.58, 55.67],\n SL: [8.5, -11.5],\n SG: [1.37, 103.8],\n SK: [48.67, 19.5],\n SI: [46.12, 14.82],\n SB: [-8.0, 159.0],\n SO: [10.0, 49.0],\n ZA: [-29.0, 24.0],\n SS: [8.0, 30.0],\n ES: [40.0, -4.0],\n LK: [7.0, 81.0],\n SD: [15.0, 30.0],\n SR: [4.0, -56.0],\n SE: [62.0, 15.0],\n CH: [47.0, 8.0],\n SY: [35.0, 38.0],\n TW: [23.5, 121.0],\n TJ: [39.0, 71.0],\n TZ: [-6.0, 35.0],\n TH: [15.0, 100.0],\n TL: [-8.55, 125.73],\n TG: [8.0, 1.17],\n TO: [-20.0, -175.0],\n TT: [11.0, -61.0],\n TN: [34.0, 9.0],\n TR: [39.0, 35.0],\n TM: [40.0, 60.0],\n TV: [-8.0, 178.0],\n UG: [1.0, 32.0],\n UA: [49.0, 32.0],\n AE: [24.0, 54.0],\n GB: [54.0, -2.0],\n US: [38.0, -97.0],\n UY: [-33.0, -56.0],\n UZ: [41.0, 64.0],\n VU: [-16.0, 167.0],\n VA: [41.9, 12.45],\n VE: [8.0, -66.0],\n VN: [16.0, 106.0],\n YE: [15.0, 48.0],\n ZM: [-15.0, 30.0],\n ZW: [-20.0, 30.0],\n AX: [60.12, 19.9],\n FO: [62.0, -7.0],\n XK: [42.67, 21.17],\n } as const);\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\n/**\n * The capital city of a country (`huvudstad`), with names in English, Swedish,\n * and the country's native language, plus its geographic coordinates.\n */\nexport class CountryCapital {\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly coordinate: GeoCoordinate;\n\n /** @internal */\n constructor(\n englishName: string,\n localizedName: string,\n nativeName: string,\n coordinate: GeoCoordinate,\n ) {\n this.englishName = englishName;\n this.localizedName = localizedName;\n this.nativeName = nativeName;\n this.coordinate = coordinate;\n }\n\n /** Capital city name in the current display language. */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n toString(): string {\n return this.displayName;\n }\n}\n","import { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\ninterface RawCapital {\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst RAW: Readonly<Record<string, RawCapital>> = {\n AF: { en: \"Kabul\", sv: \"Kabul\", native: \"کابل\", lat: 34.53, lon: 69.17 },\n AL: { en: \"Tirana\", sv: \"Tirana\", native: \"Tiranë\", lat: 41.33, lon: 19.82 },\n DZ: { en: \"Algiers\", sv: \"Alger\", native: \"الجزائر\", lat: 36.75, lon: 3.04 },\n AD: {\n en: \"Andorra la Vella\",\n sv: \"Andorra la Vella\",\n native: \"Andorra la Vella\",\n lat: 42.51,\n lon: 1.52,\n },\n AO: { en: \"Luanda\", sv: \"Luanda\", native: \"Luanda\", lat: -8.84, lon: 13.23 },\n AG: { en: \"St. John's\", sv: \"Saint John's\", native: \"St. John's\", lat: 17.12, lon: -61.85 },\n AR: { en: \"Buenos Aires\", sv: \"Buenos Aires\", native: \"Buenos Aires\", lat: -34.61, lon: -58.38 },\n AM: { en: \"Yerevan\", sv: \"Jerevan\", native: \"Երևան\", lat: 40.18, lon: 44.51 },\n AU: { en: \"Canberra\", sv: \"Canberra\", native: \"Canberra\", lat: -35.28, lon: 149.13 },\n AT: { en: \"Vienna\", sv: \"Wien\", native: \"Wien\", lat: 48.21, lon: 16.37 },\n AZ: { en: \"Baku\", sv: \"Baku\", native: \"Bakı\", lat: 40.41, lon: 49.87 },\n BS: { en: \"Nassau\", sv: \"Nassau\", native: \"Nassau\", lat: 25.06, lon: -77.34 },\n BH: { en: \"Manama\", sv: \"Manama\", native: \"المنامة\", lat: 26.23, lon: 50.59 },\n BD: { en: \"Dhaka\", sv: \"Dhaka\", native: \"ঢাকা\", lat: 23.71, lon: 90.41 },\n BB: { en: \"Bridgetown\", sv: \"Bridgetown\", native: \"Bridgetown\", lat: 13.1, lon: -59.62 },\n BY: { en: \"Minsk\", sv: \"Minsk\", native: \"Мінск\", lat: 53.9, lon: 27.57 },\n BE: { en: \"Brussels\", sv: \"Bryssel\", native: \"Bruxelles\", lat: 50.85, lon: 4.35 },\n BZ: { en: \"Belmopan\", sv: \"Belmopan\", native: \"Belmopan\", lat: 17.25, lon: -88.77 },\n BJ: { en: \"Porto-Novo\", sv: \"Porto-Novo\", native: \"Porto-Novo\", lat: 6.5, lon: 2.6 },\n BT: { en: \"Thimphu\", sv: \"Thimphu\", native: \"ཐིམ་ཕུ\", lat: 27.47, lon: 89.64 },\n BO: { en: \"Sucre\", sv: \"Sucre\", native: \"Sucre\", lat: -19.04, lon: -65.26 },\n BA: { en: \"Sarajevo\", sv: \"Sarajevo\", native: \"Sarajevo\", lat: 43.86, lon: 18.41 },\n BW: { en: \"Gaborone\", sv: \"Gaborone\", native: \"Gaborone\", lat: -24.65, lon: 25.91 },\n BR: { en: \"Brasília\", sv: \"Brasília\", native: \"Brasília\", lat: -15.79, lon: -47.88 },\n BN: {\n en: \"Bandar Seri Begawan\",\n sv: \"Bandar Seri Begawan\",\n native: \"Bandar Seri Begawan\",\n lat: 4.94,\n lon: 114.95,\n },\n BG: { en: \"Sofia\", sv: \"Sofia\", native: \"София\", lat: 42.7, lon: 23.32 },\n BF: { en: \"Ouagadougou\", sv: \"Ouagadougou\", native: \"Ouagadougou\", lat: 12.37, lon: -1.52 },\n BI: { en: \"Gitega\", sv: \"Gitega\", native: \"Gitega\", lat: -3.43, lon: 29.93 },\n CV: { en: \"Praia\", sv: \"Praia\", native: \"Praia\", lat: 14.92, lon: -23.51 },\n KH: { en: \"Phnom Penh\", sv: \"Phnom Penh\", native: \"ភ្នំពេញ\", lat: 11.56, lon: 104.93 },\n CM: { en: \"Yaoundé\", sv: \"Yaoundé\", native: \"Yaoundé\", lat: 3.87, lon: 11.52 },\n CA: { en: \"Ottawa\", sv: \"Ottawa\", native: \"Ottawa\", lat: 45.42, lon: -75.7 },\n CF: { en: \"Bangui\", sv: \"Bangui\", native: \"Bangui\", lat: 4.37, lon: 18.59 },\n TD: { en: \"N'Djamena\", sv: \"N'Djamena\", native: \"N'Djamena\", lat: 12.11, lon: 15.05 },\n CL: { en: \"Santiago\", sv: \"Santiago\", native: \"Santiago\", lat: -33.45, lon: -70.67 },\n CN: { en: \"Beijing\", sv: \"Peking\", native: \"北京\", lat: 39.91, lon: 116.39 },\n CO: { en: \"Bogotá\", sv: \"Bogotá\", native: \"Bogotá\", lat: 4.71, lon: -74.07 },\n KM: { en: \"Moroni\", sv: \"Moroni\", native: \"Moroni\", lat: -11.7, lon: 43.26 },\n CG: { en: \"Brazzaville\", sv: \"Brazzaville\", native: \"Brazzaville\", lat: -4.27, lon: 15.28 },\n CD: { en: \"Kinshasa\", sv: \"Kinshasa\", native: \"Kinshasa\", lat: -4.32, lon: 15.31 },\n CR: { en: \"San José\", sv: \"San José\", native: \"San José\", lat: 9.93, lon: -84.08 },\n CI: { en: \"Yamoussoukro\", sv: \"Yamoussoukro\", native: \"Yamoussoukro\", lat: 6.82, lon: -5.28 },\n HR: { en: \"Zagreb\", sv: \"Zagreb\", native: \"Zagreb\", lat: 45.81, lon: 15.98 },\n CU: { en: \"Havana\", sv: \"Havanna\", native: \"La Habana\", lat: 23.13, lon: -82.38 },\n CY: { en: \"Nicosia\", sv: \"Nicosia\", native: \"Λευκωσία\", lat: 35.17, lon: 33.37 },\n CZ: { en: \"Prague\", sv: \"Prag\", native: \"Praha\", lat: 50.09, lon: 14.42 },\n DK: { en: \"Copenhagen\", sv: \"Köpenhamn\", native: \"København\", lat: 55.68, lon: 12.57 },\n DJ: { en: \"Djibouti\", sv: \"Djibouti\", native: \"Djibouti\", lat: 11.59, lon: 43.15 },\n DM: { en: \"Roseau\", sv: \"Roseau\", native: \"Roseau\", lat: 15.3, lon: -61.39 },\n DO: { en: \"Santo Domingo\", sv: \"Santo Domingo\", native: \"Santo Domingo\", lat: 18.47, lon: -69.9 },\n EC: { en: \"Quito\", sv: \"Quito\", native: \"Quito\", lat: -0.18, lon: -78.47 },\n EG: { en: \"Cairo\", sv: \"Kairo\", native: \"القاهرة\", lat: 30.04, lon: 31.24 },\n SV: { en: \"San Salvador\", sv: \"San Salvador\", native: \"San Salvador\", lat: 13.69, lon: -89.19 },\n GQ: { en: \"Malabo\", sv: \"Malabo\", native: \"Malabo\", lat: 3.75, lon: 8.78 },\n ER: { en: \"Asmara\", sv: \"Asmara\", native: \"ኣስመራ\", lat: 15.33, lon: 38.93 },\n EE: { en: \"Tallinn\", sv: \"Tallinn\", native: \"Tallinn\", lat: 59.44, lon: 24.75 },\n SZ: { en: \"Mbabane\", sv: \"Mbabane\", native: \"Mbabane\", lat: -26.32, lon: 31.13 },\n ET: { en: \"Addis Ababa\", sv: \"Addis Abeba\", native: \"አዲስ አበባ\", lat: 9.02, lon: 38.75 },\n FJ: { en: \"Suva\", sv: \"Suva\", native: \"Suva\", lat: -18.14, lon: 178.44 },\n FI: { en: \"Helsinki\", sv: \"Helsingfors\", native: \"Helsinki\", lat: 60.17, lon: 24.94 },\n FR: { en: \"Paris\", sv: \"Paris\", native: \"Paris\", lat: 48.86, lon: 2.35 },\n GA: { en: \"Libreville\", sv: \"Libreville\", native: \"Libreville\", lat: 0.39, lon: 9.45 },\n GM: { en: \"Banjul\", sv: \"Banjul\", native: \"Banjul\", lat: 13.45, lon: -16.58 },\n GE: { en: \"Tbilisi\", sv: \"Tbilisi\", native: \"თბილისი\", lat: 41.69, lon: 44.8 },\n DE: { en: \"Berlin\", sv: \"Berlin\", native: \"Berlin\", lat: 52.52, lon: 13.41 },\n GH: { en: \"Accra\", sv: \"Accra\", native: \"Accra\", lat: 5.56, lon: -0.19 },\n GR: { en: \"Athens\", sv: \"Aten\", native: \"Αθήνα\", lat: 37.98, lon: 23.73 },\n GD: { en: \"St. George's\", sv: \"Saint George's\", native: \"St. George's\", lat: 12.05, lon: -61.75 },\n GT: {\n en: \"Guatemala City\",\n sv: \"Guatemala City\",\n native: \"Ciudad de Guatemala\",\n lat: 14.63,\n lon: -90.51,\n },\n GN: { en: \"Conakry\", sv: \"Conakry\", native: \"Conakry\", lat: 9.54, lon: -13.68 },\n GW: { en: \"Bissau\", sv: \"Bissau\", native: \"Bissau\", lat: 11.86, lon: -15.6 },\n GY: { en: \"Georgetown\", sv: \"Georgetown\", native: \"Georgetown\", lat: 6.8, lon: -58.16 },\n HT: { en: \"Port-au-Prince\", sv: \"Port-au-Prince\", native: \"Pòtoprens\", lat: 18.54, lon: -72.34 },\n HN: { en: \"Tegucigalpa\", sv: \"Tegucigalpa\", native: \"Tegucigalpa\", lat: 14.1, lon: -87.22 },\n HK: { en: \"Hong Kong\", sv: \"Hongkong\", native: \"香港\", lat: 22.28, lon: 114.16 },\n HU: { en: \"Budapest\", sv: \"Budapest\", native: \"Budapest\", lat: 47.5, lon: 19.04 },\n IS: { en: \"Reykjavik\", sv: \"Reykjavik\", native: \"Reykjavík\", lat: 64.14, lon: -21.9 },\n IN: { en: \"New Delhi\", sv: \"New Delhi\", native: \"नई दिल्ली\", lat: 28.61, lon: 77.21 },\n ID: { en: \"Jakarta\", sv: \"Jakarta\", native: \"Jakarta\", lat: -6.21, lon: 106.85 },\n IR: { en: \"Tehran\", sv: \"Teheran\", native: \"تهران\", lat: 35.69, lon: 51.39 },\n IQ: { en: \"Baghdad\", sv: \"Bagdad\", native: \"بغداد\", lat: 33.34, lon: 44.4 },\n IE: { en: \"Dublin\", sv: \"Dublin\", native: \"Baile Átha Cliath\", lat: 53.35, lon: -6.26 },\n IL: { en: \"Jerusalem\", sv: \"Jerusalem\", native: \"ירושלים\", lat: 31.77, lon: 35.23 },\n IT: { en: \"Rome\", sv: \"Rom\", native: \"Roma\", lat: 41.9, lon: 12.5 },\n JM: { en: \"Kingston\", sv: \"Kingston\", native: \"Kingston\", lat: 18.0, lon: -76.79 },\n JP: { en: \"Tokyo\", sv: \"Tokyo\", native: \"東京\", lat: 35.68, lon: 139.69 },\n JO: { en: \"Amman\", sv: \"Amman\", native: \"عمّان\", lat: 31.95, lon: 35.93 },\n KZ: { en: \"Astana\", sv: \"Astana\", native: \"Астана\", lat: 51.17, lon: 71.43 },\n KE: { en: \"Nairobi\", sv: \"Nairobi\", native: \"Nairobi\", lat: -1.29, lon: 36.82 },\n KI: { en: \"Tarawa\", sv: \"Tarawa\", native: \"Tarawa\", lat: 1.45, lon: 173.0 },\n KP: { en: \"Pyongyang\", sv: \"Pyongyang\", native: \"평양\", lat: 39.02, lon: 125.75 },\n KR: { en: \"Seoul\", sv: \"Seoul\", native: \"서울\", lat: 37.57, lon: 126.98 },\n KW: { en: \"Kuwait City\", sv: \"Kuwait City\", native: \"مدينة الكويت\", lat: 29.37, lon: 47.98 },\n KG: { en: \"Bishkek\", sv: \"Bisjkek\", native: \"Бишкек\", lat: 42.87, lon: 74.59 },\n LA: { en: \"Vientiane\", sv: \"Vientiane\", native: \"ວຽງຈັນ\", lat: 17.97, lon: 102.63 },\n LV: { en: \"Riga\", sv: \"Riga\", native: \"Rīga\", lat: 56.95, lon: 24.11 },\n LB: { en: \"Beirut\", sv: \"Beirut\", native: \"بيروت\", lat: 33.89, lon: 35.5 },\n LS: { en: \"Maseru\", sv: \"Maseru\", native: \"Maseru\", lat: -29.31, lon: 27.48 },\n LR: { en: \"Monrovia\", sv: \"Monrovia\", native: \"Monrovia\", lat: 6.3, lon: -10.8 },\n LY: { en: \"Tripoli\", sv: \"Tripoli\", native: \"طرابلس\", lat: 32.9, lon: 13.18 },\n LI: { en: \"Vaduz\", sv: \"Vaduz\", native: \"Vaduz\", lat: 47.14, lon: 9.52 },\n LT: { en: \"Vilnius\", sv: \"Vilnius\", native: \"Vilnius\", lat: 54.69, lon: 25.28 },\n LU: { en: \"Luxembourg City\", sv: \"Luxemburg\", native: \"Lëtzebuerg\", lat: 49.61, lon: 6.13 },\n MO: { en: \"Macao\", sv: \"Macao\", native: \"澳門\", lat: 22.2, lon: 113.54 },\n MG: { en: \"Antananarivo\", sv: \"Antananarivo\", native: \"Antananarivo\", lat: -18.91, lon: 47.53 },\n MW: { en: \"Lilongwe\", sv: \"Lilongwe\", native: \"Lilongwe\", lat: -13.97, lon: 33.79 },\n MY: { en: \"Kuala Lumpur\", sv: \"Kuala Lumpur\", native: \"Kuala Lumpur\", lat: 3.14, lon: 101.69 },\n MV: { en: \"Malé\", sv: \"Malé\", native: \"މާލެ\", lat: 4.18, lon: 73.51 },\n ML: { en: \"Bamako\", sv: \"Bamako\", native: \"Bamako\", lat: 12.65, lon: -8.0 },\n MT: { en: \"Valletta\", sv: \"Valletta\", native: \"Valletta\", lat: 35.9, lon: 14.51 },\n MH: { en: \"Majuro\", sv: \"Majuro\", native: \"Majuro\", lat: 7.09, lon: 171.38 },\n MR: { en: \"Nouakchott\", sv: \"Nouakchott\", native: \"نواكشوط\", lat: 18.09, lon: -15.98 },\n MU: { en: \"Port Louis\", sv: \"Port Louis\", native: \"Port Louis\", lat: -20.16, lon: 57.5 },\n MX: { en: \"Mexico City\", sv: \"Mexico City\", native: \"Ciudad de México\", lat: 19.43, lon: -99.13 },\n FM: { en: \"Palikir\", sv: \"Palikir\", native: \"Palikir\", lat: 6.92, lon: 158.16 },\n MD: { en: \"Chișinău\", sv: \"Chișinău\", native: \"Chișinău\", lat: 47.01, lon: 28.86 },\n MC: { en: \"Monaco\", sv: \"Monaco\", native: \"Monaco\", lat: 43.73, lon: 7.42 },\n MN: { en: \"Ulaanbaatar\", sv: \"Ulaanbaatar\", native: \"Улаанбаатар\", lat: 47.91, lon: 106.91 },\n ME: { en: \"Podgorica\", sv: \"Podgorica\", native: \"Podgorica\", lat: 42.44, lon: 19.26 },\n MA: { en: \"Rabat\", sv: \"Rabat\", native: \"الرباط\", lat: 34.01, lon: -6.84 },\n MZ: { en: \"Maputo\", sv: \"Maputo\", native: \"Maputo\", lat: -25.97, lon: 32.57 },\n MM: { en: \"Naypyidaw\", sv: \"Naypyidaw\", native: \"နေပြည်တော်\", lat: 19.76, lon: 96.07 },\n NA: { en: \"Windhoek\", sv: \"Windhoek\", native: \"Windhoek\", lat: -22.57, lon: 17.08 },\n NR: { en: \"Yaren\", sv: \"Yaren\", native: \"Yaren\", lat: -0.55, lon: 166.93 },\n NP: { en: \"Kathmandu\", sv: \"Kathmandu\", native: \"काठमाडौं\", lat: 27.7, lon: 85.32 },\n NL: { en: \"Amsterdam\", sv: \"Amsterdam\", native: \"Amsterdam\", lat: 52.37, lon: 4.9 },\n NZ: { en: \"Wellington\", sv: \"Wellington\", native: \"Wellington\", lat: -41.29, lon: 174.78 },\n NI: { en: \"Managua\", sv: \"Managua\", native: \"Managua\", lat: 12.15, lon: -86.27 },\n NE: { en: \"Niamey\", sv: \"Niamey\", native: \"Niamey\", lat: 13.51, lon: 2.11 },\n NG: { en: \"Abuja\", sv: \"Abuja\", native: \"Abuja\", lat: 9.06, lon: 7.49 },\n MK: { en: \"Skopje\", sv: \"Skopje\", native: \"Скопје\", lat: 42.0, lon: 21.43 },\n NO: { en: \"Oslo\", sv: \"Oslo\", native: \"Oslo\", lat: 59.91, lon: 10.75 },\n OM: { en: \"Muscat\", sv: \"Muskat\", native: \"مسقط\", lat: 23.59, lon: 58.54 },\n PK: { en: \"Islamabad\", sv: \"Islamabad\", native: \"اسلام آباد\", lat: 33.69, lon: 73.04 },\n PW: { en: \"Ngerulmud\", sv: \"Ngerulmud\", native: \"Ngerulmud\", lat: 7.5, lon: 134.62 },\n PS: { en: \"Ramallah\", sv: \"Ramallah\", native: \"رام الله\", lat: 31.9, lon: 35.2 },\n PA: { en: \"Panama City\", sv: \"Panama City\", native: \"Ciudad de Panamá\", lat: 8.98, lon: -79.52 },\n PG: { en: \"Port Moresby\", sv: \"Port Moresby\", native: \"Port Moresby\", lat: -9.48, lon: 147.15 },\n PY: { en: \"Asunción\", sv: \"Asunción\", native: \"Asunción\", lat: -25.26, lon: -57.58 },\n PE: { en: \"Lima\", sv: \"Lima\", native: \"Lima\", lat: -12.05, lon: -77.04 },\n PH: { en: \"Manila\", sv: \"Manila\", native: \"Maynila\", lat: 14.6, lon: 120.98 },\n PL: { en: \"Warsaw\", sv: \"Warszawa\", native: \"Warszawa\", lat: 52.23, lon: 21.01 },\n PT: { en: \"Lisbon\", sv: \"Lissabon\", native: \"Lisboa\", lat: 38.72, lon: -9.14 },\n PR: { en: \"San Juan\", sv: \"San Juan\", native: \"San Juan\", lat: 18.47, lon: -66.11 },\n QA: { en: \"Doha\", sv: \"Doha\", native: \"الدوحة\", lat: 25.29, lon: 51.53 },\n RO: { en: \"Bucharest\", sv: \"Bukarest\", native: \"București\", lat: 44.43, lon: 26.1 },\n RU: { en: \"Moscow\", sv: \"Moskva\", native: \"Москва\", lat: 55.76, lon: 37.62 },\n RW: { en: \"Kigali\", sv: \"Kigali\", native: \"Kigali\", lat: -1.94, lon: 30.06 },\n KN: { en: \"Basseterre\", sv: \"Basseterre\", native: \"Basseterre\", lat: 17.3, lon: -62.72 },\n LC: { en: \"Castries\", sv: \"Castries\", native: \"Castries\", lat: 14.01, lon: -61.0 },\n VC: { en: \"Kingstown\", sv: \"Kingstown\", native: \"Kingstown\", lat: 13.15, lon: -61.22 },\n WS: { en: \"Apia\", sv: \"Apia\", native: \"Apia\", lat: -13.83, lon: -171.76 },\n SM: { en: \"San Marino\", sv: \"San Marino\", native: \"San Marino\", lat: 43.94, lon: 12.45 },\n ST: { en: \"São Tomé\", sv: \"São Tomé\", native: \"São Tomé\", lat: 0.34, lon: 6.73 },\n SA: { en: \"Riyadh\", sv: \"Riyadh\", native: \"الرياض\", lat: 24.69, lon: 46.72 },\n SN: { en: \"Dakar\", sv: \"Dakar\", native: \"Dakar\", lat: 14.69, lon: -17.44 },\n RS: { en: \"Belgrade\", sv: \"Belgrad\", native: \"Београд\", lat: 44.82, lon: 20.46 },\n SC: { en: \"Victoria\", sv: \"Victoria\", native: \"Victoria\", lat: -4.62, lon: 55.45 },\n SL: { en: \"Freetown\", sv: \"Freetown\", native: \"Freetown\", lat: 8.48, lon: -13.23 },\n SG: { en: \"Singapore\", sv: \"Singapore\", native: \"Singapore\", lat: 1.29, lon: 103.85 },\n SK: { en: \"Bratislava\", sv: \"Bratislava\", native: \"Bratislava\", lat: 48.14, lon: 17.11 },\n SI: { en: \"Ljubljana\", sv: \"Ljubljana\", native: \"Ljubljana\", lat: 46.05, lon: 14.51 },\n SB: { en: \"Honiara\", sv: \"Honiara\", native: \"Honiara\", lat: -9.43, lon: 159.96 },\n SO: { en: \"Mogadishu\", sv: \"Mogadishu\", native: \"Muqdisho\", lat: 2.05, lon: 45.32 },\n ZA: { en: \"Pretoria\", sv: \"Pretoria\", native: \"Pretoria\", lat: -25.75, lon: 28.19 },\n SS: { en: \"Juba\", sv: \"Juba\", native: \"Juba\", lat: 4.85, lon: 31.58 },\n ES: { en: \"Madrid\", sv: \"Madrid\", native: \"Madrid\", lat: 40.42, lon: -3.7 },\n LK: {\n en: \"Sri Jayawardenepura Kotte\",\n sv: \"Sri Jayawardenepura Kotte\",\n native: \"ශ්රී ජයවර්ධනපුර කෝට්ටේ\",\n lat: 6.89,\n lon: 79.92,\n },\n SD: { en: \"Khartoum\", sv: \"Khartoum\", native: \"الخرطوم\", lat: 15.59, lon: 32.53 },\n SR: { en: \"Paramaribo\", sv: \"Paramaribo\", native: \"Paramaribo\", lat: 5.83, lon: -55.17 },\n SE: { en: \"Stockholm\", sv: \"Stockholm\", native: \"Stockholm\", lat: 59.33, lon: 18.07 },\n CH: { en: \"Bern\", sv: \"Bern\", native: \"Bern\", lat: 46.95, lon: 7.45 },\n SY: { en: \"Damascus\", sv: \"Damaskus\", native: \"دمشق\", lat: 33.51, lon: 36.29 },\n TW: { en: \"Taipei\", sv: \"Taipei\", native: \"臺北\", lat: 25.03, lon: 121.57 },\n TJ: { en: \"Dushanbe\", sv: \"Dusjanbe\", native: \"Душанбе\", lat: 38.56, lon: 68.77 },\n TZ: { en: \"Dodoma\", sv: \"Dodoma\", native: \"Dodoma\", lat: -6.16, lon: 35.75 },\n TH: { en: \"Bangkok\", sv: \"Bangkok\", native: \"กรุงเทพมหานคร\", lat: 13.76, lon: 100.5 },\n TL: { en: \"Dili\", sv: \"Dili\", native: \"Dili\", lat: -8.56, lon: 125.57 },\n TG: { en: \"Lomé\", sv: \"Lomé\", native: \"Lomé\", lat: 6.14, lon: 1.21 },\n TO: { en: \"Nukuʻalofa\", sv: \"Nukuʻalofa\", native: \"Nukuʻalofa\", lat: -21.21, lon: -175.2 },\n TT: {\n en: \"Port of Spain\",\n sv: \"Port of Spain\",\n native: \"Port of Spain\",\n lat: 10.66,\n lon: -61.51,\n },\n TN: { en: \"Tunis\", sv: \"Tunis\", native: \"تونس\", lat: 36.81, lon: 10.17 },\n TR: { en: \"Ankara\", sv: \"Ankara\", native: \"Ankara\", lat: 39.93, lon: 32.86 },\n TM: { en: \"Ashgabat\", sv: \"Asjchabad\", native: \"Aşgabat\", lat: 37.95, lon: 58.38 },\n TV: { en: \"Funafuti\", sv: \"Funafuti\", native: \"Funafuti\", lat: -8.52, lon: 179.2 },\n UG: { en: \"Kampala\", sv: \"Kampala\", native: \"Kampala\", lat: 0.31, lon: 32.58 },\n UA: { en: \"Kyiv\", sv: \"Kiev\", native: \"Київ\", lat: 50.45, lon: 30.52 },\n AE: { en: \"Abu Dhabi\", sv: \"Abu Dhabi\", native: \"أبو ظبي\", lat: 24.45, lon: 54.65 },\n GB: { en: \"London\", sv: \"London\", native: \"London\", lat: 51.51, lon: -0.13 },\n US: {\n en: \"Washington, D.C.\",\n sv: \"Washington, D.C.\",\n native: \"Washington, D.C.\",\n lat: 38.9,\n lon: -77.04,\n },\n UY: { en: \"Montevideo\", sv: \"Montevideo\", native: \"Montevideo\", lat: -34.88, lon: -56.19 },\n UZ: { en: \"Tashkent\", sv: \"Tasjkent\", native: \"Toshkent\", lat: 41.3, lon: 69.28 },\n VU: { en: \"Port Vila\", sv: \"Port Vila\", native: \"Port Vila\", lat: -17.74, lon: 168.31 },\n VA: {\n en: \"Vatican City\",\n sv: \"Vatikanstaden\",\n native: \"Città del Vaticano\",\n lat: 41.9,\n lon: 12.45,\n },\n VE: { en: \"Caracas\", sv: \"Caracas\", native: \"Caracas\", lat: 10.49, lon: -66.9 },\n VN: { en: \"Hanoi\", sv: \"Hanoi\", native: \"Hà Nội\", lat: 21.03, lon: 105.85 },\n YE: { en: \"Sana'a\", sv: \"Sana'a\", native: \"صنعاء\", lat: 15.35, lon: 44.21 },\n ZM: { en: \"Lusaka\", sv: \"Lusaka\", native: \"Lusaka\", lat: -15.39, lon: 28.32 },\n ZW: { en: \"Harare\", sv: \"Harare\", native: \"Harare\", lat: -17.83, lon: 31.05 },\n AX: { en: \"Mariehamn\", sv: \"Mariehamn\", native: \"Mariehamn\", lat: 60.1, lon: 19.94 },\n FO: { en: \"Tórshavn\", sv: \"Torshamn\", native: \"Tórshavn\", lat: 62.01, lon: -6.77 },\n XK: { en: \"Pristina\", sv: \"Pristina\", native: \"Prishtinë\", lat: 42.66, lon: 21.17 },\n GI: { en: \"Gibraltar\", sv: \"Gibraltar\", native: \"Gibraltar\", lat: 36.14, lon: -5.35 },\n GL: { en: \"Nuuk\", sv: \"Nuuk\", native: \"Nuuk\", lat: 64.17, lon: -51.74 },\n GG: {\n en: \"St. Peter Port\",\n sv: \"Saint Peter Port\",\n native: \"St. Peter Port\",\n lat: 49.46,\n lon: -2.54,\n },\n IM: { en: \"Douglas\", sv: \"Douglas\", native: \"Douglas\", lat: 54.15, lon: -4.48 },\n JE: { en: \"St. Helier\", sv: \"Saint Helier\", native: \"St. Helier\", lat: 49.19, lon: -2.1 },\n};\n\n/** Returns the {@link CountryCapital} for the given alpha-2 code, or `null` if unknown. */\nexport function getCountryCapital(alpha2: string): CountryCapital | null {\n const r = RAW[alpha2];\n if (!r) return null;\n return new CountryCapital(r.en, r.sv, r.native, GeoCoordinate.create(r.lat, r.lon));\n}\n","/** EU/EEA/Schengen/Nordic/SEPA membership and currency overrides. */\n\nconst set = (codes: readonly string[]): ReadonlySet<string> => {\n const s = new Set<string>();\n for (const c of codes) s.add(c.toUpperCase());\n return s;\n};\n\nexport const EU_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n]);\n\nexport const EEA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n]);\n\nexport const SCHENGEN_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"CH\",\n]);\n\nexport const NORDIC_COUNTRIES: ReadonlySet<string> = set([\"DK\", \"FI\", \"IS\", \"NO\", \"SE\"]);\n\nexport const SEPA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"AL\",\n \"AD\",\n \"MD\",\n \"MC\",\n \"ME\",\n \"MK\",\n \"SM\",\n \"RS\",\n \"CH\",\n \"GB\",\n \"VA\",\n \"GG\",\n \"IM\",\n \"JE\",\n]);\n\n/** ISO 4217 currency codes per ISO 3166 country, with overrides for territories. */\nexport const COUNTRY_CURRENCIES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"AFN\"],\n AL: [\"ALL\"],\n DZ: [\"DZD\"],\n AS: [\"USD\"],\n AD: [\"EUR\"],\n AO: [\"AOA\"],\n AG: [\"XCD\"],\n AR: [\"ARS\"],\n AM: [\"AMD\"],\n AW: [\"AWG\"],\n AU: [\"AUD\"],\n AT: [\"EUR\"],\n AZ: [\"AZN\"],\n BS: [\"BSD\"],\n BH: [\"BHD\"],\n BD: [\"BDT\"],\n BB: [\"BBD\"],\n BY: [\"BYN\"],\n BE: [\"EUR\"],\n BZ: [\"BZD\"],\n BJ: [\"XOF\"],\n BM: [\"BMD\"],\n BT: [\"BTN\"],\n BO: [\"BOB\"],\n BA: [\"BAM\"],\n BW: [\"BWP\"],\n BR: [\"BRL\"],\n BN: [\"BND\"],\n BG: [\"BGN\"],\n BF: [\"XOF\"],\n BI: [\"BIF\"],\n CV: [\"CVE\"],\n KH: [\"KHR\"],\n CM: [\"XAF\"],\n CA: [\"CAD\"],\n CF: [\"XAF\"],\n TD: [\"XAF\"],\n CL: [\"CLP\"],\n CN: [\"CNY\"],\n CO: [\"COP\"],\n KM: [\"KMF\"],\n CG: [\"XAF\"],\n CD: [\"CDF\"],\n CR: [\"CRC\"],\n CI: [\"XOF\"],\n HR: [\"EUR\"],\n CU: [\"CUP\"],\n CW: [\"ANG\"],\n CY: [\"EUR\"],\n CZ: [\"CZK\"],\n DK: [\"DKK\"],\n DJ: [\"DJF\"],\n DM: [\"XCD\"],\n DO: [\"DOP\"],\n EC: [\"USD\"],\n EG: [\"EGP\"],\n SV: [\"USD\"],\n GQ: [\"XAF\"],\n ER: [\"ERN\"],\n EE: [\"EUR\"],\n SZ: [\"SZL\"],\n ET: [\"ETB\"],\n FJ: [\"FJD\"],\n FI: [\"EUR\"],\n FR: [\"EUR\"],\n GA: [\"XAF\"],\n GM: [\"GMD\"],\n GE: [\"GEL\"],\n DE: [\"EUR\"],\n GH: [\"GHS\"],\n GI: [\"GIP\"],\n GR: [\"EUR\"],\n GL: [\"DKK\"],\n GD: [\"XCD\"],\n GU: [\"USD\"],\n GT: [\"GTQ\"],\n GG: [\"GBP\"],\n GN: [\"GNF\"],\n GW: [\"XOF\"],\n GY: [\"GYD\"],\n HT: [\"HTG\"],\n HN: [\"HNL\"],\n HK: [\"HKD\"],\n HU: [\"HUF\"],\n IS: [\"ISK\"],\n IN: [\"INR\"],\n ID: [\"IDR\"],\n IR: [\"IRR\"],\n IQ: [\"IQD\"],\n IE: [\"EUR\"],\n IM: [\"GBP\"],\n IL: [\"ILS\"],\n IT: [\"EUR\"],\n JM: [\"JMD\"],\n JP: [\"JPY\"],\n JE: [\"GBP\"],\n JO: [\"JOD\"],\n KZ: [\"KZT\"],\n KE: [\"KES\"],\n KI: [\"AUD\"],\n KP: [\"KPW\"],\n KR: [\"KRW\"],\n KW: [\"KWD\"],\n KG: [\"KGS\"],\n LA: [\"LAK\"],\n LV: [\"EUR\"],\n LB: [\"LBP\"],\n LS: [\"LSL\"],\n LR: [\"LRD\"],\n LY: [\"LYD\"],\n LI: [\"CHF\"],\n LT: [\"EUR\"],\n LU: [\"EUR\"],\n MO: [\"MOP\"],\n MG: [\"MGA\"],\n MW: [\"MWK\"],\n MY: [\"MYR\"],\n MV: [\"MVR\"],\n ML: [\"XOF\"],\n MT: [\"EUR\"],\n MH: [\"USD\"],\n MR: [\"MRU\"],\n MU: [\"MUR\"],\n MX: [\"MXN\"],\n FM: [\"USD\"],\n MD: [\"MDL\"],\n MC: [\"EUR\"],\n MN: [\"MNT\"],\n ME: [\"EUR\"],\n MA: [\"MAD\"],\n MZ: [\"MZN\"],\n MM: [\"MMK\"],\n NA: [\"NAD\"],\n NR: [\"AUD\"],\n NP: [\"NPR\"],\n NL: [\"EUR\"],\n NZ: [\"NZD\"],\n NI: [\"NIO\"],\n NE: [\"XOF\"],\n NG: [\"NGN\"],\n MK: [\"MKD\"],\n NO: [\"NOK\"],\n OM: [\"OMR\"],\n PK: [\"PKR\"],\n PW: [\"USD\"],\n PS: [\"ILS\"],\n PA: [\"PAB\"],\n PG: [\"PGK\"],\n PY: [\"PYG\"],\n PE: [\"PEN\"],\n PH: [\"PHP\"],\n PL: [\"PLN\"],\n PT: [\"EUR\"],\n PR: [\"USD\"],\n QA: [\"QAR\"],\n RO: [\"RON\"],\n RU: [\"RUB\"],\n RW: [\"RWF\"],\n KN: [\"XCD\"],\n LC: [\"XCD\"],\n VC: [\"XCD\"],\n WS: [\"WST\"],\n SM: [\"EUR\"],\n ST: [\"STN\"],\n SA: [\"SAR\"],\n SN: [\"XOF\"],\n RS: [\"RSD\"],\n SC: [\"SCR\"],\n SL: [\"SLE\"],\n SG: [\"SGD\"],\n SK: [\"EUR\"],\n SI: [\"EUR\"],\n SB: [\"SBD\"],\n SO: [\"SOS\"],\n ZA: [\"ZAR\"],\n SS: [\"SSP\"],\n ES: [\"EUR\"],\n LK: [\"LKR\"],\n SD: [\"SDG\"],\n SR: [\"SRD\"],\n SE: [\"SEK\"],\n CH: [\"CHF\"],\n SY: [\"SYP\"],\n TW: [\"TWD\"],\n TJ: [\"TJS\"],\n TZ: [\"TZS\"],\n TH: [\"THB\"],\n TL: [\"USD\"],\n TG: [\"XOF\"],\n TO: [\"TOP\"],\n TT: [\"TTD\"],\n TN: [\"TND\"],\n TR: [\"TRY\"],\n TM: [\"TMT\"],\n TV: [\"AUD\"],\n UG: [\"UGX\"],\n UA: [\"UAH\"],\n AE: [\"AED\"],\n GB: [\"GBP\"],\n US: [\"USD\"],\n UY: [\"UYU\"],\n UZ: [\"UZS\"],\n VU: [\"VUV\"],\n VA: [\"EUR\"],\n VE: [\"VES\"],\n VN: [\"VND\"],\n YE: [\"YER\"],\n ZM: [\"ZMW\"],\n ZW: [\"ZWG\"],\n AX: [\"EUR\"],\n FO: [\"DKK\"],\n XK: [\"EUR\"],\n} as const);\n\n/** ISO 639-1 official language codes per country. */\nexport const COUNTRY_LANGUAGES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"ps\", \"fa\"],\n AL: [\"sq\"],\n DZ: [\"ar\"],\n AD: [\"ca\"],\n AO: [\"pt\"],\n AG: [\"en\"],\n AR: [\"es\"],\n AM: [\"hy\"],\n AU: [\"en\"],\n AT: [\"de\"],\n AZ: [\"az\"],\n BS: [\"en\"],\n BH: [\"ar\"],\n BD: [\"bn\"],\n BB: [\"en\"],\n BY: [\"be\", \"ru\"],\n BE: [\"nl\", \"fr\", \"de\"],\n BZ: [\"en\"],\n BJ: [\"fr\"],\n BT: [\"dz\"],\n BO: [\"es\", \"qu\", \"ay\"],\n BA: [\"bs\", \"hr\", \"sr\"],\n BW: [\"en\", \"tn\"],\n BR: [\"pt\"],\n BN: [\"ms\"],\n BG: [\"bg\"],\n BF: [\"fr\"],\n BI: [\"rn\", \"fr\"],\n CV: [\"pt\"],\n KH: [\"km\"],\n CM: [\"fr\", \"en\"],\n CA: [\"en\", \"fr\"],\n CF: [\"fr\", \"sg\"],\n TD: [\"fr\", \"ar\"],\n CL: [\"es\"],\n CN: [\"zh\"],\n CO: [\"es\"],\n KM: [\"ar\", \"fr\"],\n CG: [\"fr\"],\n CD: [\"fr\"],\n CR: [\"es\"],\n CI: [\"fr\"],\n HR: [\"hr\"],\n CU: [\"es\"],\n CY: [\"el\", \"tr\"],\n CZ: [\"cs\"],\n DK: [\"da\"],\n DJ: [\"fr\", \"ar\"],\n DM: [\"en\"],\n DO: [\"es\"],\n EC: [\"es\"],\n EG: [\"ar\"],\n SV: [\"es\"],\n GQ: [\"es\", \"fr\", \"pt\"],\n ER: [\"ti\", \"ar\", \"en\"],\n EE: [\"et\"],\n SZ: [\"en\", \"ss\"],\n ET: [\"am\"],\n FJ: [\"en\", \"fj\"],\n FI: [\"fi\", \"sv\"],\n FR: [\"fr\"],\n GA: [\"fr\"],\n GM: [\"en\"],\n GE: [\"ka\"],\n DE: [\"de\"],\n GH: [\"en\"],\n GR: [\"el\"],\n GD: [\"en\"],\n GT: [\"es\"],\n GN: [\"fr\"],\n GW: [\"pt\"],\n GY: [\"en\"],\n HT: [\"ht\", \"fr\"],\n HN: [\"es\"],\n HU: [\"hu\"],\n IS: [\"is\"],\n IN: [\"hi\", \"en\"],\n ID: [\"id\"],\n IR: [\"fa\"],\n IQ: [\"ar\", \"ku\"],\n IE: [\"en\", \"ga\"],\n IL: [\"he\", \"ar\"],\n IT: [\"it\"],\n JM: [\"en\"],\n JP: [\"ja\"],\n JO: [\"ar\"],\n KZ: [\"kk\", \"ru\"],\n KE: [\"en\", \"sw\"],\n KI: [\"en\"],\n KP: [\"ko\"],\n KR: [\"ko\"],\n KW: [\"ar\"],\n KG: [\"ky\", \"ru\"],\n LA: [\"lo\"],\n LV: [\"lv\"],\n LB: [\"ar\", \"fr\"],\n LS: [\"en\", \"st\"],\n LR: [\"en\"],\n LY: [\"ar\"],\n LI: [\"de\"],\n LT: [\"lt\"],\n LU: [\"lb\", \"fr\", \"de\"],\n MG: [\"mg\", \"fr\"],\n MW: [\"en\", \"ny\"],\n MY: [\"ms\"],\n MV: [\"dv\"],\n ML: [\"fr\"],\n MT: [\"mt\", \"en\"],\n MH: [\"en\", \"mh\"],\n MR: [\"ar\"],\n MU: [\"en\"],\n MX: [\"es\"],\n MD: [\"ro\"],\n MC: [\"fr\"],\n MN: [\"mn\"],\n ME: [\"sr\"],\n MA: [\"ar\"],\n MZ: [\"pt\"],\n MM: [\"my\"],\n NA: [\"en\"],\n NR: [\"en\", \"na\"],\n NP: [\"ne\"],\n NL: [\"nl\"],\n NZ: [\"en\", \"mi\"],\n NI: [\"es\"],\n NE: [\"fr\"],\n NG: [\"en\"],\n MK: [\"mk\"],\n NO: [\"no\", \"nb\", \"nn\"],\n OM: [\"ar\"],\n PK: [\"ur\", \"en\"],\n PW: [\"en\"],\n PA: [\"es\"],\n PG: [\"en\"],\n PY: [\"es\", \"gn\"],\n PE: [\"es\", \"qu\"],\n PH: [\"tl\", \"en\"],\n PL: [\"pl\"],\n PT: [\"pt\"],\n QA: [\"ar\"],\n RO: [\"ro\"],\n RU: [\"ru\"],\n RW: [\"rw\", \"fr\", \"en\"],\n KN: [\"en\"],\n LC: [\"en\"],\n VC: [\"en\"],\n WS: [\"sm\", \"en\"],\n SM: [\"it\"],\n ST: [\"pt\"],\n SA: [\"ar\"],\n SN: [\"fr\"],\n RS: [\"sr\"],\n SC: [\"en\", \"fr\"],\n SL: [\"en\"],\n SG: [\"en\", \"ms\", \"zh\", \"ta\"],\n SK: [\"sk\"],\n SI: [\"sl\"],\n SB: [\"en\"],\n SO: [\"so\", \"ar\"],\n ZA: [\"en\", \"af\", \"zu\"],\n SS: [\"en\"],\n ES: [\"es\"],\n LK: [\"si\", \"ta\"],\n SD: [\"ar\", \"en\"],\n SR: [\"nl\"],\n SE: [\"sv\"],\n CH: [\"de\", \"fr\", \"it\", \"rm\"],\n SY: [\"ar\"],\n TW: [\"zh\"],\n TJ: [\"tg\"],\n TZ: [\"sw\", \"en\"],\n TH: [\"th\"],\n TL: [\"pt\"],\n TG: [\"fr\"],\n TO: [\"en\", \"to\"],\n TT: [\"en\"],\n TN: [\"ar\"],\n TR: [\"tr\"],\n TM: [\"tk\"],\n TV: [\"en\"],\n UG: [\"en\", \"sw\"],\n UA: [\"uk\"],\n AE: [\"ar\"],\n GB: [\"en\"],\n US: [\"en\"],\n UY: [\"es\"],\n UZ: [\"uz\"],\n VU: [\"en\", \"fr\", \"bi\"],\n VA: [\"it\", \"la\"],\n VE: [\"es\"],\n VN: [\"vi\"],\n YE: [\"ar\"],\n ZM: [\"en\"],\n ZW: [\"en\", \"sn\", \"nd\"],\n AS: [\"en\", \"sm\"],\n AW: [\"nl\"],\n BM: [\"en\"],\n CW: [\"nl\"],\n FO: [\"fo\", \"da\"],\n GI: [\"en\"],\n GL: [\"kl\", \"da\"],\n GG: [\"en\"],\n GU: [\"en\"],\n HK: [\"zh\", \"en\"],\n IM: [\"en\"],\n JE: [\"en\"],\n XK: [\"sq\", \"sr\"],\n MO: [\"zh\", \"pt\"],\n PR: [\"es\", \"en\"],\n} as const);\n\n/** Aliases for Country.tryParse — common alternative names not in the canonical list. */\nexport const COUNTRY_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n USA: \"US\",\n UK: \"GB\",\n Holland: \"NL\",\n \"Czech Republic\": \"CZ\",\n \"Ivory Coast\": \"CI\",\n Burma: \"MM\",\n Swaziland: \"SZ\",\n Persia: \"IR\",\n \"Great Britain\": \"GB\",\n England: \"GB\",\n UAE: \"AE\",\n \"South Korea\": \"KR\",\n \"North Korea\": \"KP\",\n \"Republic of Ireland\": \"IE\",\n Suisse: \"CH\",\n Svizzera: \"CH\",\n Belgique: \"BE\",\n Noreg: \"NO\",\n Vitryssland: \"BY\",\n});\n\n/**\n * Country alpha-2 codes that own each shared phone calling code (`+1` is shared\n * by US, Canada, Caribbean countries; `+44` by UK, Guernsey, Isle of Man,\n * Jersey; `+7` by Russia and Kazakhstan). The first entry is the primary.\n */\nexport const PRIMARY_BY_CALLING_CODE: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"44\": \"GB\",\n \"7\": \"RU\",\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Currency } from \"../finance/currency.js\";\nimport { Continent } from \"./continent.js\";\nimport { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { Language } from \"./language.js\";\nimport { COUNTRY_ROWS, type CountryRow } from \"./country-data.js\";\nimport { COUNTRY_COORDINATES } from \"./country-coordinates.js\";\nimport { getCountryCapital } from \"./country-capitals.js\";\nimport {\n COUNTRY_ALIASES,\n COUNTRY_CURRENCIES,\n COUNTRY_LANGUAGES,\n EEA_COUNTRIES,\n EU_COUNTRIES,\n NORDIC_COUNTRIES,\n PRIMARY_BY_CALLING_CODE,\n SCHENGEN_COUNTRIES,\n SEPA_COUNTRIES,\n} from \"./country-metadata.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A neighboring country with its distance from a reference point (kilometers). */\nexport interface CountryDistance {\n readonly country: Country;\n readonly distanceKilometers: number;\n}\n\n/**\n * A country identified by its English name, Swedish name, local name (endonym),\n * or ISO 3166-1 codes. Each country exposes its phone calling code, ccTLD,\n * continent, European classifications (EU, EEA, Schengen, Nordics, SEPA), and\n * currency metadata. Parsing accepts English/Swedish/local names, alpha-2 and\n * alpha-3 codes, and common aliases (USA, UK, Holland, etc.).\n */\nexport class Country {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Country\",\n localizedName: \"Land\",\n emoji: \"\\u{1F30D}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-3166-country-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_3166-1\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://www.iana.org/domains/root/db\",\n \"https://www.wikidata.org/wiki/Property:P625\",\n \"https://www.wikidata.org/wiki/Property:P36\",\n \"https://www.wikidata.org/wiki/Property:P47\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly numericCode: number;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly callingCode: string;\n readonly topLevelDomain: string;\n readonly continent: Continent;\n readonly currencyCodes: readonly string[];\n readonly languageCodes: readonly string[];\n\n private constructor(row: CountryRow) {\n this.alpha2Code = row.alpha2;\n this.alpha3Code = row.alpha3;\n this.numericCode = row.numeric;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.nativeName = row.native;\n this.callingCode = row.callingCode;\n this.topLevelDomain = row.tld;\n this.continent = row.continent;\n this.currencyCodes = COUNTRY_CURRENCIES[row.alpha2] ?? [];\n this.languageCodes = COUNTRY_LANGUAGES[row.alpha2] ?? [];\n }\n\n /** The canonical value of this country: its ISO 3166-1 alpha-2 code. */\n get value(): string {\n return this.alpha2Code;\n }\n\n /** Display name in the current culture (Swedish or English). */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n /** Culture-independent display form. Always the English name. */\n get formatted(): string {\n return this.englishName;\n }\n\n /** Geographic coordinate of the country (centroid, from Wikidata P625). */\n get coordinate(): GeoCoordinate {\n const c = COUNTRY_COORDINATES[this.alpha2Code];\n if (!c) throw new Error(`No coordinate for country ${this.alpha2Code}.`);\n return GeoCoordinate.create(c[0], c[1]);\n }\n\n /** Approximate latitude (WGS 84) of the country centroid. */\n get latitude(): number {\n return this.coordinate.latitude;\n }\n\n /** Approximate longitude (WGS 84) of the country centroid. */\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n /** Capital city, or `null` for entries without a capital (e.g. Antarctica). */\n get capital(): CountryCapital | null {\n return getCountryCapital(this.alpha2Code);\n }\n\n get isInEuropeanUnion(): boolean {\n return EU_COUNTRIES.has(this.alpha2Code);\n }\n get isInEea(): boolean {\n return EEA_COUNTRIES.has(this.alpha2Code);\n }\n get isInSchengen(): boolean {\n return SCHENGEN_COUNTRIES.has(this.alpha2Code);\n }\n get isInNordics(): boolean {\n return NORDIC_COUNTRIES.has(this.alpha2Code);\n }\n get isInSepa(): boolean {\n return SEPA_COUNTRIES.has(this.alpha2Code);\n }\n\n /** True when the euro is among the country's legal tenders. */\n get usesEuro(): boolean {\n return this.currencyCodes.includes(\"EUR\");\n }\n\n /** Primary ISO 4217 currency code, or `null` when unknown. */\n get currencyCode(): string | null {\n return this.currencyCodes[0] ?? null;\n }\n\n /**\n * Primary legal-tender currency, or `null` when unknown. Countries with\n * several legal tenders (Cuba, Panama, Namibia) return the first; use\n * {@link currencies} for the full list.\n */\n get currency(): Currency | null {\n const code = this.currencyCode;\n return code == null ? null : Currency.tryParse(code);\n }\n\n /** All recognized currencies for this country, in priority order. */\n get currencies(): readonly Currency[] {\n return Object.freeze(\n this.currencyCodes\n .map((code) => Currency.tryParse(code))\n .filter((c): c is Currency => c !== null),\n );\n }\n\n /**\n * Primary official language, or `null` when unknown. Countries with several\n * official languages (Belgium, Switzerland) return the most widely spoken;\n * use {@link officialLanguages} for the full list.\n */\n get primaryLanguage(): Language | null {\n const code = this.languageCodes[0];\n return code == null ? null : Language.tryParse(code);\n }\n\n /** All official languages of the country, in priority order. */\n get officialLanguages(): readonly Language[] {\n return Object.freeze(\n this.languageCodes\n .map((code) => Language.tryParse(code))\n .filter((l): l is Language => l !== null),\n );\n }\n\n static tryParse(input: string | null | undefined): Country | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const direct = lookupCi(sanitized);\n if (direct) return direct;\n\n if (sanitized.length > 4 && sanitized.slice(0, 4).toLowerCase() === \"the \") {\n const without = sanitized.slice(4);\n const stripped = lookupCi(without);\n if (stripped) return stripped;\n }\n return null;\n }\n\n static parse(input: string): Country {\n const r = Country.tryParse(input);\n if (r === null) throw new Error(\"Unknown country.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Country.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Country.normalize(input) === input;\n }\n\n /** Look up a country by its phone calling code. Primary owner wins for shared codes. */\n static tryFindByCallingCode(callingCode: string | null | undefined): Country | null {\n if (callingCode == null) return null;\n const trimmed = callingCode.trim();\n if (trimmed.length === 0) return null;\n return BY_CALLING_CODE.get(trimmed) ?? null;\n }\n\n /** All known countries. */\n static get all(): readonly Country[] {\n return ALL_COUNTRIES;\n }\n\n /**\n * Returns countries within `radiusKm` of this country, ordered by distance.\n */\n findNeighbors(radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n return Country.findNeighbors(this.coordinate, radiusKm).filter((d) => d.country !== this);\n }\n\n /** Returns countries within `radiusKm` of `coordinate`, ordered by distance. */\n static findNeighbors(coordinate: GeoCoordinate, radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: CountryDistance[] = [];\n for (const c of ALL_COUNTRIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, c.coordinate);\n if (dist <= radiusKm) out.push({ country: c, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n /**\n * Scans unstructured text for country names (4+ chars, word-bounded). Low confidence\n * because country names can occur in non-geographic contexts.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Country>[] {\n if (!text) return [];\n const out: TextCandidate<Country>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const country = Country.tryParse(m[0]);\n if (!country) continue;\n out.push(\n new TextCandidate<Country>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Country\",\n category: TextCandidateCategory.Geography,\n normalizedForm: country.toNormalizedString(),\n formattedForm: country.toString(),\n maskedForm: country.localizedName,\n confidence: TextMatchConfidence.Low,\n value: country,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Country | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n compareTo(other: Country | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n static get Sweden(): Country {\n return getByAlpha2(\"SE\");\n }\n static get Norway(): Country {\n return getByAlpha2(\"NO\");\n }\n static get Finland(): Country {\n return getByAlpha2(\"FI\");\n }\n static get Denmark(): Country {\n return getByAlpha2(\"DK\");\n }\n static get Iceland(): Country {\n return getByAlpha2(\"IS\");\n }\n static get Germany(): Country {\n return getByAlpha2(\"DE\");\n }\n static get Poland(): Country {\n return getByAlpha2(\"PL\");\n }\n static get Estonia(): Country {\n return getByAlpha2(\"EE\");\n }\n static get Lithuania(): Country {\n return getByAlpha2(\"LT\");\n }\n static get Latvia(): Country {\n return getByAlpha2(\"LV\");\n }\n static get Romania(): Country {\n return getByAlpha2(\"RO\");\n }\n static get Bulgaria(): Country {\n return getByAlpha2(\"BG\");\n }\n static get CzechRepublic(): Country {\n return getByAlpha2(\"CZ\");\n }\n static get Spain(): Country {\n return getByAlpha2(\"ES\");\n }\n static get Netherlands(): Country {\n return getByAlpha2(\"NL\");\n }\n static get Greece(): Country {\n return getByAlpha2(\"GR\");\n }\n static get Italy(): Country {\n return getByAlpha2(\"IT\");\n }\n static get Slovenia(): Country {\n return getByAlpha2(\"SI\");\n }\n static get Croatia(): Country {\n return getByAlpha2(\"HR\");\n }\n static get Portugal(): Country {\n return getByAlpha2(\"PT\");\n }\n static get Hungary(): Country {\n return getByAlpha2(\"HU\");\n }\n static get France(): Country {\n return getByAlpha2(\"FR\");\n }\n static get Slovakia(): Country {\n return getByAlpha2(\"SK\");\n }\n static get Belgium(): Country {\n return getByAlpha2(\"BE\");\n }\n static get UnitedKingdom(): Country {\n return getByAlpha2(\"GB\");\n }\n static get Austria(): Country {\n return getByAlpha2(\"AT\");\n }\n static get Cyprus(): Country {\n return getByAlpha2(\"CY\");\n }\n static get Switzerland(): Country {\n return getByAlpha2(\"CH\");\n }\n static get Ireland(): Country {\n return getByAlpha2(\"IE\");\n }\n static get Luxembourg(): Country {\n return getByAlpha2(\"LU\");\n }\n static get Malta(): Country {\n return getByAlpha2(\"MT\");\n }\n static get Liechtenstein(): Country {\n return getByAlpha2(\"LI\");\n }\n\n /** @internal */\n static _fromRow(row: CountryRow): Country {\n return new Country(row);\n }\n}\n\nconst ALL_COUNTRIES: readonly Country[] = COUNTRY_ROWS.map((r) => Country._fromRow(r));\n\nconst BY_ALPHA2 = new Map<string, Country>();\nconst BY_NAME = new Map<string, Country>();\nconst BY_CALLING_CODE = new Map<string, Country>();\n\nfor (const c of ALL_COUNTRIES) {\n BY_ALPHA2.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha3Code.toUpperCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n if (!BY_NAME.has(c.localizedName.toLowerCase())) BY_NAME.set(c.localizedName.toLowerCase(), c);\n if (\n c.nativeName.toLowerCase() !== c.englishName.toLowerCase() &&\n !BY_NAME.has(c.nativeName.toLowerCase())\n ) {\n BY_NAME.set(c.nativeName.toLowerCase(), c);\n }\n if (!BY_CALLING_CODE.has(c.callingCode)) BY_CALLING_CODE.set(c.callingCode, c);\n}\n\nfor (const [aliasOrCode, alpha2] of Object.entries(COUNTRY_ALIASES)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_NAME.set(aliasOrCode.toLowerCase(), target);\n}\n\nfor (const [code, alpha2] of Object.entries(PRIMARY_BY_CALLING_CODE)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_CALLING_CODE.set(code, target);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= 4)\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n\nfunction getByAlpha2(code: string): Country {\n const c = BY_ALPHA2.get(code.toUpperCase());\n if (!c) throw new Error(`Unknown country code ${code}.`);\n return c;\n}\n\nfunction lookupCi(input: string): Country | null {\n const upper = input.toUpperCase();\n const a2 = BY_ALPHA2.get(upper);\n if (a2) return a2;\n const lower = input.toLowerCase();\n return BY_NAME.get(lower) ?? BY_NAME.get(upper) ?? null;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/country.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst PATTERN =\n /^(?<institution>[A-Z]{4})(?<country>[A-Z]{2})(?<location>[A-Z0-9]{2})(?<branch>[A-Z0-9]{3})?$/;\n\n/**\n * A BIC (Business Identifier Code / SWIFT code) per ISO 9362.\n * 8 or 11 uppercase characters, e.g. `NDEASESS` or `NDEASESSXXX`.\n */\nexport class Bic {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"BIC\",\n localizedName: \"BIC\",\n emoji: \"\\u{1F504}\",\n sources: Object.freeze([\n \"https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/08/41/84108.html\",\n \"https://www.swift.com/standards/data-standards/bic-business-identifier-code\",\n ]),\n });\n\n /** Normalized 8 or 11 uppercase characters, e.g. `NDEASESS`. */\n readonly code: string;\n readonly institutionCode: string;\n readonly countryCode: string;\n readonly locationCode: string;\n readonly branchCode: string | null;\n /** True when the BIC has no branch code (or the branch code is the head office). */\n get isPrimaryOffice(): boolean {\n return this.branchCode === null;\n }\n\n private constructor(\n code: string,\n institutionCode: string,\n countryCode: string,\n locationCode: string,\n branchCode: string | null,\n ) {\n this.code = code;\n this.institutionCode = institutionCode;\n this.countryCode = countryCode;\n this.locationCode = locationCode;\n this.branchCode = branchCode;\n }\n\n static tryParse(input: string | null | undefined): Bic | null {\n if (input == null || input.trim() === \"\") return null;\n const normalized = normalizeInternal(sanitizeInput(input));\n if (normalized.length > MAX_INPUT_LENGTH) return null;\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups) return null;\n if (Country.tryParse(match.groups.country!) === null) return null;\n return new Bic(\n normalized,\n match.groups.institution!,\n match.groups.country!,\n match.groups.location!,\n match.groups.branch ?? null,\n );\n }\n\n static parse(input: string): Bic {\n const r = Bic.tryParse(input);\n if (r === null) throw new Error(\"Invalid BIC.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Bic.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Bic.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return Bic.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Bic.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n toString(): string {\n return this.code;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const normalized = normalizeInternal(sanitizeInput(input));\n\n if (normalized.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n const match = PATTERN.exec(normalized);\n if (!match || !match.groups)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidFormat,\n \"BIC has an invalid format (must be 8 or 11 alphanumeric characters).\",\n \"BIC har ett ogiltigt format (måste vara 8 eller 11 alfanumeriska tecken).\",\n );\n\n if (Country.tryParse(match.groups.country!) === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownCountryCode,\n \"Unknown BIC country code.\",\n \"Okänd BIC-landskod.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<Bic>[] {\n if (!text) return [];\n const out: TextCandidate<Bic>[] = [];\n const re = /\\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const original = m[0];\n if (/[a-z]/.test(original)) continue;\n const r = Bic.tryParse(original);\n if (!r) continue;\n out.push(\n new TextCandidate<Bic>({\n startIndex: m.index,\n length: m[0].length,\n originalText: original,\n typeName: \"Bic\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskBic(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: Bic | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n compareTo(other: Bic | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nfunction normalizeInternal(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input[i]!;\n if (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \"-\") continue;\n out += c.toUpperCase();\n }\n return out;\n}\n\n/**\n * Returns a masked BIC showing the country code, e.g. `NDEASESS` → `****SE**`.\n */\nexport function maskBic(bic: Bic): string {\n const code = bic.code;\n let out = \"\";\n for (let i = 0; i < code.length; i++) {\n out += i >= 4 && i <= 5 ? code[i] : \"*\";\n }\n return out;\n}\n","/**\n * Validates a standard Luhn (mod 10) checksum.\n * Checks the entire string: the last digit is assumed to be the control digit.\n *\n * Equivalent of `Buildi.Primitives.Luhn.IsValid` (internal in .NET).\n */\nexport function luhnIsValid(digits: string): boolean {\n if (!digits) return false;\n\n let sum = 0;\n const len = digits.length;\n for (let i = 0; i < len; i++) {\n const code = digits.charCodeAt(i);\n if (code < 0x30 || code > 0x39) return false;\n let d = code - 0x30;\n if ((len - i) % 2 === 0) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n sum += d;\n }\n return sum % 10 === 0;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_7_OR_8 = /^\\d{7,8}$/;\n\n/**\n * A Swedish Bankgiro number (`bankgironummer`), e.g. `5805-6201`.\n * 7 or 8 digits with Luhn check digit.\n */\nexport class SwedishBankgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bankgiro Number\",\n localizedName: \"Bankgironummer\",\n emoji: \"\\u{1F4B3}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-number/\",\n \"https://sv.wikipedia.org/wiki/Bankgirot\",\n ]),\n });\n\n static readonly displayName = \"Bankgiro\";\n static readonly displayNameShort = \"BG\";\n\n /** Digit-only value, e.g. `58056201`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `5805-6201`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_7_OR_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const formatted =\n digits.length === 7\n ? `${digits.slice(0, 3)}-${digits.slice(3)}`\n : `${digits.slice(0, 4)}-${digits.slice(4)}`;\n return new SwedishBankgiroNumber(digits, formatted);\n }\n\n static parse(input: string): SwedishBankgiroNumber {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishBankgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishBankgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishBankgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_7_OR_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bankgiro number must be 7 or 8 digits.\",\n \"Bankgironummer måste vara 7 eller 8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{3,4}-\\d{4}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankgiroNumber(r),\n confidence: TextMatchConfidence.High,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishBankgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/** Returns the Bankgirot search URL for this Bankgiro number. */\nexport function getBankgirotUrl(bg: SwedishBankgiroNumber): string {\n return `https://www.bankgirot.se/sok-bankgironummer/?bgnr=${bg.formatted}`;\n}\n\n/**\n * Returns a masked Bankgiro number, e.g. `****-6201` (default) or `5805-****` when\n * `showLastDigits` is `false`.\n */\nexport function maskSwedishBankgiroNumber(\n bg: SwedishBankgiroNumber,\n options?: { showLastDigits?: boolean },\n): string {\n const showLastDigits = options?.showLastDigits ?? true;\n const formatted = bg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showLastDigits) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\nconst DIGITS_2_TO_8 = /^\\d{2,8}$/;\n\n/**\n * A Swedish Plusgiro number (`plusgironummer`), e.g. `1234567-9`.\n * 2–8 digits with Luhn check digit.\n */\nexport class SwedishPostgiroNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Plusgiro Number\",\n localizedName: \"Plusgironummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/\",\n \"https://sv.wikipedia.org/wiki/Plusgirot\",\n ]),\n });\n\n static readonly displayName = \"Plusgiro\";\n static readonly displayNameShort = \"PG\";\n\n /** Digit-only value, e.g. `41313008`. */\n readonly digits: string;\n /** Hyphenated display form, e.g. `4131300-8`. */\n readonly formatted: string;\n\n private constructor(digits: string, formatted: string) {\n this.digits = digits;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishPostgiroNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_2_TO_8.test(digits)) return null;\n if (!luhnIsValid(digits)) return null;\n\n const base = digits.slice(0, digits.length - 1);\n const control = digits.slice(digits.length - 1);\n return new SwedishPostgiroNumber(digits, `${base}-${control}`);\n }\n\n static parse(input: string): SwedishPostgiroNumber {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Plusgiro number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishPostgiroNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishPostgiroNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishPostgiroNumber.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishPostgiroNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.formatted;\n }\n\n toDisplayString(): string {\n return `${SwedishPostgiroNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishPostgiroNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_2_TO_8.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Plusgiro number must be 2–8 digits.\",\n \"Plusgironummer måste vara 2–8 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishPostgiroNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishPostgiroNumber>[] = [];\n const re = /(?<!\\d)\\d{1,7}-\\d(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishPostgiroNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishPostgiroNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishPostgiroNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishPostgiroNumber(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishPostgiroNumber | null | undefined): boolean {\n return other != null && this.formatted === other.formatted;\n }\n compareTo(other: SwedishPostgiroNumber | null | undefined): number {\n if (other == null) return 1;\n return this.formatted < other.formatted ? -1 : this.formatted > other.formatted ? 1 : 0;\n }\n}\n\n/**\n * Returns a masked Plusgiro number, e.g. `******-9` (default, showing the control digit) or\n * `123456-*` when `showControlDigit` is `false`.\n */\nexport function maskSwedishPostgiroNumber(\n pg: SwedishPostgiroNumber,\n options?: { showControlDigit?: boolean },\n): string {\n const showControlDigit = options?.showControlDigit ?? true;\n const formatted = pg.formatted;\n const dashIndex = formatted.indexOf(\"-\");\n if (dashIndex < 0) return \"*\".repeat(formatted.length);\n if (showControlDigit) {\n return `${\"*\".repeat(dashIndex)}-${formatted.slice(dashIndex + 1)}`;\n }\n return `${formatted.slice(0, dashIndex)}-${\"*\".repeat(formatted.length - dashIndex - 1)}`;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { luhnIsValid } from \"../internal/luhn.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\n/** OCR reference control type. */\nexport const OcrReferenceControlType = {\n CheckDigitOnly: \"CheckDigitOnly\",\n VariableLengthDigit: \"VariableLengthDigit\",\n FixedLength: \"FixedLength\",\n} as const;\nexport type OcrReferenceControlType =\n (typeof OcrReferenceControlType)[keyof typeof OcrReferenceControlType];\n\n/** Options controlling OCR reference parsing. */\nexport class OcrReferenceOptions {\n static readonly Default: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.CheckDigitOnly,\n );\n static readonly VariableLengthDigit: OcrReferenceOptions = new OcrReferenceOptions(\n OcrReferenceControlType.VariableLengthDigit,\n );\n\n readonly controlType: OcrReferenceControlType;\n readonly allowedLengths: readonly number[];\n\n constructor(\n controlType: OcrReferenceControlType = OcrReferenceControlType.CheckDigitOnly,\n allowedLengths: readonly number[] = [],\n ) {\n this.controlType = controlType;\n this.allowedLengths = Object.freeze([...allowedLengths]);\n }\n\n static fixedLength(...allowedLengths: number[]): OcrReferenceOptions {\n return new OcrReferenceOptions(OcrReferenceControlType.FixedLength, allowedLengths);\n }\n}\n\n/**\n * A Swedish OCR reference number (`OCR-nummer`), used in payment flows.\n * 2–25 digits with Luhn check digit; optional length-digit and fixed-length variants.\n */\nexport class SwedishOcrReferenceNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"OCR Reference Number\",\n localizedName: \"OCR-referens\",\n emoji: \"\\u{1F4DD}\",\n sources: Object.freeze([\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/ocr-reference-control/\",\n \"https://www.bankgirot.se/en/services/incoming-payments/bankgiro-receivables/technical-information/\",\n ]),\n });\n\n static readonly displayName = \"OCR\";\n static readonly displayNameShort = \"OCR\";\n\n readonly value: string;\n readonly formatted: string;\n readonly lengthDigit: number | null;\n\n get length(): number {\n return this.value.length;\n }\n get checkDigit(): number {\n return this.value.charCodeAt(this.value.length - 1) - 0x30;\n }\n\n private constructor(value: string, lengthDigit: number | null) {\n this.value = value;\n this.formatted = value;\n this.lengthDigit = lengthDigit;\n }\n\n static tryParse(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length < 2 || digits.length > 25) return null;\n if (!luhnIsValid(digits)) return null;\n const lengthDigit = validateByOptions(digits, options);\n if (lengthDigit === false) return null;\n return new SwedishOcrReferenceNumber(digits, lengthDigit);\n }\n\n static tryParseVariableLengthDigit(\n input: string | null | undefined,\n ): SwedishOcrReferenceNumber | null {\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.VariableLengthDigit);\n }\n\n static tryParseFixedLength(\n input: string | null | undefined,\n fixedLengths: number | readonly number[],\n ): SwedishOcrReferenceNumber | null {\n const lengths = typeof fixedLengths === \"number\" ? [fixedLengths] : [...fixedLengths];\n return SwedishOcrReferenceNumber.tryParse(input, OcrReferenceOptions.fixedLength(...lengths));\n }\n\n static parse(\n input: string,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): SwedishOcrReferenceNumber {\n const r = SwedishOcrReferenceNumber.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid OCR reference number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options: OcrReferenceOptions = OcrReferenceOptions.Default,\n ): boolean {\n return SwedishOcrReferenceNumber.tryParse(input, options) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOcrReferenceNumber.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOcrReferenceNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n\n toDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayName} ${this.formatted}`;\n }\n\n toShortDisplayString(): string {\n return `${SwedishOcrReferenceNumber.displayNameShort} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length < 2 || digits.length > 25)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"OCR reference must be 2–25 digits.\",\n \"OCR-referens måste vara 2–25 siffror.\",\n );\n\n if (!luhnIsValid(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidCheckDigit,\n \"Invalid Luhn check digit.\",\n \"Ogiltig kontrollsiffra.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishOcrReferenceNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishOcrReferenceNumber>[] = [];\n const re = /(?<!\\d)\\d{2,25}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishOcrReferenceNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishOcrReferenceNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishOcrReferenceNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishOcrReferenceNumber(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishOcrReferenceNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOcrReferenceNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction validateByOptions(digits: string, options: OcrReferenceOptions): number | null | false {\n switch (options.controlType) {\n case OcrReferenceControlType.CheckDigitOnly:\n return null;\n case OcrReferenceControlType.VariableLengthDigit: {\n if (digits.length < 3) return false;\n const expected = digits.length % 10;\n const actual = digits.charCodeAt(digits.length - 2) - 0x30;\n if (actual !== expected) return false;\n return actual;\n }\n case OcrReferenceControlType.FixedLength:\n return options.allowedLengths.length > 0 && options.allowedLengths.includes(digits.length)\n ? null\n : false;\n default:\n return false;\n }\n}\n\n/** Returns a fully masked OCR reference, e.g. `12345678901` → `***********`. */\nexport function maskSwedishOcrReferenceNumber(ocr: SwedishOcrReferenceNumber): string {\n return \"*\".repeat(ocr.value.length);\n}\n","/**\n * Known Swedish banks, identified by clearing number ranges.\n *\n * Equivalent of the .NET `SwedishBank` enum.\n */\nexport const SwedishBank = {\n Unknown: \"Unknown\",\n SverigesRiksbank: \"SverigesRiksbank\",\n Nordea: \"Nordea\",\n NordeaPersonkonto: \"NordeaPersonkonto\",\n NordeaPlusgirot: \"NordeaPlusgirot\",\n DanskeBank: \"DanskeBank\",\n Handelsbanken: \"Handelsbanken\",\n SEB: \"SEB\",\n Swedbank: \"Swedbank\",\n Lansforsakringar: \"Lansforsakringar\",\n IcaBanken: \"IcaBanken\",\n Skandiabanken: \"Skandiabanken\",\n SBABBank: \"SBABBank\",\n AvanzaBank: \"AvanzaBank\",\n AionBank: \"AionBank\",\n BnpParibas: \"BnpParibas\",\n CitibankEurope: \"CitibankEurope\",\n HSBBank: \"HSBBank\",\n CalyonBank: \"CalyonBank\",\n RoyalBankOfScotland: \"RoyalBankOfScotland\",\n DNBSverige: \"DNBSverige\",\n Ekobanken: \"Ekobanken\",\n EnityBankGroup: \"EnityBankGroup\",\n EpBank: \"EpBank\",\n IkanoBank: \"IkanoBank\",\n JAKMedlemsbank: \"JAKMedlemsbank\",\n KlarnaBank: \"KlarnaBank\",\n LandshypotekBank: \"LandshypotekBank\",\n LunarBank: \"LunarBank\",\n LanOchSparBank: \"LanOchSparBank\",\n MarginalenBank: \"MarginalenBank\",\n MultitudeBank: \"MultitudeBank\",\n NobaBankGroup: \"NobaBankGroup\",\n NordnetBank: \"NordnetBank\",\n NorthmillBank: \"NorthmillBank\",\n ResursBank: \"ResursBank\",\n Santander: \"Santander\",\n SparbankenSyd: \"SparbankenSyd\",\n SveaBank: \"SveaBank\",\n Alandsbanken: \"Alandsbanken\",\n VolvofinansBank: \"VolvofinansBank\",\n StadshypotekBank: \"StadshypotekBank\",\n GjensidigeNorSparebank: \"GjensidigeNorSparebank\",\n ParetoOhman: \"ParetoOhman\",\n Forex: \"Forex\",\n ParexBank: \"ParexBank\",\n BriteAb: \"BriteAb\",\n BankingCircle: \"BankingCircle\",\n BankOfChinaLuxembourg: \"BankOfChinaLuxembourg\",\n MedMeraBank: \"MedMeraBank\",\n Folkia: \"Folkia\",\n NetfondsBank: \"NetfondsBank\",\n NasdaqOmx: \"NasdaqOmx\",\n Riksgalden: \"Riksgalden\",\n Privatgirot: \"Privatgirot\",\n Intergiro: \"Intergiro\",\n Nykredit: \"Nykredit\",\n TellerBranchNorway: \"TellerBranchNorway\",\n BankernasAutomatbolag: \"BankernasAutomatbolag\",\n TellerBranchSweden: \"TellerBranchSweden\",\n KortacceptNordic: \"KortacceptNordic\",\n Kommuninvest: \"Kommuninvest\",\n VpSecurities: \"VpSecurities\",\n} as const;\n\nexport type SwedishBank = (typeof SwedishBank)[keyof typeof SwedishBank];\n","import { SwedishBank } from \"./swedish-bank.js\";\n\n/**\n * Resolves a Swedish bank from a 4-digit clearing prefix.\n *\n * Equivalent of the .NET internal `BankResolver`.\n *\n * @internal\n */\n\nfunction inRange(value: number, start: number, end: number): boolean {\n return value >= start && value <= end;\n}\n\nexport function isNordeaPersonkonto(c: number): boolean {\n return c === 3300 || c === 3782;\n}\n\nexport function isSEB(c: number): boolean {\n return inRange(c, 5000, 5999) || inRange(c, 9120, 9124) || inRange(c, 9130, 9149);\n}\n\nexport function isHandelsbanken(c: number): boolean {\n return inRange(c, 6000, 6999);\n}\n\nexport function isNordeaOrdinary(c: number): boolean {\n return (\n inRange(c, 1100, 1199) ||\n inRange(c, 1400, 2099) ||\n (inRange(c, 3000, 3399) && c !== 3300) ||\n (inRange(c, 3410, 3999) && c !== 3782) ||\n inRange(c, 4000, 4999)\n );\n}\n\nexport function isDanskeBankSweden(c: number): boolean {\n return inRange(c, 1200, 1399) || inRange(c, 2400, 2499) || inRange(c, 9180, 9189);\n}\n\nexport function isLansforsakringarBank(c: number): boolean {\n return inRange(c, 3400, 3409) || inRange(c, 9020, 9029) || inRange(c, 9060, 9069);\n}\n\nexport function isIcaBanken(c: number): boolean {\n return inRange(c, 9270, 9279);\n}\nexport function isSkandiabanken(c: number): boolean {\n return inRange(c, 9150, 9169);\n}\nexport function isSBABBank(c: number): boolean {\n return inRange(c, 9250, 9259);\n}\nexport function isSverigesRiksbank(c: number): boolean {\n return inRange(c, 1000, 1099);\n}\nexport function isAvanzaBank(c: number): boolean {\n return inRange(c, 9550, 9569);\n}\nexport function isAionBank(c: number): boolean {\n return inRange(c, 9580, 9589);\n}\nexport function isBnpParibas(c: number): boolean {\n return inRange(c, 9470, 9479);\n}\nexport function isCitibankEurope(c: number): boolean {\n return inRange(c, 9040, 9049);\n}\nexport function isHSBBank(c: number): boolean {\n return inRange(c, 9050, 9059);\n}\nexport function isCalyonBank(c: number): boolean {\n return inRange(c, 9080, 9089);\n}\nexport function isRoyalBankOfScotland(c: number): boolean {\n return inRange(c, 9090, 9099);\n}\nexport function isDNBSweden(c: number): boolean {\n return inRange(c, 9190, 9199);\n}\nexport function isEkobanken(c: number): boolean {\n return inRange(c, 9700, 9709);\n}\nexport function isEnityBankGroup(c: number): boolean {\n return inRange(c, 9680, 9689);\n}\nexport function isEpBank(c: number): boolean {\n return inRange(c, 9590, 9599);\n}\nexport function isIkanoBank(c: number): boolean {\n return inRange(c, 9170, 9179);\n}\nexport function isJAKMedlemsbank(c: number): boolean {\n return inRange(c, 9670, 9679);\n}\nexport function isKlarnaBank(c: number): boolean {\n return inRange(c, 9780, 9789);\n}\nexport function isLandshypotekBank(c: number): boolean {\n return inRange(c, 9390, 9399);\n}\nexport function isLunarBank(c: number): boolean {\n return inRange(c, 9710, 9719);\n}\nexport function isLanOchSparBank(c: number): boolean {\n return inRange(c, 9630, 9639);\n}\nexport function isMarginalenBank(c: number): boolean {\n return inRange(c, 9230, 9239);\n}\nexport function isMultitudeBank(c: number): boolean {\n return inRange(c, 9070, 9079);\n}\nexport function isNobaBankGroup(c: number): boolean {\n return inRange(c, 9640, 9649);\n}\nexport function isNordeaPlusgirot(c: number): boolean {\n return inRange(c, 9500, 9549) || inRange(c, 9960, 9969);\n}\nexport function isNordnetBank(c: number): boolean {\n return inRange(c, 9100, 9109);\n}\nexport function isNorthmillBank(c: number): boolean {\n return inRange(c, 9750, 9759);\n}\nexport function isResursBank(c: number): boolean {\n return inRange(c, 9280, 9289);\n}\nexport function isSantander(c: number): boolean {\n return inRange(c, 9460, 9469);\n}\nexport function isSparbankenSyd(c: number): boolean {\n return inRange(c, 9570, 9579);\n}\nexport function isSwedbank7DigitsAccountNumber(c: number): boolean {\n return inRange(c, 7000, 7999);\n}\nexport function isSwedbank10DigitsAccountNumber(c: number): boolean {\n return inRange(c, 8000, 8999) || inRange(c, 9300, 9349);\n}\nexport function isSveaBank(c: number): boolean {\n return inRange(c, 9660, 9669);\n}\nexport function isAlandsbanken(c: number): boolean {\n return inRange(c, 2300, 2399);\n}\nexport function isVolvofinansBank(c: number): boolean {\n return inRange(c, 9610, 9619);\n}\nexport function isStadshypotekBank(c: number): boolean {\n return inRange(c, 9200, 9209);\n}\nexport function isGjensidigeNorSparebank(c: number): boolean {\n return inRange(c, 9260, 9269);\n}\nexport function isParetoOhman(c: number): boolean {\n return inRange(c, 9380, 9389);\n}\nexport function isForex(c: number): boolean {\n return inRange(c, 9400, 9449);\n}\nexport function isParexBank(c: number): boolean {\n return inRange(c, 9480, 9489);\n}\nexport function isBriteAb(c: number): boolean {\n return inRange(c, 9490, 9499);\n}\nexport function isBankingCircle(c: number): boolean {\n return inRange(c, 9600, 9609);\n}\nexport function isBankOfChinaLuxembourg(c: number): boolean {\n return inRange(c, 9620, 9629);\n}\nexport function isMedMeraBank(c: number): boolean {\n return inRange(c, 9650, 9659);\n}\nexport function isFolkia(c: number): boolean {\n return inRange(c, 9690, 9699);\n}\nexport function isNetfondsBank(c: number): boolean {\n return inRange(c, 9720, 9729);\n}\nexport function isNasdaqOmx(c: number): boolean {\n return inRange(c, 9870, 9879);\n}\nexport function isRiksgalden(c: number): boolean {\n return inRange(c, 9880, 9889);\n}\nexport function isPrivatgirot(c: number): boolean {\n return inRange(c, 9860, 9869);\n}\nexport function isIntergiro(c: number): boolean {\n return inRange(c, 9770, 9779);\n}\nexport function isNykredit(c: number): boolean {\n return c === 9950;\n}\nexport function isTellerBranchNorway(c: number): boolean {\n return c === 9951;\n}\nexport function isBankernasAutomatbolag(c: number): boolean {\n return c === 9952;\n}\nexport function isTellerBranchSweden(c: number): boolean {\n return c === 9953;\n}\nexport function isKortacceptNordic(c: number): boolean {\n return c === 9954;\n}\nexport function isKommuninvest(c: number): boolean {\n return c === 9955;\n}\nexport function isVpSecurities(c: number): boolean {\n return c === 9956;\n}\n\nexport interface BankResolution {\n bank: SwedishBank | null;\n bankName: string | null;\n}\n\nexport function resolveBank(clearing4: number): BankResolution {\n if (isNordeaPersonkonto(clearing4))\n return { bank: SwedishBank.NordeaPersonkonto, bankName: \"Nordea Personkonto\" };\n if (isSverigesRiksbank(clearing4))\n return { bank: SwedishBank.SverigesRiksbank, bankName: \"Sveriges riksbank\" };\n if (isAvanzaBank(clearing4)) return { bank: SwedishBank.AvanzaBank, bankName: \"Avanza Bank\" };\n if (isAionBank(clearing4)) return { bank: SwedishBank.AionBank, bankName: \"AION Bank\" };\n if (isBnpParibas(clearing4))\n return { bank: SwedishBank.BnpParibas, bankName: \"BNP Paribas S.A. Bankfilial Sverige\" };\n if (isCitibankEurope(clearing4))\n return { bank: SwedishBank.CitibankEurope, bankName: \"Citibank Europe plc\" };\n if (isHSBBank(clearing4)) return { bank: SwedishBank.HSBBank, bankName: \"HSB Bank\" };\n if (isCalyonBank(clearing4)) return { bank: SwedishBank.CalyonBank, bankName: \"Calyon Bank\" };\n if (isRoyalBankOfScotland(clearing4))\n return { bank: SwedishBank.RoyalBankOfScotland, bankName: \"Royal Bank of Scotland\" };\n if (isDanskeBankSweden(clearing4))\n return { bank: SwedishBank.DanskeBank, bankName: \"Danske Bank\" };\n if (isDNBSweden(clearing4)) return { bank: SwedishBank.DNBSverige, bankName: \"DNB Sverige\" };\n if (isEkobanken(clearing4)) return { bank: SwedishBank.Ekobanken, bankName: \"Ekobanken\" };\n if (isEnityBankGroup(clearing4))\n return { bank: SwedishBank.EnityBankGroup, bankName: \"Enity Bank Group\" };\n if (isEpBank(clearing4)) return { bank: SwedishBank.EpBank, bankName: \"EP Bank\" };\n if (isHandelsbanken(clearing4))\n return { bank: SwedishBank.Handelsbanken, bankName: \"Handelsbanken\" };\n if (isIcaBanken(clearing4)) return { bank: SwedishBank.IcaBanken, bankName: \"ICA Banken\" };\n if (isIkanoBank(clearing4)) return { bank: SwedishBank.IkanoBank, bankName: \"Ikano Bank\" };\n if (isJAKMedlemsbank(clearing4))\n return { bank: SwedishBank.JAKMedlemsbank, bankName: \"JAK Medlemsbank\" };\n if (isKlarnaBank(clearing4)) return { bank: SwedishBank.KlarnaBank, bankName: \"Klarna Bank\" };\n if (isLandshypotekBank(clearing4))\n return { bank: SwedishBank.LandshypotekBank, bankName: \"Landshypotek Bank\" };\n if (isLunarBank(clearing4)) return { bank: SwedishBank.LunarBank, bankName: \"Lunar Bank\" };\n if (isLansforsakringarBank(clearing4))\n return { bank: SwedishBank.Lansforsakringar, bankName: \"Länsförsäkringar Bank\" };\n if (isLanOchSparBank(clearing4))\n return { bank: SwedishBank.LanOchSparBank, bankName: \"Lån & Spar Bank\" };\n if (isMarginalenBank(clearing4))\n return { bank: SwedishBank.MarginalenBank, bankName: \"Marginalen Bank\" };\n if (isMultitudeBank(clearing4))\n return { bank: SwedishBank.MultitudeBank, bankName: \"Multitude Bank\" };\n if (isNobaBankGroup(clearing4))\n return { bank: SwedishBank.NobaBankGroup, bankName: \"Noba Bank Group\" };\n if (isNordeaPlusgirot(clearing4))\n return { bank: SwedishBank.NordeaPlusgirot, bankName: \"Nordea (Plusgirot)\" };\n if (isNordeaOrdinary(clearing4)) return { bank: SwedishBank.Nordea, bankName: \"Nordea\" };\n if (isNordnetBank(clearing4)) return { bank: SwedishBank.NordnetBank, bankName: \"Nordnet Bank\" };\n if (isNorthmillBank(clearing4))\n return { bank: SwedishBank.NorthmillBank, bankName: \"Northmill Bank\" };\n if (isResursBank(clearing4)) return { bank: SwedishBank.ResursBank, bankName: \"Resurs Bank\" };\n if (isSantander(clearing4)) return { bank: SwedishBank.Santander, bankName: \"Santander\" };\n if (isSBABBank(clearing4)) return { bank: SwedishBank.SBABBank, bankName: \"SBAB Bank\" };\n if (isSEB(clearing4)) return { bank: SwedishBank.SEB, bankName: \"SEB\" };\n if (isSkandiabanken(clearing4))\n return { bank: SwedishBank.Skandiabanken, bankName: \"Skandiabanken\" };\n if (isSparbankenSyd(clearing4))\n return { bank: SwedishBank.SparbankenSyd, bankName: \"Sparbanken Syd\" };\n if (isSwedbank7DigitsAccountNumber(clearing4) || isSwedbank10DigitsAccountNumber(clearing4))\n return { bank: SwedishBank.Swedbank, bankName: \"Swedbank\" };\n if (isSveaBank(clearing4)) return { bank: SwedishBank.SveaBank, bankName: \"Svea Bank\" };\n if (isAlandsbanken(clearing4))\n return { bank: SwedishBank.Alandsbanken, bankName: \"Ålandsbanken Abp (Finland) svensk filial\" };\n if (isVolvofinansBank(clearing4))\n return { bank: SwedishBank.VolvofinansBank, bankName: \"Volvofinans Bank\" };\n if (isStadshypotekBank(clearing4))\n return { bank: SwedishBank.StadshypotekBank, bankName: \"Stadshypotek Bank\" };\n if (isGjensidigeNorSparebank(clearing4))\n return { bank: SwedishBank.GjensidigeNorSparebank, bankName: \"Gjensidige NOR Sparebank\" };\n if (isParetoOhman(clearing4)) return { bank: SwedishBank.ParetoOhman, bankName: \"Pareto Öhman\" };\n if (isForex(clearing4)) return { bank: SwedishBank.Forex, bankName: \"Forex\" };\n if (isParexBank(clearing4)) return { bank: SwedishBank.ParexBank, bankName: \"Parex Bank\" };\n if (isBriteAb(clearing4)) return { bank: SwedishBank.BriteAb, bankName: \"Brite AB\" };\n if (isBankingCircle(clearing4))\n return { bank: SwedishBank.BankingCircle, bankName: \"Banking Circle\" };\n if (isBankOfChinaLuxembourg(clearing4))\n return { bank: SwedishBank.BankOfChinaLuxembourg, bankName: \"Bank of China (Luxembourg)\" };\n if (isMedMeraBank(clearing4)) return { bank: SwedishBank.MedMeraBank, bankName: \"MedMera Bank\" };\n if (isFolkia(clearing4)) return { bank: SwedishBank.Folkia, bankName: \"Folkia\" };\n if (isNetfondsBank(clearing4))\n return { bank: SwedishBank.NetfondsBank, bankName: \"Netfonds Bank\" };\n if (isNasdaqOmx(clearing4)) return { bank: SwedishBank.NasdaqOmx, bankName: \"Nasdaq-OMX\" };\n if (isRiksgalden(clearing4)) return { bank: SwedishBank.Riksgalden, bankName: \"Riksgälden\" };\n if (isPrivatgirot(clearing4)) return { bank: SwedishBank.Privatgirot, bankName: \"Privatgirot\" };\n if (isIntergiro(clearing4)) return { bank: SwedishBank.Intergiro, bankName: \"Intergiro\" };\n if (isNykredit(clearing4)) return { bank: SwedishBank.Nykredit, bankName: \"Nykredit\" };\n if (isTellerBranchNorway(clearing4))\n return { bank: SwedishBank.TellerBranchNorway, bankName: \"Teller Branch Norway\" };\n if (isBankernasAutomatbolag(clearing4))\n return { bank: SwedishBank.BankernasAutomatbolag, bankName: \"Bankernas Automatbolag\" };\n if (isTellerBranchSweden(clearing4))\n return { bank: SwedishBank.TellerBranchSweden, bankName: \"Teller Branch Sweden\" };\n if (isKortacceptNordic(clearing4))\n return { bank: SwedishBank.KortacceptNordic, bankName: \"Kortaccept Nordic\" };\n if (isKommuninvest(clearing4))\n return { bank: SwedishBank.Kommuninvest, bankName: \"Kommuninvest\" };\n if (isVpSecurities(clearing4))\n return { bank: SwedishBank.VpSecurities, bankName: \"VP Securities\" };\n\n return { bank: null, bankName: null };\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { resolveBank } from \"./bank-resolver.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\n/**\n * A Swedish clearing number (`clearingnummer`), 4 digits (or 5 starting with `8` for Swedbank).\n */\nexport class SwedishBankClearingNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Clearing Number\",\n localizedName: \"Clearingnummer\",\n emoji: \"\\u{1F511}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n readonly digits: string;\n readonly bank: SwedishBank;\n readonly bankName: string;\n\n private constructor(digits: string, bank: SwedishBank, bankName: string) {\n this.digits = digits;\n this.bank = bank;\n this.bankName = bankName;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankClearingNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (digits.length < 4 || digits.length > 5) return null;\n\n if (digits.length === 5 && digits[0] !== \"8\") return null;\n if (digits.length === 4 && digits[0] === \"8\") return null;\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null) return null;\n\n return new SwedishBankClearingNumber(digits, bank, bankName);\n }\n\n static parse(input: string): SwedishBankClearingNumber {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid clearing number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankClearingNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankClearingNumber.tryParse(input);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankClearingNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toString(): string {\n return this.digits.length === 5 ? `${this.digits.slice(0, 4)}-${this.digits[4]}` : this.digits;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (digits.length < 4 || digits.length > 5)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Clearing number must be 4 or 5 digits.\",\n \"Clearingnummer måste vara 4 eller 5 siffror.\",\n );\n\n if (digits.length === 5 && digits[0] !== \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"A 5-digit clearing number must start with 8 (Swedbank).\",\n \"Ett 5-siffrigt clearingnummer måste börja med 8 (Swedbank).\",\n );\n\n if (digits.length === 4 && digits[0] === \"8\")\n return invalidResult(\n input,\n ValidationErrorReason.InvalidSwedbankFormat,\n \"Clearing numbers starting with 8 must be 5 digits (Swedbank).\",\n \"Clearingnummer som börjar med 8 måste vara 5 siffror (Swedbank).\",\n );\n\n const clearing4 = parseInt4(digits);\n const { bank, bankName } = resolveBank(clearing4);\n if (bank === null || bankName === null)\n return invalidResult(\n input,\n ValidationErrorReason.UnknownClearingRange,\n \"Clearing number does not match any known bank.\",\n \"Clearingnumret matchar ingen känd bank.\",\n );\n\n return validResult(input);\n }\n\n equals(other: SwedishBankClearingNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: SwedishBankClearingNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/** Returns a masked clearing number showing the bank identifier (first digit), e.g. `5001` → `5***`. */\nexport function maskSwedishBankClearingNumber(c: SwedishBankClearingNumber): string {\n const digits = c.digits;\n return digits.length <= 1 ? \"*\".repeat(digits.length) : digits[0] + \"*\".repeat(digits.length - 1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { ValidationResult, validResult, invalidResult } from \"../validation/validation-result.js\";\nimport { ValidationErrorReason } from \"../validation/validation-error-reason.js\";\nimport { SwedishBankClearingNumber } from \"./swedish-bank-clearing-number.js\";\nimport { SwedishBank } from \"./swedish-bank.js\";\nimport {\n isHandelsbanken,\n isNordeaPersonkonto,\n isNordeaPlusgirot,\n isRiksgalden,\n isSparbankenSyd,\n isSwedbank10DigitsAccountNumber,\n resolveBank,\n} from \"./bank-resolver.js\";\n\nconst MAX_INPUT_LENGTH = 40;\nconst DIGITS_11_TO_15 = /^\\d{11,15}$/;\n\n/**\n * A Swedish bank account, identified by clearing number + account number with\n * bank-specific length rules.\n */\nexport class SwedishBankAccount {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Bank Account\",\n localizedName: \"Bankkonto\",\n emoji: \"\\u{1F3E7}\",\n sources: Object.freeze([\n \"https://www.bankinfrastruktur.se/framtidens-betalningsinfrastruktur/iban-och-svenskt-nationellt-kontonummer#clearingTable\",\n \"https://sv.wikipedia.org/wiki/Clearingnummer\",\n ]),\n });\n\n static readonly displayName = \"Bankkonto\";\n\n readonly clearing: SwedishBankClearingNumber;\n readonly accountNumber: string;\n readonly formatted: string;\n\n get clearingNumber(): string {\n return this.clearing.digits;\n }\n get bankName(): string | null {\n return this.clearing.bankName;\n }\n get bank(): SwedishBank | null {\n return this.clearing.bank;\n }\n\n private constructor(\n clearing: SwedishBankClearingNumber,\n accountNumber: string,\n formatted: string,\n ) {\n this.clearing = clearing;\n this.accountNumber = accountNumber;\n this.formatted = formatted;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankAccount | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = keepDigits(sanitizeInput(input));\n if (digits.length > MAX_INPUT_LENGTH) return null;\n if (!DIGITS_11_TO_15.test(digits)) return null;\n if (!isValidLength(digits)) return null;\n\n const { clearingDigits, account } = splitClearingAndAccount(digits);\n const clearing = SwedishBankClearingNumber.tryParse(clearingDigits);\n if (clearing === null) return null;\n\n return new SwedishBankAccount(clearing, account, `${clearingDigits}-${account}`);\n }\n\n static parse(input: string): SwedishBankAccount {\n const r = SwedishBankAccount.tryParse(input);\n if (r === null) throw new Error(\"Invalid Bankkonto number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankAccount.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccount.tryParse(input);\n if (r) return r.clearingNumber + r.accountNumber;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankAccount.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.clearingNumber + this.accountNumber;\n }\n\n toDisplayString(): string {\n return `${SwedishBankAccount.displayName} ${this.formatted}`;\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static validate(input: string | null | undefined): ValidationResult {\n if (input == null || input.trim() === \"\")\n return invalidResult(\n input,\n ValidationErrorReason.InputIsEmpty,\n \"Input is empty or whitespace.\",\n \"Värdet är tomt.\",\n );\n\n const digits = keepDigits(sanitizeInput(input));\n\n if (digits.length > MAX_INPUT_LENGTH)\n return invalidResult(\n input,\n ValidationErrorReason.InputTooLong,\n \"Input contains too many characters.\",\n \"Värdet innehåller för många tecken.\",\n );\n\n if (!DIGITS_11_TO_15.test(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidLength,\n \"Bank account must be 11–15 digits.\",\n \"Bankkonto måste vara 11–15 siffror.\",\n );\n\n if (!isValidLength(digits))\n return invalidResult(\n input,\n ValidationErrorReason.InvalidAccountLengthForBank,\n \"Account length is wrong for the identified bank.\",\n \"Kontolängden stämmer inte för den identifierade banken.\",\n );\n\n const { clearingDigits } = splitClearingAndAccount(digits);\n if (SwedishBankClearingNumber.tryParse(clearingDigits) === null)\n return invalidResult(\n input,\n ValidationErrorReason.InvalidClearingNumber,\n \"The clearing number part is invalid.\",\n \"Clearingnummerdelen är ogiltig.\",\n );\n\n return validResult(input);\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishBankAccount>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishBankAccount>[] = [];\n const re = /(?<!\\d)\\d{4,5}[\\s-]?\\d{5,10}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishBankAccount.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishBankAccount>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishBankAccount\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishBankAccount(r),\n confidence: TextMatchConfidence.Low,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishBankAccount | null | undefined): boolean {\n return (\n other != null &&\n this.clearingNumber === other.clearingNumber &&\n this.accountNumber === other.accountNumber\n );\n }\n compareTo(other: SwedishBankAccount | null | undefined): number {\n if (other == null) return 1;\n const a = this.toNormalizedString();\n const b = other.toNormalizedString();\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\n\nfunction isValidLength(digits: string): boolean {\n const length = digits.length;\n const c4 = parseInt4(digits);\n\n if (isHandelsbanken(c4)) return length >= 12 && length <= 13;\n if (isNordeaPersonkonto(c4)) return length === 14;\n if (isNordeaPlusgirot(c4)) return length === 14;\n if (isSparbankenSyd(c4)) return length === 14;\n if (isRiksgalden(c4)) return length === 14;\n if (isSwedbank10DigitsAccountNumber(c4)) return length >= 7 && length <= 15;\n\n const { bank } = resolveBank(c4);\n return bank !== null && length === 11;\n}\n\nfunction splitClearingAndAccount(digits: string): { clearingDigits: string; account: string } {\n if (digits[0] === \"8\") {\n return { clearingDigits: digits.slice(0, 5), account: digits.slice(5) };\n }\n return { clearingDigits: digits.slice(0, 4), account: digits.slice(4) };\n}\n\nfunction parseInt4(s: string): number {\n return (\n (s.charCodeAt(0) - 0x30) * 1000 +\n (s.charCodeAt(1) - 0x30) * 100 +\n (s.charCodeAt(2) - 0x30) * 10 +\n (s.charCodeAt(3) - 0x30)\n );\n}\n\n/**\n * Returns a masked bank account showing the clearing number, e.g. `5100-*******`.\n * Pass `maskClearingNumber: true` to also mask the clearing number.\n */\nexport function maskSwedishBankAccount(\n account: SwedishBankAccount,\n options?: { maskClearingNumber?: boolean },\n): string {\n const maskClearing = options?.maskClearingNumber ?? false;\n const clearing = maskClearing\n ? \"*\".repeat(account.clearingNumber.length)\n : account.clearingNumber;\n return `${clearing}-${\"*\".repeat(account.accountNumber.length)}`;\n}\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace as baseCollapse } from \"../internal/input-sanitization.js\";\n\n// Single-letter name parts (e.g. \"B N\" returned by an identity provider) are\n// not officially valid full names in most jurisdictions, but they appear in\n// real-world data from Skatteverket, BankID and other identity providers.\n// Normalization must preserve them rather than discard the name.\nexport const SINGLE_PART_PATTERN =\n /^(?:[\\p{L}\\p{M}]+|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\nexport const FULL_NAME_PATTERN = /^[\\p{L}\\p{M}][\\p{L}\\p{M}']*(?:\\s+[\\p{L}\\p{M}][\\p{L}\\p{M}']*)+$/u;\n\nconst HONORIFICS = [\n \"fröken\",\n \"froken\",\n \"froeken\",\n \"prof\",\n \"miss\",\n \"mrs\",\n \"mr\",\n \"ms\",\n \"dr\",\n \"herr\",\n \"fru\",\n];\n\nexport function collapseWhitespace(input: string | null | undefined): string {\n let result = baseCollapse(input);\n result = result.replace(/\\s*-\\s*/g, \"-\");\n const parts = result\n .split(\" \")\n .map((p) => p.replace(/^\\.+|\\.+$/g, \"\"))\n .filter((p) => p.length > 0);\n result = parts.join(\" \");\n return stripLeadingHonorific(result);\n}\n\nfunction stripLeadingHonorific(input: string): string {\n const lower = input.toLowerCase();\n for (const h of HONORIFICS) {\n if (input.length <= h.length) continue;\n if (!lower.startsWith(h)) continue;\n if (input[h.length] !== \" \") continue;\n return input.slice(h.length + 1);\n }\n return input;\n}\n\n/**\n * If every letter in `input` has the same case (all lower or all upper),\n * capitalize each word and hyphenated sub-word. Otherwise keep original casing.\n */\nexport function normalizeCasing(input: string): string {\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return input;\n const culture = PrimitivesDefaults.culture;\n const allLower = letters.every((c) => c === c.toLocaleLowerCase(culture));\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(culture));\n return allLower || allUpper ? capitalizeEachWord(input) : input;\n}\n\nexport function validateNamePart(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(value)) return false;\n if (/[\\p{Cn}]/u.test(value)) return false;\n return SINGLE_PART_PATTERN.test(value);\n}\n\nexport function validateGivenNames(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n const parts = value.split(\" \").filter((p) => p !== \"\");\n return parts.length > 0 && parts.every(validateNamePart);\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input.split(\" \").filter(Boolean).map(capitalizeHyphenated).join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateGivenNames,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's given names (`förnamn`). */\nexport class PersonGivenName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Given Name\",\n localizedName: \"Förnamn\",\n emoji: \"\\u{270F}\\uFE0F\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n readonly names: readonly string[];\n readonly preferredName: string | null;\n\n private constructor(value: string, names: readonly string[], preferredName: string | null) {\n this.value = value;\n this.names = Object.freeze([...names]);\n this.preferredName = preferredName;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonGivenName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateGivenNames(normalized)) return null;\n const names = normalized.split(\" \").filter((p) => p !== \"\");\n let preferred: string | null = null;\n const preferredInput = options?.preferredName ?? null;\n if (preferredInput != null && preferredInput.trim() !== \"\") {\n const np = normalizeCasing(collapseWhitespace(preferredInput));\n const found = names.find((n) => n.toLowerCase() === np.toLowerCase()) ?? null;\n if (found === null) return null;\n preferred = found;\n }\n return new PersonGivenName(normalized, names, preferred);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonGivenName {\n const r = PersonGivenName.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid given name(s).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonGivenName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonGivenName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonGivenName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonGivenName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonGivenName {\n const found = this.names.find((n) => n.toLowerCase() === preferredName.toLowerCase()) ?? null;\n if (found === null) {\n throw new Error(\"Preferred name must be one of the given names.\");\n }\n return new PersonGivenName(this.value, this.names, found);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonGivenName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonGivenName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateNamePart,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's family name (`efternamn`). */\nexport class PersonFamilyName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Family Name\",\n localizedName: \"Efternamn\",\n emoji: \"\\u{1F4DB}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): PersonFamilyName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateNamePart(normalized)) return null;\n return new PersonFamilyName(normalized);\n }\n\n static parse(input: string): PersonFamilyName {\n const r = PersonFamilyName.tryParse(input);\n if (r === null) throw new Error(\"Invalid family name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFamilyName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFamilyName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFamilyName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFamilyName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFamilyName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFamilyName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"./person-name-normalization.js\";\nimport { PersonGivenName } from \"./person-given-name.js\";\nimport { PersonFamilyName } from \"./person-family-name.js\";\n\nconst MAX_INPUT_LENGTH = 500;\n\n/** A person's full name (`fullständigt namn`). */\nexport class PersonFullName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Full Name\",\n localizedName: \"Fullständigt namn\",\n emoji: \"\\u{1F4C7}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly givenName: PersonGivenName;\n readonly familyName: PersonFamilyName;\n readonly value: string;\n\n get preferredName(): string | null {\n return this.givenName.preferredName;\n }\n\n private constructor(given: PersonGivenName, family: PersonFamilyName, value: string) {\n this.givenName = given;\n this.familyName = family;\n this.value = value;\n }\n\n static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName {\n return new PersonFullName(givenName, familyName, `${givenName.value} ${familyName.value}`);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonFullName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const tokens = collapsed.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n const givenPart = tokens.slice(0, tokens.length - 1).join(\" \");\n const given = PersonGivenName.tryParse(givenPart, options);\n if (given === null) return null;\n const family = PersonFamilyName.tryParse(tokens[tokens.length - 1]!);\n if (family === null) return null;\n return new PersonFullName(given, family, `${given.value} ${family.value}`);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonFullName {\n const r = PersonFullName.tryParse(input, options);\n if (r === null) {\n throw new Error(\"Invalid full name. Must contain at least given name(s) and a family name.\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFullName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFullName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFullName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFullName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonFullName {\n const given = this.givenName.withPreferredName(preferredName);\n return new PersonFullName(given, this.familyName, this.value);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFullName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFullName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","/**\n * Shared helpers for organization-number / VAT validation. Internal to the\n * `organization/` namespace.\n */\n\n/** Validates ISO 17442 / ISO 7064 Mod-97 checksum (used by LEI and IBAN). */\nexport function isValidIso7064Mod97(input: string): boolean {\n if (!input) return false;\n let s = \"\";\n for (const c of input) {\n if (c >= \"0\" && c <= \"9\") s += c;\n else if (c >= \"A\" && c <= \"Z\") s += String(c.charCodeAt(0) - 55);\n else if (c >= \"a\" && c <= \"z\") s += String(c.charCodeAt(0) - 87);\n else return false;\n }\n // Compute s % 97 using running modulo to avoid BigInt overhead.\n let mod = 0;\n for (let i = 0; i < s.length; i++) {\n mod = (mod * 10 + (s.charCodeAt(i) - 0x30)) % 97;\n }\n return mod === 1;\n}\n\n/** Removes spaces, dashes and non-breaking spaces. */\nexport function cleanSeparators(input: string): string {\n if (!input) return \"\";\n let out = \"\";\n for (const c of input) {\n if (c !== \" \" && c !== \"-\" && c !== \"\\u00A0\") out += c;\n }\n return out;\n}\n\n/** Trims and uppercases, removing a trailing `(PUBL)` suffix. */\nexport function cleanName(name: string | null | undefined): string {\n if (name == null || name.trim() === \"\") return \"\";\n let s = name.trim().toUpperCase();\n if (s.endsWith(\"(PUBL)\")) s = s.slice(0, -6).trim();\n return s;\n}\n\nexport function nameContains(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.indexOf(n) >= 0) return true;\n return false;\n}\n\nexport function nameContainsStandalone(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) {\n if (haystack === n) return true;\n if (haystack.startsWith(n + \" \")) return true;\n if (haystack.endsWith(\" \" + n)) return true;\n if (haystack.indexOf(\" \" + n + \" \") >= 0) return true;\n }\n return false;\n}\n\nexport function nameEndsWith(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.endsWith(n)) return true;\n return false;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { nameContains, nameContainsStandalone } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 300;\n\n/** Pattern matching strict Swedish company-name characters (Bolagsverket). */\nconst COMPANY_NAME_PATTERN = /^[\\p{L}\\d\\s\\-'&.,/:()+]+$/u;\n\nconst ORG_SUFFIX_TOKENS: readonly string[] = [\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"];\nconst ORG_SUFFIX_PHRASES: readonly string[] = [\n \" EK.FÖR.\",\n \" EK FÖR\",\n \" EKONOMISK FÖRENING\",\n \" IDEELL FÖRENING\",\n \" SAMFÄLLIGHETSFÖRENING\",\n \" RIKSFÖRBUND\",\n];\nconst ORG_PREFIXES: readonly string[] = [\"STIFTELSEN \", \"BRF \", \"HSB \"];\nconst ORG_KEYWORDS: readonly string[] = [\n \" KOMMUN\",\n \" REGION\",\n \" LANDSTING\",\n \" MYNDIGHET\",\n \" STIFTELSE\",\n \" FÖRENING\",\n];\n\nconst KNOWN_ABBREVIATIONS = new Set([\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"]);\n\nconst KNOWN_GOVERNMENT_AGENCIES: ReadonlySet<string> = new Set([\n \"SKATTEVERKET\",\n \"TULLVERKET\",\n \"KRONOFOGDEN\",\n \"STATISTISKA CENTRALBYRÅN\",\n \"KRIMINALVÅRDEN\",\n \"MIGRATIONSVERKET\",\n \"DOMSTOLSVERKET\",\n \"BROTTSFÖREBYGGANDE RÅDET\",\n \"FÖRSÄKRINGSKASSAN\",\n \"SOCIALSTYRELSEN\",\n \"SKOLVERKET\",\n \"CENTRALA STUDIESTÖDSNÄMNDEN\",\n \"UNIVERSITETS- OCH HÖGSKOLERÅDET\",\n \"BOLAGSVERKET\",\n \"TRAFIKVERKET\",\n \"TRANSPORTSTYRELSEN\",\n \"TILLVÄXTVERKET\",\n \"PATENT- OCH REGISTRERINGSVERKET\",\n \"ARBETSFÖRMEDLINGEN\",\n \"ARBETSMILJÖVERKET\",\n \"NATURVÅRDSVERKET\",\n \"FÖRSVARSMAKTEN\",\n \"POST- OCH TELESTYRELSEN\",\n \"SJÖFARTSVERKET\",\n \"RIKSBANKEN\",\n \"RIKSREVISIONEN\",\n \"RIKSGÄLDEN\",\n \"RIKSGÄLDSKONTORET\",\n \"EKONOMISTYRNINGSVERKET\",\n \"JORDBRUKSVERKET\",\n \"LIVSMEDELSVERKET\",\n \"LANTMÄTERIET\",\n \"BOVERKET\",\n \"KONSUMENTVERKET\",\n \"RIKSARKIVET\",\n \"KUNGLIGA BIBLIOTEKET\",\n \"KEMIKALIEINSPEKTIONEN\",\n \"INTEGRITETSSKYDDSMYNDIGHETEN\",\n \"ELSÄKERHETSVERKET\",\n \"HAVS- OCH VATTENMYNDIGHETEN\",\n \"SKOGSSTYRELSEN\",\n \"VALMYNDIGHETEN\",\n \"LÄNSSTYRELSEN\",\n \"DATAINSPEKTIONEN\",\n \"KONKURRENSVERKET\",\n \"UPPHANDLINGSMYNDIGHETEN\",\n]);\n\n/** A Swedish organization name (`organisationsnamn` / `företagsnamn`). */\nexport class SwedishOrganizationName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Name\",\n localizedName: \"Organisationsnamn\",\n emoji: \"\\u{1F3F7}\\uFE0F\",\n sources: Object.freeze([\"https://bolagsverket.se\"]),\n });\n\n readonly value: string;\n readonly casingNormalizedValue: string;\n readonly hasOrganizationIndicators: boolean;\n readonly inferredSwedishOrganizationType: SwedishOrganizationType;\n\n private constructor(\n value: string,\n casingNormalized: string,\n hasIndicators: boolean,\n inferredType: SwedishOrganizationType,\n ) {\n this.value = value;\n this.casingNormalizedValue = casingNormalized;\n this.hasOrganizationIndicators = hasIndicators;\n this.inferredSwedishOrganizationType = inferredType;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationName | null {\n const normalized = collapseWhitespace(input);\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n if (!validateName(normalized)) return null;\n\n const forInference = stripPublSuffix(normalized);\n const hasIndicators = detectOrganizationIndicators(forInference);\n const inferred = inferTypeFromName(forInference);\n const casing = SwedishOrganizationName.normalizeCasing(normalized);\n return new SwedishOrganizationName(normalized, casing, hasIndicators, inferred);\n }\n\n static parse(input: string): SwedishOrganizationName {\n const r = SwedishOrganizationName.tryParse(input);\n if (r === null) throw new Error(\"Invalid organization name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationName.tryParse(input) !== null;\n }\n\n static isKnownGovernmentAgency(name: string | null | undefined): boolean {\n if (name == null || name.trim() === \"\") return false;\n return KNOWN_GOVERNMENT_AGENCIES.has(collapseWhitespace(name).toUpperCase());\n }\n\n static inferSwedishOrganizationType(name: string | null | undefined): SwedishOrganizationType {\n if (name == null || name.trim() === \"\") return SwedishOrganizationType.Unknown;\n return inferTypeFromName(stripPublSuffix(collapseWhitespace(name)));\n }\n\n static normalizeCasing(name: string): string {\n const letters = [...name].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return name;\n const allLower = letters.every((c) => c === c.toLowerCase());\n const allUpper = letters.every((c) => c === c.toUpperCase());\n if (!allLower && !allUpper) return name;\n\n return name\n .split(\" \")\n .map((w) => (KNOWN_ABBREVIATIONS.has(w.toUpperCase()) ? w.toUpperCase() : capitalizeWord(w)))\n .join(\" \");\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishOrganizationName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: SwedishOrganizationName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOrganizationName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction stripPublSuffix(name: string): string {\n const trimmed = name.trimEnd();\n if (trimmed.toUpperCase().endsWith(\"(PUBL)\")) return trimmed.slice(0, -6).trimEnd();\n return name;\n}\n\nfunction validateName(value: string): boolean {\n if (value.length < 2 || value.length > 200) return false;\n for (const c of value) {\n const code = c.charCodeAt(0);\n if (code < 0x20 || code === 0x7f) return false;\n }\n return COMPANY_NAME_PATTERN.test(value);\n}\n\nfunction detectOrganizationIndicators(collapsed: string): boolean {\n const upper = collapsed.toUpperCase();\n if (!upper) return false;\n const words = upper.split(\" \");\n if (words.length > 0 && ORG_SUFFIX_TOKENS.includes(words[words.length - 1]!)) return true;\n for (const p of ORG_SUFFIX_PHRASES) if (upper.endsWith(p)) return true;\n for (const p of ORG_PREFIXES) if (upper.startsWith(p)) return true;\n for (const k of ORG_KEYWORDS) if (upper.indexOf(k) >= 0) return true;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return true;\n return false;\n}\n\nfunction inferTypeFromName(collapsed: string): SwedishOrganizationType {\n const upper = collapsed.toUpperCase();\n if (!upper) return SwedishOrganizationType.Unknown;\n\n const words = upper.split(\" \");\n const lastWord = words.length > 0 ? words[words.length - 1]! : \"\";\n\n if (lastWord === \"AB\") return SwedishOrganizationType.Aktiebolag;\n if (lastWord === \"KB\" || nameContains(upper, \"KOMMANDITBOLAG\"))\n return SwedishOrganizationType.Kommanditbolag;\n if (lastWord === \"HB\" || nameContains(upper, \"HANDELSBOLAG\"))\n return SwedishOrganizationType.Handelsbolag;\n\n if (\n nameContainsStandalone(upper, \"BRF\") ||\n nameContains(upper, \"BOSTADSRÄTTSFÖRENING\", \"BOSTADSRATTSFORENING\")\n )\n return SwedishOrganizationType.Bostadsrattsforening;\n\n if (\n nameContains(\n upper,\n \"SAMFÄLLIGHETSFÖRENING\",\n \"SAMFALLIGHETSFORENING\",\n \"SAMFALLIGHETSSFORENING\",\n \"SAMFÄLLIGHET\",\n \"SAMFALLIGHET\",\n )\n )\n return SwedishOrganizationType.Samfallighetsforening;\n\n if (lastWord === \"HSB\" || upper.startsWith(\"HSB \"))\n return SwedishOrganizationType.EkonomiskForening;\n\n if (\n upper.endsWith(\" EK.FÖR.\") ||\n upper.endsWith(\" EK FÖR\") ||\n nameContains(upper, \"EKONOMISK FÖRENING\")\n )\n return SwedishOrganizationType.EkonomiskForening;\n\n if (nameContains(upper, \"IDEELL FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n if (upper.startsWith(\"STIFTELSEN \") || nameContains(upper, \"STIFTELSE\"))\n return SwedishOrganizationType.Stiftelse;\n\n if (nameContains(upper, \"KOMMUN\")) return SwedishOrganizationType.Kommun;\n if (nameContains(upper, \"REGION\", \"LANDSTING\")) return SwedishOrganizationType.Region;\n if (nameContains(upper, \"FÖRSAMLING\", \"FORSAMLING\")) return SwedishOrganizationType.Forsamling;\n if (nameContains(upper, \"MYNDIGHET\")) return SwedishOrganizationType.OffentligSektor;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return SwedishOrganizationType.OffentligSektor;\n if (nameContains(upper, \"DÖDSBO\", \"DODSBO\")) return SwedishOrganizationType.Dodsbo;\n\n if (lastWord === \"EF\" || nameContains(upper, \"ENSKILD FIRMA\"))\n return SwedishOrganizationType.EnskildFirma;\n if (nameContains(upper, \"PRIVATPERSON\")) return SwedishOrganizationType.Privatperson;\n\n if (nameContainsStandalone(upper, \"EUROPABOLAG\", \"SE-BOLAG\"))\n return SwedishOrganizationType.Europabolag;\n if (nameContainsStandalone(upper, \"EUROPEISK EKONOMISK INTRESSEGRUPPERING\", \"EEIG\"))\n return SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering;\n if (nameContainsStandalone(upper, \"SCE\") || nameContains(upper, \"EUROPEISK KOOPERATIV FÖRENING\"))\n return SwedishOrganizationType.SCEForening;\n if (nameContainsStandalone(upper, \"FILIAL\")) return SwedishOrganizationType.Filial;\n\n if (nameContains(upper, \"RIKSFÖRBUND\", \"FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n return SwedishOrganizationType.Unknown;\n}\n\n/** Mask an organization name, keeping only the first letter of each word, e.g. `Volvo AB` -> `V**** A*`. */\nexport function maskSwedishOrganizationName(value: SwedishOrganizationName): string {\n return value.value\n .split(\" \")\n .filter((part) => part.length > 0)\n .map((part) => (part.length <= 1 ? \"*\" : part[0]! + \"*\".repeat(part.length - 1)))\n .join(\" \");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const lowered = word.toLocaleLowerCase(\"sv-SE\");\n return lowered[0]!.toLocaleUpperCase(\"sv-SE\") + lowered.slice(1);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { PersonFullName } from \"../person/person-full-name.js\";\nimport { SwedishOrganizationName } from \"../organization/swedish-organization-name.js\";\n\n/** The type of bank account holder. */\nexport const BankAccountHolderType = {\n Unknown: \"Unknown\",\n Person: \"Person\",\n Organization: \"Organization\",\n} as const;\nexport type BankAccountHolderType =\n (typeof BankAccountHolderType)[keyof typeof BankAccountHolderType];\n\n/**\n * A Swedish bank account holder name (`kontoinnehavare`).\n * Detects whether the holder is a person or an organization based on\n * `SwedishOrganizationName.hasOrganizationIndicators`.\n */\nexport class SwedishBankAccountHolderName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Account Holder Name\",\n localizedName: \"Kontoinnehavare\",\n emoji: \"\\u{1F464}\",\n sources: Object.freeze([]),\n });\n\n readonly value: string;\n readonly holderType: BankAccountHolderType;\n readonly personName: PersonFullName | null;\n readonly organizationName: SwedishOrganizationName | null;\n\n private constructor(\n value: string,\n holderType: BankAccountHolderType,\n personName: PersonFullName | null,\n organizationName: SwedishOrganizationName | null,\n ) {\n this.value = value;\n this.holderType = holderType;\n this.personName = personName;\n this.organizationName = organizationName;\n }\n\n static tryParse(input: string | null | undefined): SwedishBankAccountHolderName | null {\n if (input == null || input.trim() === \"\") return null;\n const collapsed = collapseWhitespace(input);\n if (collapsed.length < 2) return null;\n if (!/\\p{L}/u.test(collapsed)) return null;\n\n const orgName = SwedishOrganizationName.tryParse(collapsed);\n if (orgName !== null && orgName.hasOrganizationIndicators) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Organization,\n null,\n orgName,\n );\n }\n\n const personName = PersonFullName.tryParse(collapsed);\n if (personName !== null) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Person,\n personName,\n null,\n );\n }\n\n if (orgName !== null) {\n return new SwedishBankAccountHolderName(\n collapsed,\n BankAccountHolderType.Organization,\n null,\n orgName,\n );\n }\n\n return null;\n }\n\n static parse(input: string): SwedishBankAccountHolderName {\n const r = SwedishBankAccountHolderName.tryParse(input);\n if (r === null) throw new Error(\"Invalid bank account holder name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishBankAccountHolderName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishBankAccountHolderName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishBankAccountHolderName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishBankAccountHolderName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: SwedishBankAccountHolderName | null | undefined): boolean {\n return other != null && this.value.toLowerCase() === other.value.toLowerCase();\n }\n compareTo(other: SwedishBankAccountHolderName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\n/**\n * Returns a masked account holder name where each word's first character is preserved\n * and the rest is masked, e.g. `Anna Andersson` → `A*** A********`.\n */\nexport function maskSwedishBankAccountHolderName(holder: SwedishBankAccountHolderName): string {\n const parts = holder.value.split(/\\s+/).filter((p) => p.length > 0);\n return parts.map((p) => (p.length <= 1 ? \"*\" : p[0] + \"*\".repeat(p.length - 1))).join(\" \");\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\n\nconst CODE_TO_COUNTRY: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"7\": \"RU\",\n \"20\": \"EG\",\n \"27\": \"ZA\",\n \"30\": \"GR\",\n \"31\": \"NL\",\n \"32\": \"BE\",\n \"33\": \"FR\",\n \"34\": \"ES\",\n \"36\": \"HU\",\n \"39\": \"IT\",\n \"40\": \"RO\",\n \"41\": \"CH\",\n \"43\": \"AT\",\n \"44\": \"GB\",\n \"45\": \"DK\",\n \"46\": \"SE\",\n \"47\": \"NO\",\n \"48\": \"PL\",\n \"49\": \"DE\",\n \"51\": \"PE\",\n \"52\": \"MX\",\n \"53\": \"CU\",\n \"54\": \"AR\",\n \"55\": \"BR\",\n \"56\": \"CL\",\n \"57\": \"CO\",\n \"58\": \"VE\",\n \"60\": \"MY\",\n \"61\": \"AU\",\n \"62\": \"ID\",\n \"63\": \"PH\",\n \"64\": \"NZ\",\n \"65\": \"SG\",\n \"66\": \"TH\",\n \"81\": \"JP\",\n \"82\": \"KR\",\n \"84\": \"VN\",\n \"86\": \"CN\",\n \"90\": \"TR\",\n \"91\": \"IN\",\n \"92\": \"PK\",\n \"93\": \"AF\",\n \"94\": \"LK\",\n \"95\": \"MM\",\n \"98\": \"IR\",\n \"211\": \"SS\",\n \"212\": \"MA\",\n \"213\": \"DZ\",\n \"216\": \"TN\",\n \"218\": \"LY\",\n \"220\": \"GM\",\n \"221\": \"SN\",\n \"222\": \"MR\",\n \"223\": \"ML\",\n \"224\": \"GN\",\n \"225\": \"CI\",\n \"226\": \"BF\",\n \"227\": \"NE\",\n \"228\": \"TG\",\n \"229\": \"BJ\",\n \"230\": \"MU\",\n \"231\": \"LR\",\n \"232\": \"SL\",\n \"233\": \"GH\",\n \"234\": \"NG\",\n \"235\": \"TD\",\n \"236\": \"CF\",\n \"237\": \"CM\",\n \"238\": \"CV\",\n \"239\": \"ST\",\n \"240\": \"GQ\",\n \"241\": \"GA\",\n \"242\": \"CG\",\n \"243\": \"CD\",\n \"244\": \"AO\",\n \"245\": \"GW\",\n \"248\": \"SC\",\n \"249\": \"SD\",\n \"250\": \"RW\",\n \"251\": \"ET\",\n \"252\": \"SO\",\n \"253\": \"DJ\",\n \"254\": \"KE\",\n \"255\": \"TZ\",\n \"256\": \"UG\",\n \"257\": \"BI\",\n \"258\": \"MZ\",\n \"260\": \"ZM\",\n \"261\": \"MG\",\n \"263\": \"ZW\",\n \"264\": \"NA\",\n \"265\": \"MW\",\n \"266\": \"LS\",\n \"267\": \"BW\",\n \"268\": \"SZ\",\n \"269\": \"KM\",\n \"291\": \"ER\",\n \"297\": \"AW\",\n \"298\": \"FO\",\n \"299\": \"GL\",\n \"350\": \"GI\",\n \"351\": \"PT\",\n \"352\": \"LU\",\n \"353\": \"IE\",\n \"354\": \"IS\",\n \"355\": \"AL\",\n \"356\": \"MT\",\n \"357\": \"CY\",\n \"358\": \"FI\",\n \"359\": \"BG\",\n \"370\": \"LT\",\n \"371\": \"LV\",\n \"372\": \"EE\",\n \"373\": \"MD\",\n \"374\": \"AM\",\n \"375\": \"BY\",\n \"376\": \"AD\",\n \"377\": \"MC\",\n \"378\": \"SM\",\n \"379\": \"VA\",\n \"380\": \"UA\",\n \"381\": \"RS\",\n \"382\": \"ME\",\n \"383\": \"XK\",\n \"385\": \"HR\",\n \"386\": \"SI\",\n \"387\": \"BA\",\n \"389\": \"MK\",\n \"420\": \"CZ\",\n \"421\": \"SK\",\n \"423\": \"LI\",\n \"501\": \"BZ\",\n \"502\": \"GT\",\n \"503\": \"SV\",\n \"504\": \"HN\",\n \"505\": \"NI\",\n \"506\": \"CR\",\n \"507\": \"PA\",\n \"509\": \"HT\",\n \"591\": \"BO\",\n \"592\": \"GY\",\n \"593\": \"EC\",\n \"595\": \"PY\",\n \"597\": \"SR\",\n \"598\": \"UY\",\n \"599\": \"CW\",\n \"670\": \"TL\",\n \"673\": \"BN\",\n \"674\": \"NR\",\n \"675\": \"PG\",\n \"676\": \"TO\",\n \"677\": \"SB\",\n \"678\": \"VU\",\n \"679\": \"FJ\",\n \"680\": \"PW\",\n \"685\": \"WS\",\n \"686\": \"KI\",\n \"688\": \"TV\",\n \"691\": \"FM\",\n \"692\": \"MH\",\n \"850\": \"KP\",\n \"852\": \"HK\",\n \"853\": \"MO\",\n \"855\": \"KH\",\n \"856\": \"LA\",\n \"880\": \"BD\",\n \"886\": \"TW\",\n \"960\": \"MV\",\n \"961\": \"LB\",\n \"962\": \"JO\",\n \"963\": \"SY\",\n \"964\": \"IQ\",\n \"965\": \"KW\",\n \"966\": \"SA\",\n \"967\": \"YE\",\n \"968\": \"OM\",\n \"970\": \"PS\",\n \"971\": \"AE\",\n \"972\": \"IL\",\n \"973\": \"BH\",\n \"974\": \"QA\",\n \"975\": \"BT\",\n \"976\": \"MN\",\n \"977\": \"NP\",\n \"992\": \"TJ\",\n \"993\": \"TM\",\n \"994\": \"AZ\",\n \"995\": \"GE\",\n \"996\": \"KG\",\n \"998\": \"UZ\",\n});\n\n/** A phone country calling code (`landsnummer`) e.g. `+46` for Sweden. */\nexport class PhoneCallingCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Calling Code\",\n localizedName: \"Landsnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/List_of_country_calling_codes\",\n ]),\n });\n\n readonly value: string;\n readonly countryCode: string | null;\n\n private constructor(value: string, countryCode: string | null) {\n this.value = value;\n this.countryCode = countryCode;\n }\n\n /** @internal */\n static _new(value: string, countryCode: string | null): PhoneCallingCode {\n return new PhoneCallingCode(value, countryCode);\n }\n\n /** @internal */\n static fromResolvedDigits(digits: string): PhoneCallingCode {\n return new PhoneCallingCode(digits, CODE_TO_COUNTRY[digits] ?? null);\n }\n\n static tryParse(input: string | null | undefined): PhoneCallingCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = extractDigits(input.trim());\n if (digits === null) return null;\n const country = CODE_TO_COUNTRY[digits];\n if (country == null) return null;\n return new PhoneCallingCode(digits, country);\n }\n\n static parse(input: string): PhoneCallingCode {\n const r = PhoneCallingCode.tryParse(input);\n if (r === null) throw new Error(\"Unknown phone calling code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PhoneCallingCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneCallingCode.normalize(input) === input;\n }\n\n static get all(): readonly PhoneCallingCode[] {\n return ALL;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return `+${this.value}`;\n }\n\n equals(other: PhoneCallingCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PhoneCallingCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n\n /** Sweden (+46). */\n static get Sweden(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+46\");\n }\n /** Norway (+47). */\n static get Norway(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+47\");\n }\n /** Finland (+358). */\n static get Finland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+358\");\n }\n /** Denmark (+45). */\n static get Denmark(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+45\");\n }\n /** Germany (+49). */\n static get Germany(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+49\");\n }\n /** Poland (+48). */\n static get Poland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+48\");\n }\n /** Estonia (+372). */\n static get Estonia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+372\");\n }\n /** Lithuania (+370). */\n static get Lithuania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+370\");\n }\n /** Romania (+40). */\n static get Romania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+40\");\n }\n /** Bulgaria (+359). */\n static get Bulgaria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+359\");\n }\n /** Latvia (+371). */\n static get Latvia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+371\");\n }\n /** Czech Republic (+420). */\n static get CzechRepublic(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+420\");\n }\n /** Spain (+34). */\n static get Spain(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+34\");\n }\n /** Netherlands (+31). */\n static get Netherlands(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+31\");\n }\n /** Greece (+30). */\n static get Greece(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+30\");\n }\n /** Italy (+39). */\n static get Italy(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+39\");\n }\n /** Slovenia (+386). */\n static get Slovenia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+386\");\n }\n /** Croatia (+385). */\n static get Croatia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+385\");\n }\n /** Portugal (+351). */\n static get Portugal(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+351\");\n }\n /** Hungary (+36). */\n static get Hungary(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+36\");\n }\n /** France (+33). */\n static get France(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+33\");\n }\n /** Slovakia (+421). */\n static get Slovakia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+421\");\n }\n /** Belgium (+32). */\n static get Belgium(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+32\");\n }\n /** United Kingdom (+44). */\n static get UnitedKingdom(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+44\");\n }\n /** Austria (+43). */\n static get Austria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+43\");\n }\n /** Cyprus (+357). */\n static get Cyprus(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+357\");\n }\n /** Iceland (+354). */\n static get Iceland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+354\");\n }\n /** Switzerland (+41). */\n static get Switzerland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+41\");\n }\n /** Ireland (+353). */\n static get Ireland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+353\");\n }\n /** Luxembourg (+352). */\n static get Luxembourg(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+352\");\n }\n /** Malta (+356). */\n static get Malta(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+356\");\n }\n /** Liechtenstein (+423). */\n static get Liechtenstein(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+423\");\n }\n /** United States (+1). */\n static get UnitedStates(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+1\");\n }\n /** Russia (+7). */\n static get Russia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+7\");\n }\n}\n\nconst ALL: readonly PhoneCallingCode[] = Object.entries(CODE_TO_COUNTRY).map(([code, cc]) =>\n PhoneCallingCode._new(code, cc),\n);\n\nfunction extractDigits(input: string): string | null {\n if (input.startsWith(\"+\")) return input.slice(1);\n if (input.startsWith(\"00\") && input.length > 2) return input.slice(2);\n if (input.length >= 1 && input.length <= 3 && /^\\d+$/.test(input)) return input;\n return null;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\nimport { PhoneCallingCode } from \"./phone-calling-code.js\";\n\nconst MAX_INPUT_LENGTH = 50;\nconst URI_PREFIXES = [\"callto:\", \"tel:\", \"sms:\", \"call:\"];\n\nconst TWO_DIGIT_CODES = new Set([\n \"20\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"36\",\n \"39\",\n \"40\",\n \"41\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"49\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"81\",\n \"82\",\n \"84\",\n \"86\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n]);\n\nconst LEADING_ZERO_SIGNIFICANT = new Set([\"39\"]);\n\nconst SCAN =\n /(?:(?:\\+|00)\\d{1,3}[\\s-]\\(?\\d{1,4}\\)?[\\s-]?\\d[\\d\\s-]{5,12}\\d)|(?:(?:\\+|00)\\d{7,15})|(?:0\\d{1,3}[\\s-]?\\d[\\d\\s-]{5,10}\\d)/g;\n\n/**\n * A phone number (`telefonnummer`). Stored normalized as `00` + country code +\n * subscriber digits (e.g. `0046701740633`). Use {@link toE164String} for the\n * `+`-prefixed E.164 form.\n */\nexport class PhoneNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Phone Number\",\n localizedName: \"Telefonnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://pts.se/\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/E.164\",\n ]),\n });\n\n readonly digits: string;\n readonly countryCallingCode: PhoneCallingCode;\n readonly country: Country | null;\n readonly isSwedish: boolean;\n readonly isMobile: boolean;\n\n private constructor(digits: string, isSwedish: boolean, isMobile: boolean) {\n this.digits = digits;\n this.isSwedish = isSwedish;\n this.isMobile = isMobile;\n this.countryCallingCode = PhoneCallingCode.fromResolvedDigits(resolveCallingCode(digits));\n this.country = Country.tryFindByCallingCode(this.countryCallingCode.value);\n }\n\n get isSwedishTestPhoneNumber(): boolean {\n if (!this.isSwedish) return false;\n const local = this.digits.slice(4);\n return (\n isInPtsRange(local, \"7017406\", 5, 99) ||\n isInPtsRange(local, \"3139006\", 0, 99) ||\n isInPtsRange(local, \"4062804\", 0, 99) ||\n isInPtsRange(local, \"8465004\", 0, 99) ||\n isInPtsRange(local, \"9803192\", 0, 99)\n );\n }\n\n get formatted(): string {\n return this.isSwedish ? this.toLocalString() : this.toDisplayInternationalString();\n }\n\n static tryParse(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const dcc = resolveDefaultCallingCode(defaultCallingCode);\n if (!dcc) return null;\n\n let cleaned = sanitizeInput(input).trim();\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n\n for (const prefix of URI_PREFIXES) {\n if (cleaned.toLowerCase().startsWith(prefix)) {\n cleaned = cleaned.slice(prefix.length).trimStart();\n break;\n }\n }\n\n const hasPlus = cleaned.startsWith(\"+\");\n const withOAs0 = cleaned.replace(/O/g, \"0\");\n const digitsOnly = withOAs0.replace(/[^\\d]/g, \"\");\n if (digitsOnly === \"\") return null;\n\n let e164: string;\n if (hasPlus) {\n if (digitsOnly.length < 7 || digitsOnly.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(digitsOnly);\n } else if (digitsOnly.startsWith(\"00\")) {\n const cn = digitsOnly.slice(2);\n if (cn.length < 7 || cn.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(cn);\n } else if (digitsOnly.startsWith(dcc) && digitsOnly.length >= dcc.length + 7) {\n const subscriber = digitsOnly.slice(dcc.length);\n e164 = dcc + stripSingleTrunkZero(dcc, subscriber);\n } else if (digitsOnly.startsWith(\"0\")) {\n const subscriber = stripSingleTrunkZero(dcc, digitsOnly);\n const total = dcc.length + subscriber.length;\n if (total < 7 || total > 15) return null;\n e164 = dcc + subscriber;\n } else if (dcc === \"46\" && digitsOnly.length === 9 && digitsOnly.startsWith(\"7\")) {\n e164 = \"46\" + digitsOnly;\n } else {\n return null;\n }\n\n if (e164.length < 7 || e164.length > 15) return null;\n const isSwedish = e164.startsWith(\"46\");\n if (isSwedish) {\n const local = e164.slice(2);\n if (local.length < 7 || local.length > 9) return null;\n }\n const isMobile = isSwedish && e164.slice(2).startsWith(\"7\");\n return new PhoneNumber(\"00\" + e164, isSwedish, isMobile);\n }\n\n static parse(\n input: string,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber {\n const r = PhoneNumber.tryParse(input, defaultCallingCode);\n if (r === null) throw new Error(\"Invalid phone number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): boolean {\n return PhoneNumber.tryParse(input, defaultCallingCode) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const dcc =\n resolveDefaultCallingCode(options?.defaultCallingCode) ??\n PrimitivesDefaults.defaultCallingCode;\n const r = PhoneNumber.tryParse(input, dcc);\n if (r) {\n return r.countryCallingCode.value === dcc\n ? r.toLocalString()\n : r.toDisplayInternationalString();\n }\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const r = PhoneNumber.tryParse(input, options?.defaultCallingCode);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneNumber.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<PhoneNumber>[] {\n if (!text) return [];\n const out: TextCandidate<PhoneNumber>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const phone = PhoneNumber.tryParse(m[0]);\n if (!phone) continue;\n out.push(\n new TextCandidate<PhoneNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"PhoneNumber\",\n category: TextCandidateCategory.Contact,\n normalizedForm: phone.toNormalizedString(),\n formattedForm: phone.toString(),\n maskedForm: maskPhoneNumber(phone),\n confidence: TextMatchConfidence.Medium,\n value: phone,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toLocalString(defaultCallingCode?: PhoneCallingCode | Country): string {\n if (defaultCallingCode) {\n const dcc =\n defaultCallingCode instanceof PhoneCallingCode\n ? defaultCallingCode.value\n : defaultCallingCode.callingCode;\n return this.countryCallingCode.value === dcc\n ? this.toLocalString()\n : this.toDisplayInternationalString();\n }\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n if (this.isSwedish) return formatSwedishLocal(\"0\" + subscriber);\n return \"0\" + subscriber;\n }\n\n toE164String(): string {\n return \"+\" + this.digits.slice(2);\n }\n toInternationalString(): string {\n return this.toE164String();\n }\n\n toDisplayInternationalString(): string {\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n return (\n \"+\" +\n this.countryCallingCode.value +\n \" \" +\n formatInternationalSubscriberDigits(this.countryCallingCode.value, subscriber)\n );\n }\n\n toString(): string {\n return this.formatted;\n }\n\n equals(other: PhoneNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: PhoneNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Mask a phone number, keeping country code and last 4 digits visible. */\nexport function maskPhoneNumber(p: PhoneNumber): string {\n const f = p.toE164String();\n if (f.length <= 5) return f.replace(/\\d/g, \"*\");\n const cc = \"+\" + p.countryCallingCode.value;\n const subscriber = f.slice(cc.length);\n if (subscriber.length <= 4) return cc + \"*\".repeat(subscriber.length);\n return cc + \"*\".repeat(subscriber.length - 4) + subscriber.slice(-4);\n}\n\nfunction resolveDefaultCallingCode(\n d: string | PhoneCallingCode | Country | null | undefined,\n): string | null {\n if (d == null) return PrimitivesDefaults.defaultCallingCode;\n if (typeof d === \"string\") return d;\n if (d instanceof PhoneCallingCode) return d.value;\n return d.callingCode;\n}\n\nfunction resolveCallingCode(digits: string): string {\n return resolveCallingCodeFromE164(digits.slice(2));\n}\n\nfunction resolveCallingCodeFromE164(e164: string): string {\n if (e164.length === 0) return \"\";\n if (e164[0] === \"1\" || e164[0] === \"7\") return e164.slice(0, 1);\n if (e164.length >= 2 && TWO_DIGIT_CODES.has(e164.slice(0, 2))) return e164.slice(0, 2);\n return e164.length >= 3 ? e164.slice(0, 3) : e164;\n}\n\nfunction stripTrunkZeroAfterCallingCode(e164: string): string {\n const cc = resolveCallingCodeFromE164(e164);\n if (cc.length === 0 || cc.length >= e164.length) return e164;\n const subscriber = e164.slice(cc.length);\n return cc + stripSingleTrunkZero(cc, subscriber);\n}\n\nfunction stripSingleTrunkZero(callingCode: string, subscriber: string): string {\n if (subscriber.length === 0 || subscriber[0] !== \"0\") return subscriber;\n if (LEADING_ZERO_SIGNIFICANT.has(callingCode)) return subscriber;\n return subscriber.slice(1);\n}\n\nfunction isInPtsRange(local: string, prefix: string, from: number, to: number): boolean {\n if (!local.startsWith(prefix)) return false;\n const suffix = local.slice(prefix.length);\n if (suffix.length !== 2) return false;\n const n = parseInt(suffix, 10);\n return Number.isFinite(n) && n >= from && n <= to;\n}\n\nfunction formatInternationalSubscriberDigits(callingCode: string, digits: string): string {\n if (callingCode === \"1\" && digits.length === 10) {\n return `${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6, 10)}`;\n }\n switch (digits.length) {\n case 7:\n return `${digits.slice(0, 3)} ${digits.slice(3, 5)} ${digits.slice(5, 7)}`;\n case 8:\n return `${digits.slice(0, 2)} ${digits.slice(2, 4)} ${digits.slice(4, 6)} ${digits.slice(6, 8)}`;\n case 9:\n return `${digits.slice(0, 2)} ${digits.slice(2, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n case 10:\n return `${digits.slice(0, 2)} ${digits.slice(2, 6)} ${digits.slice(6, 10)}`;\n case 11:\n return `${digits.slice(0, 3)} ${digits.slice(3, 7)} ${digits.slice(7, 11)}`;\n default:\n return digits;\n }\n}\n\nfunction formatSwedishLocal(number: string): string {\n const digits = number.replace(/^0+/, \"\");\n if (digits.length === 9) {\n return `0${digits.slice(0, 3)}-${digits.slice(3, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n }\n if (digits.length === 7) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 6)}`;\n }\n if (digits.length === 8) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 7)}`;\n }\n return number;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { PhoneNumber, maskPhoneNumber } from \"../contact/phone-number.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\nconst MAX_INPUT_LENGTH = 50;\nconst DIGITS_7_STARTING_90 = /^90\\d{5}$/;\n\n/**\n * A Swedish Swish payment number (`Swish-nummer`).\n * Accepts:\n * - Swish 123 numbers (10 digits starting with `123`)\n * - 90-numbers (7 digits starting with `90X`, expanded to `123` + 7 digits)\n * - Swedish mobile phone numbers\n */\nexport class SwedishSwishNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swish Number\",\n localizedName: \"Swish-nummer\",\n emoji: \"\\u{1F4F1}\",\n sources: Object.freeze([\n \"https://www.swish.nu/faq/company/what-is-the-format-of-the-swish-number\",\n \"https://github.com/cisene/swish-123\",\n \"https://www.insamlingskontroll.se/\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly isSwish123: boolean;\n readonly isMobileNumber: boolean;\n readonly is90Number: boolean;\n readonly phoneNumber: PhoneNumber | null;\n\n private constructor(\n value: string,\n formatted: string,\n isSwish123: boolean,\n isMobileNumber: boolean,\n is90Number: boolean,\n phoneNumber: PhoneNumber | null,\n ) {\n this.value = value;\n this.formatted = formatted;\n this.isSwish123 = isSwish123;\n this.isMobileNumber = isMobileNumber;\n this.is90Number = is90Number;\n this.phoneNumber = phoneNumber;\n }\n\n static tryParse(input: string | null | undefined): SwedishSwishNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = sanitizeInput(input).trim();\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n\n const digits = keepDigits(cleaned);\n\n if (DIGITS_7_STARTING_90.test(digits)) {\n const expanded = \"123\" + digits;\n return new SwedishSwishNumber(expanded, format90Number(digits), true, false, true, null);\n }\n\n if (digits.length === 10 && digits.startsWith(\"123\")) {\n const is90 = digits.startsWith(\"1239\");\n return new SwedishSwishNumber(\n digits,\n is90 ? format90Number(digits.slice(3)) : formatSwish123(digits),\n true,\n false,\n is90,\n null,\n );\n }\n\n const phone = PhoneNumber.tryParse(cleaned);\n if (phone !== null && phone.isSwedish && phone.isMobile) {\n return new SwedishSwishNumber(phone.digits, phone.formatted, false, true, false, phone);\n }\n\n return null;\n }\n\n static parse(input: string): SwedishSwishNumber {\n const r = SwedishSwishNumber.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swish number.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishSwishNumber.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSwishNumber.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishSwishNumber.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishSwishNumber.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishSwishNumber>[] {\n if (!text) return [];\n const out: TextCandidate<SwedishSwishNumber>[] = [];\n const re =\n /(?<!\\d)123[\\s-]?\\d{3}[\\s-]?\\d{2}[\\s-]?\\d{2}(?!\\d)|(?<!\\d)90[0-9][\\s-]?\\d{2}[\\s-]?\\d{2}(?!\\d)/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text)) !== null) {\n const r = SwedishSwishNumber.tryParse(m[0]);\n if (!r) continue;\n out.push(\n new TextCandidate<SwedishSwishNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"SwedishSwishNumber\",\n category: TextCandidateCategory.Financial,\n normalizedForm: r.toNormalizedString(),\n formattedForm: r.toString(),\n maskedForm: maskSwedishSwishNumber(r),\n confidence: TextMatchConfidence.Medium,\n value: r,\n }),\n );\n }\n return out;\n }\n\n equals(other: SwedishSwishNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishSwishNumber | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction formatSwish123(digits: string): string {\n if (digits.length !== 10) return digits;\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)} ${digits.slice(6, 8)} ${digits.slice(8, 10)}`;\n}\n\nfunction format90Number(shortDigits: string): string {\n if (shortDigits.length !== 7) return shortDigits;\n return `${shortDigits.slice(0, 3)} ${shortDigits.slice(3, 5)} ${shortDigits.slice(5, 7)}`;\n}\n\n/**\n * Returns a masked Swish number, e.g. `123-*** ** **` for 123-numbers,\n * `9** ** **` for 90-numbers.\n */\nexport function maskSwedishSwishNumber(swish: SwedishSwishNumber): string {\n if (swish.is90Number) {\n const shortDigits = swish.value.slice(3);\n return `${shortDigits[0]}** ** **`;\n }\n if (swish.isSwish123) return \"123-*** ** **\";\n return swish.phoneNumber !== null\n ? maskPhoneNumber(swish.phoneNumber)\n : \"*\".repeat(swish.value.length);\n}\n","import { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { Iban } from \"./iban.js\";\nimport { Bic } from \"./bic.js\";\nimport { SwedishBankgiroNumber } from \"./swedish-bankgiro-number.js\";\nimport { SwedishPostgiroNumber } from \"./swedish-postgiro-number.js\";\nimport { SwedishOcrReferenceNumber } from \"./swedish-ocr-reference-number.js\";\nimport { SwedishBankAccount } from \"./swedish-bank-account.js\";\n\nexport const SwedishBankingNumberType = {\n Unknown: \"Unknown\",\n SwedishBankgiroNumber: \"SwedishBankgiroNumber\",\n SwedishPostgiroNumber: \"SwedishPostgiroNumber\",\n SwedishOcrReferenceNumber: \"SwedishOcrReferenceNumber\",\n Iban: \"Iban\",\n SwedishBankAccount: \"SwedishBankAccount\",\n Bic: \"Bic\",\n} as const;\nexport type SwedishBankingNumberType =\n (typeof SwedishBankingNumberType)[keyof typeof SwedishBankingNumberType];\n\n/**\n * Parsed banking identifier result from the unified banking parser.\n * The type field indicates which typed value (if any) was successfully parsed.\n */\nexport class SwedishBankingNumber {\n readonly type: SwedishBankingNumberType;\n readonly normalizedValue: string;\n\n readonly swedishBankgiroNumber: SwedishBankgiroNumber | null;\n readonly swedishPostgiroNumber: SwedishPostgiroNumber | null;\n readonly swedishOcrReferenceNumber: SwedishOcrReferenceNumber | null;\n readonly iban: Iban | null;\n readonly swedishBankAccount: SwedishBankAccount | null;\n readonly bic: Bic | null;\n\n /** @internal */\n constructor(init: {\n type: SwedishBankingNumberType;\n normalizedValue: string;\n swedishBankgiroNumber?: SwedishBankgiroNumber | null;\n swedishPostgiroNumber?: SwedishPostgiroNumber | null;\n swedishOcrReferenceNumber?: SwedishOcrReferenceNumber | null;\n iban?: Iban | null;\n swedishBankAccount?: SwedishBankAccount | null;\n bic?: Bic | null;\n }) {\n this.type = init.type;\n this.normalizedValue = init.normalizedValue;\n this.swedishBankgiroNumber = init.swedishBankgiroNumber ?? null;\n this.swedishPostgiroNumber = init.swedishPostgiroNumber ?? null;\n this.swedishOcrReferenceNumber = init.swedishOcrReferenceNumber ?? null;\n this.iban = init.iban ?? null;\n this.swedishBankAccount = init.swedishBankAccount ?? null;\n this.bic = init.bic ?? null;\n }\n\n static unknown(): SwedishBankingNumber {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Unknown,\n normalizedValue: \"\",\n });\n }\n}\n\nconst MAX_INPUT_LENGTH = 50;\nconst BANKGIRO_PATTERN = /^\\s*\\d{3,4}\\s*-\\s*\\d{4}\\s*$/;\nconst PLUSGIRO_PATTERN = /^\\s*\\d{1,7}\\s*-\\s*\\d\\s*$/;\n\nconst TYPE_PREFIXES: readonly [string, SwedishBankingNumberType][] = [\n [\"Bankgiro \", SwedishBankingNumberType.SwedishBankgiroNumber],\n [\"Plusgiro \", SwedishBankingNumberType.SwedishPostgiroNumber],\n [\"Postgiro \", SwedishBankingNumberType.SwedishPostgiroNumber],\n [\"BG \", SwedishBankingNumberType.SwedishBankgiroNumber],\n [\"PG \", SwedishBankingNumberType.SwedishPostgiroNumber],\n];\n\n/**\n * A unified parser for common banking identifiers used in Swedish payment flows.\n * Attempts to classify input as Bankgiro, Plusgiro, OCR reference, BIC, IBAN,\n * or Swedish bank account.\n */\nexport class SwedishBankingNumberParser {\n static tryParse(input: string | null | undefined): SwedishBankingNumber | null {\n if (input == null || input.trim() === \"\") return null;\n\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n // 0. Explicit type prefix\n const { hintedType, payload } = detectTypePrefix(trimmed);\n if (hintedType === SwedishBankingNumberType.SwedishBankgiroNumber) {\n const bg = SwedishBankgiroNumber.tryParse(payload);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n return null;\n }\n if (hintedType === SwedishBankingNumberType.SwedishPostgiroNumber) {\n const pg = SwedishPostgiroNumber.tryParse(payload);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n return null;\n }\n\n // 1. IBAN — distinctive country letters + check digits\n if (containsLetters(trimmed)) {\n const iban = Iban.tryParse(trimmed);\n if (iban !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Iban,\n normalizedValue: iban.value,\n iban,\n });\n }\n }\n\n // 2. BIC/SWIFT — letter heavy\n if (containsLetters(trimmed)) {\n const bic = Bic.tryParse(trimmed);\n if (bic !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.Bic,\n normalizedValue: bic.code,\n bic,\n });\n }\n }\n\n // 3. Explicit hyphenated formats\n if (BANKGIRO_PATTERN.test(trimmed)) {\n const bg = SwedishBankgiroNumber.tryParse(trimmed);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n }\n if (PLUSGIRO_PATTERN.test(trimmed)) {\n const pg = SwedishPostgiroNumber.tryParse(trimmed);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n }\n\n // 4. Longer Swedish bank account numbers (more specific than OCR)\n const account = SwedishBankAccount.tryParse(trimmed);\n if (account !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankAccount,\n normalizedValue: account.toNormalizedString(),\n swedishBankAccount: account,\n });\n }\n\n // 5. Bankgiro before Plusgiro\n const bg = SwedishBankgiroNumber.tryParse(trimmed);\n if (bg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishBankgiroNumber,\n normalizedValue: bg.formatted,\n swedishBankgiroNumber: bg,\n });\n }\n const pg = SwedishPostgiroNumber.tryParse(trimmed);\n if (pg !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishPostgiroNumber,\n normalizedValue: pg.formatted,\n swedishPostgiroNumber: pg,\n });\n }\n\n // 6. OCR last (high false-positive rate)\n const ocr = SwedishOcrReferenceNumber.tryParse(trimmed);\n if (ocr !== null) {\n return new SwedishBankingNumber({\n type: SwedishBankingNumberType.SwedishOcrReferenceNumber,\n normalizedValue: ocr.value,\n swedishOcrReferenceNumber: ocr,\n });\n }\n\n return null;\n }\n\n static parse(input: string): SwedishBankingNumber {\n const r = SwedishBankingNumberParser.tryParse(input);\n if (r === null) throw new Error(\"Could not parse input as a known banking number.\");\n return r;\n }\n}\n\nfunction detectTypePrefix(input: string): {\n hintedType: SwedishBankingNumberType;\n payload: string;\n} {\n const lower = input.toLowerCase();\n for (const [prefix, type] of TYPE_PREFIXES) {\n const lp = prefix.toLowerCase();\n if (lower.startsWith(lp)) {\n const payload = input.slice(prefix.length).trim();\n if (payload.length > 0) return { hintedType: type, payload };\n }\n }\n return { hintedType: SwedishBankingNumberType.Unknown, payload: input };\n}\n\nfunction containsLetters(input: string): boolean {\n return /\\p{L}/u.test(input);\n}\n"]}
|