@budiauktioner/buildi-primitives 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1082) hide show
  1. package/BREAKING_CHANGES.md +81 -0
  2. package/CHANGELOG.md +72 -1
  3. package/PARITY.md +202 -0
  4. package/README.md +58 -9
  5. package/dist/cjs/banking/bank-resolver.js +378 -0
  6. package/dist/cjs/banking/bank-resolver.js.map +7 -0
  7. package/dist/cjs/banking/bic.js +189 -0
  8. package/dist/cjs/banking/bic.js.map +7 -0
  9. package/dist/cjs/banking/iban.js +314 -0
  10. package/dist/cjs/banking/iban.js.map +7 -0
  11. package/dist/cjs/banking/index.js +60 -0
  12. package/dist/cjs/banking/index.js.map +7 -0
  13. package/dist/cjs/banking/swedish-bank-account-holder-name.js +124 -0
  14. package/dist/cjs/banking/swedish-bank-account-holder-name.js.map +7 -0
  15. package/dist/cjs/banking/swedish-bank-account.js +211 -0
  16. package/dist/cjs/banking/swedish-bank-account.js.map +7 -0
  17. package/dist/cjs/banking/swedish-bank-clearing-number.js +156 -0
  18. package/dist/cjs/banking/swedish-bank-clearing-number.js.map +7 -0
  19. package/dist/cjs/banking/swedish-bank.js +89 -0
  20. package/dist/cjs/banking/swedish-bank.js.map +7 -0
  21. package/dist/cjs/banking/swedish-bankgiro-number.js +176 -0
  22. package/dist/cjs/banking/swedish-bankgiro-number.js.map +7 -0
  23. package/dist/cjs/banking/swedish-banking-number.js +201 -0
  24. package/dist/cjs/banking/swedish-banking-number.js.map +7 -0
  25. package/dist/cjs/banking/swedish-ocr-reference-number.js +215 -0
  26. package/dist/cjs/banking/swedish-ocr-reference-number.js.map +7 -0
  27. package/dist/cjs/banking/swedish-postgiro-number.js +173 -0
  28. package/dist/cjs/banking/swedish-postgiro-number.js.map +7 -0
  29. package/dist/cjs/banking/swedish-swish-number.js +165 -0
  30. package/dist/cjs/banking/swedish-swish-number.js.map +7 -0
  31. package/dist/cjs/contact/address-city.js +104 -0
  32. package/dist/cjs/contact/address-city.js.map +7 -0
  33. package/dist/cjs/contact/address-street.js +220 -0
  34. package/dist/cjs/contact/address-street.js.map +7 -0
  35. package/dist/cjs/contact/address-zip-code.js +195 -0
  36. package/dist/cjs/contact/address-zip-code.js.map +7 -0
  37. package/dist/cjs/contact/address.js +405 -0
  38. package/dist/cjs/contact/address.js.map +7 -0
  39. package/dist/cjs/contact/contact-address.js +142 -0
  40. package/dist/cjs/contact/contact-address.js.map +7 -0
  41. package/dist/cjs/contact/contact-external-links.js +39 -0
  42. package/dist/cjs/contact/contact-external-links.js.map +7 -0
  43. package/dist/cjs/contact/contact-lookup.js +31 -0
  44. package/dist/cjs/contact/contact-lookup.js.map +7 -0
  45. package/dist/cjs/contact/contact-masking.js +117 -0
  46. package/dist/cjs/contact/contact-masking.js.map +7 -0
  47. package/dist/cjs/contact/country-address-factory.js +97 -0
  48. package/dist/cjs/contact/country-address-factory.js.map +7 -0
  49. package/dist/cjs/contact/country-address-registry.js +36 -0
  50. package/dist/cjs/contact/country-address-registry.js.map +7 -0
  51. package/dist/cjs/contact/country-address.js +98 -0
  52. package/dist/cjs/contact/country-address.js.map +7 -0
  53. package/dist/cjs/contact/country-addresses.js +346 -0
  54. package/dist/cjs/contact/country-addresses.js.map +7 -0
  55. package/dist/cjs/contact/country-zip-code-factory.js +117 -0
  56. package/dist/cjs/contact/country-zip-code-factory.js.map +7 -0
  57. package/dist/cjs/contact/country-zip-codes.js +376 -0
  58. package/dist/cjs/contact/country-zip-codes.js.map +7 -0
  59. package/dist/cjs/contact/index.js +72 -0
  60. package/dist/cjs/contact/index.js.map +7 -0
  61. package/dist/cjs/contact/phone-calling-code.js +439 -0
  62. package/dist/cjs/contact/phone-calling-code.js.map +7 -0
  63. package/dist/cjs/contact/phone-number-test-data.js +63 -0
  64. package/dist/cjs/contact/phone-number-test-data.js.map +7 -0
  65. package/dist/cjs/contact/phone-number.js +325 -0
  66. package/dist/cjs/contact/phone-number.js.map +7 -0
  67. package/dist/cjs/contact/register-default-country-addresses.js +88 -0
  68. package/dist/cjs/contact/register-default-country-addresses.js.map +7 -0
  69. package/dist/cjs/contact/swedish-address-zip-code.js +92 -0
  70. package/dist/cjs/contact/swedish-address-zip-code.js.map +7 -0
  71. package/dist/cjs/contact/swedish-address.js +169 -0
  72. package/dist/cjs/contact/swedish-address.js.map +7 -0
  73. package/dist/cjs/finance/currency.js +251 -0
  74. package/dist/cjs/finance/currency.js.map +7 -0
  75. package/dist/cjs/finance/exchange-rates.js +51 -0
  76. package/dist/cjs/finance/exchange-rates.js.map +7 -0
  77. package/dist/cjs/finance/index.js +34 -0
  78. package/dist/cjs/finance/index.js.map +7 -0
  79. package/dist/cjs/finance/isin.js +161 -0
  80. package/dist/cjs/finance/isin.js.map +7 -0
  81. package/dist/cjs/finance/money-amount.js +307 -0
  82. package/dist/cjs/finance/money-amount.js.map +7 -0
  83. package/dist/cjs/geography/adjacency-data.js +335 -0
  84. package/dist/cjs/geography/adjacency-data.js.map +7 -0
  85. package/dist/cjs/geography/continent.js +125 -0
  86. package/dist/cjs/geography/continent.js.map +7 -0
  87. package/dist/cjs/geography/country-capital.js +45 -0
  88. package/dist/cjs/geography/country-capital.js.map +7 -0
  89. package/dist/cjs/geography/country-capitals.js +288 -0
  90. package/dist/cjs/geography/country-capitals.js.map +7 -0
  91. package/dist/cjs/geography/country-coordinates.js +238 -0
  92. package/dist/cjs/geography/country-coordinates.js.map +7 -0
  93. package/dist/cjs/geography/country-data.js +530 -0
  94. package/dist/cjs/geography/country-data.js.map +7 -0
  95. package/dist/cjs/geography/country-metadata.js +627 -0
  96. package/dist/cjs/geography/country-metadata.js.map +7 -0
  97. package/dist/cjs/geography/country.js +427 -0
  98. package/dist/cjs/geography/country.js.map +7 -0
  99. package/dist/cjs/geography/geo-coordinate.js +244 -0
  100. package/dist/cjs/geography/geo-coordinate.js.map +7 -0
  101. package/dist/cjs/geography/geography-extensions.js +82 -0
  102. package/dist/cjs/geography/geography-extensions.js.map +7 -0
  103. package/dist/cjs/geography/geography-external-links.js +52 -0
  104. package/dist/cjs/geography/geography-external-links.js.map +7 -0
  105. package/dist/cjs/geography/geography-lookup.js +31 -0
  106. package/dist/cjs/geography/geography-lookup.js.map +7 -0
  107. package/dist/cjs/geography/geography-masking.js +54 -0
  108. package/dist/cjs/geography/geography-masking.js.map +7 -0
  109. package/dist/cjs/geography/index.js +57 -0
  110. package/dist/cjs/geography/index.js.map +7 -0
  111. package/dist/cjs/geography/language.js +462 -0
  112. package/dist/cjs/geography/language.js.map +7 -0
  113. package/dist/cjs/geography/swedish-county.js +232 -0
  114. package/dist/cjs/geography/swedish-county.js.map +7 -0
  115. package/dist/cjs/geography/swedish-municipality-data.js +316 -0
  116. package/dist/cjs/geography/swedish-municipality-data.js.map +7 -0
  117. package/dist/cjs/geography/swedish-municipality.js +218 -0
  118. package/dist/cjs/geography/swedish-municipality.js.map +7 -0
  119. package/dist/cjs/index.js +33 -0
  120. package/dist/cjs/index.js.map +7 -0
  121. package/dist/cjs/internal/case-folding.js +32 -0
  122. package/dist/cjs/internal/case-folding.js.map +7 -0
  123. package/dist/cjs/internal/clock.js +32 -0
  124. package/dist/cjs/internal/clock.js.map +7 -0
  125. package/dist/cjs/internal/decimal.js +262 -0
  126. package/dist/cjs/internal/decimal.js.map +7 -0
  127. package/dist/cjs/internal/gs1-prefix.js +164 -0
  128. package/dist/cjs/internal/gs1-prefix.js.map +7 -0
  129. package/dist/cjs/internal/gtin-check-digit.js +46 -0
  130. package/dist/cjs/internal/gtin-check-digit.js.map +7 -0
  131. package/dist/cjs/internal/input-sanitization.js +79 -0
  132. package/dist/cjs/internal/input-sanitization.js.map +7 -0
  133. package/dist/cjs/internal/luhn.js +40 -0
  134. package/dist/cjs/internal/luhn.js.map +7 -0
  135. package/dist/cjs/internal/measurement-unit-parser.js +86 -0
  136. package/dist/cjs/internal/measurement-unit-parser.js.map +7 -0
  137. package/dist/cjs/internal/measurement-unit.js +130 -0
  138. package/dist/cjs/internal/measurement-unit.js.map +7 -0
  139. package/dist/cjs/internal/quantity.js +122 -0
  140. package/dist/cjs/internal/quantity.js.map +7 -0
  141. package/dist/cjs/internal/shoe-size-format.js +31 -0
  142. package/dist/cjs/internal/shoe-size-format.js.map +7 -0
  143. package/dist/cjs/measurement/area-unit.js +158 -0
  144. package/dist/cjs/measurement/area-unit.js.map +7 -0
  145. package/dist/cjs/measurement/area.js +183 -0
  146. package/dist/cjs/measurement/area.js.map +7 -0
  147. package/dist/cjs/measurement/count.js +132 -0
  148. package/dist/cjs/measurement/count.js.map +7 -0
  149. package/dist/cjs/measurement/data-size-unit.js +208 -0
  150. package/dist/cjs/measurement/data-size-unit.js.map +7 -0
  151. package/dist/cjs/measurement/data-size.js +207 -0
  152. package/dist/cjs/measurement/data-size.js.map +7 -0
  153. package/dist/cjs/measurement/electric-charge-unit.js +109 -0
  154. package/dist/cjs/measurement/electric-charge-unit.js.map +7 -0
  155. package/dist/cjs/measurement/electric-charge.js +148 -0
  156. package/dist/cjs/measurement/electric-charge.js.map +7 -0
  157. package/dist/cjs/measurement/electric-current-unit.js +108 -0
  158. package/dist/cjs/measurement/electric-current-unit.js.map +7 -0
  159. package/dist/cjs/measurement/electric-current.js +154 -0
  160. package/dist/cjs/measurement/electric-current.js.map +7 -0
  161. package/dist/cjs/measurement/energy-unit.js +201 -0
  162. package/dist/cjs/measurement/energy-unit.js.map +7 -0
  163. package/dist/cjs/measurement/energy.js +207 -0
  164. package/dist/cjs/measurement/energy.js.map +7 -0
  165. package/dist/cjs/measurement/flow-rate-unit.js +132 -0
  166. package/dist/cjs/measurement/flow-rate-unit.js.map +7 -0
  167. package/dist/cjs/measurement/flow-rate.js +162 -0
  168. package/dist/cjs/measurement/flow-rate.js.map +7 -0
  169. package/dist/cjs/measurement/frequency-unit.js +132 -0
  170. package/dist/cjs/measurement/frequency-unit.js.map +7 -0
  171. package/dist/cjs/measurement/frequency.js +165 -0
  172. package/dist/cjs/measurement/frequency.js.map +7 -0
  173. package/dist/cjs/measurement/index.js +136 -0
  174. package/dist/cjs/measurement/index.js.map +7 -0
  175. package/dist/cjs/measurement/length-unit.js +210 -0
  176. package/dist/cjs/measurement/length-unit.js.map +7 -0
  177. package/dist/cjs/measurement/length.js +208 -0
  178. package/dist/cjs/measurement/length.js.map +7 -0
  179. package/dist/cjs/measurement/luminance-unit.js +110 -0
  180. package/dist/cjs/measurement/luminance-unit.js.map +7 -0
  181. package/dist/cjs/measurement/luminance.js +158 -0
  182. package/dist/cjs/measurement/luminance.js.map +7 -0
  183. package/dist/cjs/measurement/luminous-flux-unit.js +86 -0
  184. package/dist/cjs/measurement/luminous-flux-unit.js.map +7 -0
  185. package/dist/cjs/measurement/luminous-flux.js +139 -0
  186. package/dist/cjs/measurement/luminous-flux.js.map +7 -0
  187. package/dist/cjs/measurement/percentage.js +212 -0
  188. package/dist/cjs/measurement/percentage.js.map +7 -0
  189. package/dist/cjs/measurement/power-unit.js +155 -0
  190. package/dist/cjs/measurement/power-unit.js.map +7 -0
  191. package/dist/cjs/measurement/power.js +184 -0
  192. package/dist/cjs/measurement/power.js.map +7 -0
  193. package/dist/cjs/measurement/pressure-unit.js +168 -0
  194. package/dist/cjs/measurement/pressure-unit.js.map +7 -0
  195. package/dist/cjs/measurement/pressure.js +189 -0
  196. package/dist/cjs/measurement/pressure.js.map +7 -0
  197. package/dist/cjs/measurement/rotational-speed-unit.js +96 -0
  198. package/dist/cjs/measurement/rotational-speed-unit.js.map +7 -0
  199. package/dist/cjs/measurement/rotational-speed.js +152 -0
  200. package/dist/cjs/measurement/rotational-speed.js.map +7 -0
  201. package/dist/cjs/measurement/sound-level.js +185 -0
  202. package/dist/cjs/measurement/sound-level.js.map +7 -0
  203. package/dist/cjs/measurement/speed-unit.js +119 -0
  204. package/dist/cjs/measurement/speed-unit.js.map +7 -0
  205. package/dist/cjs/measurement/speed.js +159 -0
  206. package/dist/cjs/measurement/speed.js.map +7 -0
  207. package/dist/cjs/measurement/temperature-delta.js +101 -0
  208. package/dist/cjs/measurement/temperature-delta.js.map +7 -0
  209. package/dist/cjs/measurement/temperature-unit.js +130 -0
  210. package/dist/cjs/measurement/temperature-unit.js.map +7 -0
  211. package/dist/cjs/measurement/temperature.js +216 -0
  212. package/dist/cjs/measurement/temperature.js.map +7 -0
  213. package/dist/cjs/measurement/torque-unit.js +138 -0
  214. package/dist/cjs/measurement/torque-unit.js.map +7 -0
  215. package/dist/cjs/measurement/torque.js +165 -0
  216. package/dist/cjs/measurement/torque.js.map +7 -0
  217. package/dist/cjs/measurement/voltage-unit.js +127 -0
  218. package/dist/cjs/measurement/voltage-unit.js.map +7 -0
  219. package/dist/cjs/measurement/voltage.js +159 -0
  220. package/dist/cjs/measurement/voltage.js.map +7 -0
  221. package/dist/cjs/measurement/volume-unit.js +178 -0
  222. package/dist/cjs/measurement/volume-unit.js.map +7 -0
  223. package/dist/cjs/measurement/volume.js +195 -0
  224. package/dist/cjs/measurement/volume.js.map +7 -0
  225. package/dist/cjs/measurement/weight-unit.js +158 -0
  226. package/dist/cjs/measurement/weight-unit.js.map +7 -0
  227. package/dist/cjs/measurement/weight.js +183 -0
  228. package/dist/cjs/measurement/weight.js.map +7 -0
  229. package/dist/cjs/measurement/year-month.js +204 -0
  230. package/dist/cjs/measurement/year-month.js.map +7 -0
  231. package/dist/cjs/measurement/year.js +109 -0
  232. package/dist/cjs/measurement/year.js.map +7 -0
  233. package/dist/cjs/organization/duns-number.js +114 -0
  234. package/dist/cjs/organization/duns-number.js.map +7 -0
  235. package/dist/cjs/organization/elf-code.js +132 -0
  236. package/dist/cjs/organization/elf-code.js.map +7 -0
  237. package/dist/cjs/organization/eu-organization-name.js +119 -0
  238. package/dist/cjs/organization/eu-organization-name.js.map +7 -0
  239. package/dist/cjs/organization/eu-vat-number.js +444 -0
  240. package/dist/cjs/organization/eu-vat-number.js.map +7 -0
  241. package/dist/cjs/organization/index.js +65 -0
  242. package/dist/cjs/organization/index.js.map +7 -0
  243. package/dist/cjs/organization/lei-code.js +133 -0
  244. package/dist/cjs/organization/lei-code.js.map +7 -0
  245. package/dist/cjs/organization/organization-extensions.js +80 -0
  246. package/dist/cjs/organization/organization-extensions.js.map +7 -0
  247. package/dist/cjs/organization/organization-validation-utils.js +78 -0
  248. package/dist/cjs/organization/organization-validation-utils.js.map +7 -0
  249. package/dist/cjs/organization/swedish-cfar-number.js +88 -0
  250. package/dist/cjs/organization/swedish-cfar-number.js.map +7 -0
  251. package/dist/cjs/organization/swedish-organization-identifier-type.js +34 -0
  252. package/dist/cjs/organization/swedish-organization-identifier-type.js.map +7 -0
  253. package/dist/cjs/organization/swedish-organization-identifier.js +166 -0
  254. package/dist/cjs/organization/swedish-organization-identifier.js.map +7 -0
  255. package/dist/cjs/organization/swedish-organization-name.js +255 -0
  256. package/dist/cjs/organization/swedish-organization-name.js.map +7 -0
  257. package/dist/cjs/organization/swedish-organization-number.js +289 -0
  258. package/dist/cjs/organization/swedish-organization-number.js.map +7 -0
  259. package/dist/cjs/organization/swedish-organization-type.js +51 -0
  260. package/dist/cjs/organization/swedish-organization-type.js.map +7 -0
  261. package/dist/cjs/organization/swedish-sni-code.js +96 -0
  262. package/dist/cjs/organization/swedish-sni-code.js.map +7 -0
  263. package/dist/cjs/package.json +3 -0
  264. package/dist/cjs/person/index.js +49 -0
  265. package/dist/cjs/person/index.js.map +7 -0
  266. package/dist/cjs/person/person-age.js +187 -0
  267. package/dist/cjs/person/person-age.js.map +7 -0
  268. package/dist/cjs/person/person-family-name.js +83 -0
  269. package/dist/cjs/person/person-family-name.js.map +7 -0
  270. package/dist/cjs/person/person-full-name.js +106 -0
  271. package/dist/cjs/person/person-full-name.js.map +7 -0
  272. package/dist/cjs/person/person-given-name.js +103 -0
  273. package/dist/cjs/person/person-given-name.js.map +7 -0
  274. package/dist/cjs/person/person-masking.js +48 -0
  275. package/dist/cjs/person/person-masking.js.map +7 -0
  276. package/dist/cjs/person/person-name-normalization.js +99 -0
  277. package/dist/cjs/person/person-name-normalization.js.map +7 -0
  278. package/dist/cjs/person/personnummer-parser.js +156 -0
  279. package/dist/cjs/person/personnummer-parser.js.map +7 -0
  280. package/dist/cjs/person/swedish-coordination-number.js +186 -0
  281. package/dist/cjs/person/swedish-coordination-number.js.map +7 -0
  282. package/dist/cjs/person/swedish-personal-identity-number.js +188 -0
  283. package/dist/cjs/person/swedish-personal-identity-number.js.map +7 -0
  284. package/dist/cjs/primitive-type-info.js +17 -0
  285. package/dist/cjs/primitive-type-info.js.map +7 -0
  286. package/dist/cjs/primitives-defaults.js +92 -0
  287. package/dist/cjs/primitives-defaults.js.map +7 -0
  288. package/dist/cjs/product/adult-clothing-size.js +148 -0
  289. package/dist/cjs/product/adult-clothing-size.js.map +7 -0
  290. package/dist/cjs/product/adult-shoe-size.js +139 -0
  291. package/dist/cjs/product/adult-shoe-size.js.map +7 -0
  292. package/dist/cjs/product/aspect-ratio.js +188 -0
  293. package/dist/cjs/product/aspect-ratio.js.map +7 -0
  294. package/dist/cjs/product/battery-capacity.js +184 -0
  295. package/dist/cjs/product/battery-capacity.js.map +7 -0
  296. package/dist/cjs/product/battery-chemistry.js +259 -0
  297. package/dist/cjs/product/battery-chemistry.js.map +7 -0
  298. package/dist/cjs/product/camera-resolution.js +161 -0
  299. package/dist/cjs/product/camera-resolution.js.map +7 -0
  300. package/dist/cjs/product/child-clothing-size.js +254 -0
  301. package/dist/cjs/product/child-clothing-size.js.map +7 -0
  302. package/dist/cjs/product/child-shoe-size.js +200 -0
  303. package/dist/cjs/product/child-shoe-size.js.map +7 -0
  304. package/dist/cjs/product/clothing-fit.js +223 -0
  305. package/dist/cjs/product/clothing-fit.js.map +7 -0
  306. package/dist/cjs/product/clothing-gender.js +198 -0
  307. package/dist/cjs/product/clothing-gender.js.map +7 -0
  308. package/dist/cjs/product/clothing-season.js +202 -0
  309. package/dist/cjs/product/clothing-season.js.map +7 -0
  310. package/dist/cjs/product/clothing-size-system.js +31 -0
  311. package/dist/cjs/product/clothing-size-system.js.map +7 -0
  312. package/dist/cjs/product/clothing-size.js +146 -0
  313. package/dist/cjs/product/clothing-size.js.map +7 -0
  314. package/dist/cjs/product/color.js +334 -0
  315. package/dist/cjs/product/color.js.map +7 -0
  316. package/dist/cjs/product/display-panel-type.js +287 -0
  317. package/dist/cjs/product/display-panel-type.js.map +7 -0
  318. package/dist/cjs/product/electrical-phase.js +194 -0
  319. package/dist/cjs/product/electrical-phase.js.map +7 -0
  320. package/dist/cjs/product/energy-scale.js +31 -0
  321. package/dist/cjs/product/energy-scale.js.map +7 -0
  322. package/dist/cjs/product/eu-energy-efficiency-class.js +135 -0
  323. package/dist/cjs/product/eu-energy-efficiency-class.js.map +7 -0
  324. package/dist/cjs/product/google-product-category.js +114 -0
  325. package/dist/cjs/product/google-product-category.js.map +7 -0
  326. package/dist/cjs/product/gtin.js +99 -0
  327. package/dist/cjs/product/gtin.js.map +7 -0
  328. package/dist/cjs/product/gtin12.js +130 -0
  329. package/dist/cjs/product/gtin12.js.map +7 -0
  330. package/dist/cjs/product/gtin13.js +147 -0
  331. package/dist/cjs/product/gtin13.js.map +7 -0
  332. package/dist/cjs/product/gtin14.js +135 -0
  333. package/dist/cjs/product/gtin14.js.map +7 -0
  334. package/dist/cjs/product/gtin8.js +130 -0
  335. package/dist/cjs/product/gtin8.js.map +7 -0
  336. package/dist/cjs/product/hs-code-level.js +32 -0
  337. package/dist/cjs/product/hs-code-level.js.map +7 -0
  338. package/dist/cjs/product/hs-code.js +126 -0
  339. package/dist/cjs/product/hs-code.js.map +7 -0
  340. package/dist/cjs/product/index.js +128 -0
  341. package/dist/cjs/product/index.js.map +7 -0
  342. package/dist/cjs/product/ip-rating.js +166 -0
  343. package/dist/cjs/product/ip-rating.js.map +7 -0
  344. package/dist/cjs/product/operating-system-family.js +37 -0
  345. package/dist/cjs/product/operating-system-family.js.map +7 -0
  346. package/dist/cjs/product/operating-system-info.js +100 -0
  347. package/dist/cjs/product/operating-system-info.js.map +7 -0
  348. package/dist/cjs/product/operating-system-name.js +127 -0
  349. package/dist/cjs/product/operating-system-name.js.map +7 -0
  350. package/dist/cjs/product/operating-system-version.js +110 -0
  351. package/dist/cjs/product/operating-system-version.js.map +7 -0
  352. package/dist/cjs/product/power-source.js +318 -0
  353. package/dist/cjs/product/power-source.js.map +7 -0
  354. package/dist/cjs/product/processor-speed.js +159 -0
  355. package/dist/cjs/product/processor-speed.js.map +7 -0
  356. package/dist/cjs/product/product-extensions.js +27 -0
  357. package/dist/cjs/product/product-extensions.js.map +7 -0
  358. package/dist/cjs/product/product-masking.js +102 -0
  359. package/dist/cjs/product/product-masking.js.map +7 -0
  360. package/dist/cjs/product/ram-capacity.js +154 -0
  361. package/dist/cjs/product/ram-capacity.js.map +7 -0
  362. package/dist/cjs/product/refrigerant-family.js +40 -0
  363. package/dist/cjs/product/refrigerant-family.js.map +7 -0
  364. package/dist/cjs/product/refrigerant.js +419 -0
  365. package/dist/cjs/product/refrigerant.js.map +7 -0
  366. package/dist/cjs/product/screen-resolution.js +197 -0
  367. package/dist/cjs/product/screen-resolution.js.map +7 -0
  368. package/dist/cjs/product/screen-size.js +184 -0
  369. package/dist/cjs/product/screen-size.js.map +7 -0
  370. package/dist/cjs/product/shoe-size-system.js +31 -0
  371. package/dist/cjs/product/shoe-size-system.js.map +7 -0
  372. package/dist/cjs/product/shoe-size.js +138 -0
  373. package/dist/cjs/product/shoe-size.js.map +7 -0
  374. package/dist/cjs/product/storage-capacity.js +159 -0
  375. package/dist/cjs/product/storage-capacity.js.map +7 -0
  376. package/dist/cjs/product/storage-media-type.js +271 -0
  377. package/dist/cjs/product/storage-media-type.js.map +7 -0
  378. package/dist/cjs/property/index.js +31 -0
  379. package/dist/cjs/property/index.js.map +7 -0
  380. package/dist/cjs/property/swedish-property-designation.js +179 -0
  381. package/dist/cjs/property/swedish-property-designation.js.map +7 -0
  382. package/dist/cjs/property/swedish-property-taxation-code.js +218 -0
  383. package/dist/cjs/property/swedish-property-taxation-code.js.map +7 -0
  384. package/dist/cjs/register-default-text-scanners.js +290 -0
  385. package/dist/cjs/register-default-text-scanners.js.map +7 -0
  386. package/dist/cjs/sample-data/index.js +358 -0
  387. package/dist/cjs/sample-data/index.js.map +7 -0
  388. package/dist/cjs/text-scanning/index.js +38 -0
  389. package/dist/cjs/text-scanning/index.js.map +7 -0
  390. package/dist/cjs/text-scanning/text-candidate-category.js +35 -0
  391. package/dist/cjs/text-scanning/text-candidate-category.js.map +7 -0
  392. package/dist/cjs/text-scanning/text-candidate.js +75 -0
  393. package/dist/cjs/text-scanning/text-candidate.js.map +7 -0
  394. package/dist/cjs/text-scanning/text-match-confidence.js +43 -0
  395. package/dist/cjs/text-scanning/text-match-confidence.js.map +7 -0
  396. package/dist/cjs/text-scanning/text-scan-helpers.js +98 -0
  397. package/dist/cjs/text-scanning/text-scan-helpers.js.map +7 -0
  398. package/dist/cjs/text-scanning/text-scan-result.js +333 -0
  399. package/dist/cjs/text-scanning/text-scan-result.js.map +7 -0
  400. package/dist/cjs/text-scanning/text-scanner-options.js +29 -0
  401. package/dist/cjs/text-scanning/text-scanner-options.js.map +7 -0
  402. package/dist/cjs/text-scanning/text-scanner.js +60 -0
  403. package/dist/cjs/text-scanning/text-scanner.js.map +7 -0
  404. package/dist/cjs/validation/index.js +29 -0
  405. package/dist/cjs/validation/index.js.map +7 -0
  406. package/dist/cjs/validation/validation-error-reason.js +53 -0
  407. package/dist/cjs/validation/validation-error-reason.js.map +7 -0
  408. package/dist/cjs/validation/validation-issue.js +43 -0
  409. package/dist/cjs/validation/validation-issue.js.map +7 -0
  410. package/dist/cjs/validation/validation-result.js +52 -0
  411. package/dist/cjs/validation/validation-result.js.map +7 -0
  412. package/dist/cjs/vehicle/boat-ce-design-category.js +200 -0
  413. package/dist/cjs/vehicle/boat-ce-design-category.js.map +7 -0
  414. package/dist/cjs/vehicle/boat-hull-material.js +222 -0
  415. package/dist/cjs/vehicle/boat-hull-material.js.map +7 -0
  416. package/dist/cjs/vehicle/body-type.js +325 -0
  417. package/dist/cjs/vehicle/body-type.js.map +7 -0
  418. package/dist/cjs/vehicle/bolt-pattern.js +150 -0
  419. package/dist/cjs/vehicle/bolt-pattern.js.map +7 -0
  420. package/dist/cjs/vehicle/drivetrain-type.js +200 -0
  421. package/dist/cjs/vehicle/drivetrain-type.js.map +7 -0
  422. package/dist/cjs/vehicle/emission-rate.js +194 -0
  423. package/dist/cjs/vehicle/emission-rate.js.map +7 -0
  424. package/dist/cjs/vehicle/energy-consumption.js +250 -0
  425. package/dist/cjs/vehicle/energy-consumption.js.map +7 -0
  426. package/dist/cjs/vehicle/engine-displacement.js +169 -0
  427. package/dist/cjs/vehicle/engine-displacement.js.map +7 -0
  428. package/dist/cjs/vehicle/engine-power.js +211 -0
  429. package/dist/cjs/vehicle/engine-power.js.map +7 -0
  430. package/dist/cjs/vehicle/eu-type-approval-number.js +196 -0
  431. package/dist/cjs/vehicle/eu-type-approval-number.js.map +7 -0
  432. package/dist/cjs/vehicle/eu-vehicle-category.js +167 -0
  433. package/dist/cjs/vehicle/eu-vehicle-category.js.map +7 -0
  434. package/dist/cjs/vehicle/euro-emission-class.js +313 -0
  435. package/dist/cjs/vehicle/euro-emission-class.js.map +7 -0
  436. package/dist/cjs/vehicle/fuel-consumption-norm.js +206 -0
  437. package/dist/cjs/vehicle/fuel-consumption-norm.js.map +7 -0
  438. package/dist/cjs/vehicle/fuel-consumption.js +281 -0
  439. package/dist/cjs/vehicle/fuel-consumption.js.map +7 -0
  440. package/dist/cjs/vehicle/fuel-type.js +288 -0
  441. package/dist/cjs/vehicle/fuel-type.js.map +7 -0
  442. package/dist/cjs/vehicle/index.js +108 -0
  443. package/dist/cjs/vehicle/index.js.map +7 -0
  444. package/dist/cjs/vehicle/odometer-reading.js +165 -0
  445. package/dist/cjs/vehicle/odometer-reading.js.map +7 -0
  446. package/dist/cjs/vehicle/operating-hours.js +174 -0
  447. package/dist/cjs/vehicle/operating-hours.js.map +7 -0
  448. package/dist/cjs/vehicle/suspension-type.js +312 -0
  449. package/dist/cjs/vehicle/suspension-type.js.map +7 -0
  450. package/dist/cjs/vehicle/swedish-driving-license-category.js +404 -0
  451. package/dist/cjs/vehicle/swedish-driving-license-category.js.map +7 -0
  452. package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js +32 -0
  453. package/dist/cjs/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
  454. package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js +232 -0
  455. package/dist/cjs/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
  456. package/dist/cjs/vehicle/swedish-vehicle-registration-number.js +193 -0
  457. package/dist/cjs/vehicle/swedish-vehicle-registration-number.js.map +7 -0
  458. package/dist/cjs/vehicle/swedish-vehicle-status.js +172 -0
  459. package/dist/cjs/vehicle/swedish-vehicle-status.js.map +7 -0
  460. package/dist/cjs/vehicle/swedish-vehicle-type.js +282 -0
  461. package/dist/cjs/vehicle/swedish-vehicle-type.js.map +7 -0
  462. package/dist/cjs/vehicle/tire-dimension.js +206 -0
  463. package/dist/cjs/vehicle/tire-dimension.js.map +7 -0
  464. package/dist/cjs/vehicle/tire-type.js +228 -0
  465. package/dist/cjs/vehicle/tire-type.js.map +7 -0
  466. package/dist/cjs/vehicle/track-type.js +188 -0
  467. package/dist/cjs/vehicle/track-type.js.map +7 -0
  468. package/dist/cjs/vehicle/transmission-type.js +258 -0
  469. package/dist/cjs/vehicle/transmission-type.js.map +7 -0
  470. package/dist/cjs/vehicle/vehicle-extensions.js +35 -0
  471. package/dist/cjs/vehicle/vehicle-extensions.js.map +7 -0
  472. package/dist/cjs/vehicle/vehicle-identification-number.js +265 -0
  473. package/dist/cjs/vehicle/vehicle-identification-number.js.map +7 -0
  474. package/dist/cjs/vehicle/vehicle-masking.js +68 -0
  475. package/dist/cjs/vehicle/vehicle-masking.js.map +7 -0
  476. package/dist/cjs/vehicle/wheel-rim-dimension.js +183 -0
  477. package/dist/cjs/vehicle/wheel-rim-dimension.js.map +7 -0
  478. package/dist/cjs/web/email-address.js +542 -0
  479. package/dist/cjs/web/email-address.js.map +7 -0
  480. package/dist/cjs/web/index.js +31 -0
  481. package/dist/cjs/web/index.js.map +7 -0
  482. package/dist/cjs/web/url.js +353 -0
  483. package/dist/cjs/web/url.js.map +7 -0
  484. package/dist/esm/banking/bank-resolver.js +358 -0
  485. package/dist/esm/banking/bank-resolver.js.map +7 -0
  486. package/dist/esm/banking/bic.js +169 -0
  487. package/dist/esm/banking/bic.js.map +7 -0
  488. package/dist/esm/banking/iban.js +294 -0
  489. package/dist/esm/banking/iban.js.map +7 -0
  490. package/dist/esm/banking/index.js +60 -0
  491. package/dist/esm/banking/index.js.map +7 -0
  492. package/dist/esm/banking/swedish-bank-account-holder-name.js +104 -0
  493. package/dist/esm/banking/swedish-bank-account-holder-name.js.map +7 -0
  494. package/dist/esm/banking/swedish-bank-account.js +199 -0
  495. package/dist/esm/banking/swedish-bank-account.js.map +7 -0
  496. package/dist/esm/banking/swedish-bank-clearing-number.js +136 -0
  497. package/dist/esm/banking/swedish-bank-clearing-number.js.map +7 -0
  498. package/dist/esm/banking/swedish-bank.js +69 -0
  499. package/dist/esm/banking/swedish-bank.js.map +7 -0
  500. package/dist/esm/banking/swedish-bankgiro-number.js +156 -0
  501. package/dist/esm/banking/swedish-bankgiro-number.js.map +7 -0
  502. package/dist/esm/banking/swedish-banking-number.js +181 -0
  503. package/dist/esm/banking/swedish-banking-number.js.map +7 -0
  504. package/dist/esm/banking/swedish-ocr-reference-number.js +195 -0
  505. package/dist/esm/banking/swedish-ocr-reference-number.js.map +7 -0
  506. package/dist/esm/banking/swedish-postgiro-number.js +153 -0
  507. package/dist/esm/banking/swedish-postgiro-number.js.map +7 -0
  508. package/dist/esm/banking/swedish-swish-number.js +145 -0
  509. package/dist/esm/banking/swedish-swish-number.js.map +7 -0
  510. package/dist/esm/contact/address-city.js +84 -0
  511. package/dist/esm/contact/address-city.js.map +7 -0
  512. package/dist/esm/contact/address-street.js +200 -0
  513. package/dist/esm/contact/address-street.js.map +7 -0
  514. package/dist/esm/contact/address-zip-code.js +175 -0
  515. package/dist/esm/contact/address-zip-code.js.map +7 -0
  516. package/dist/esm/contact/address.js +388 -0
  517. package/dist/esm/contact/address.js.map +7 -0
  518. package/dist/esm/contact/contact-address.js +122 -0
  519. package/dist/esm/contact/contact-address.js.map +7 -0
  520. package/dist/esm/contact/contact-external-links.js +19 -0
  521. package/dist/esm/contact/contact-external-links.js.map +7 -0
  522. package/dist/esm/contact/contact-lookup.js +11 -0
  523. package/dist/esm/contact/contact-lookup.js.map +7 -0
  524. package/dist/esm/contact/contact-masking.js +97 -0
  525. package/dist/esm/contact/contact-masking.js.map +7 -0
  526. package/dist/esm/contact/country-address-factory.js +80 -0
  527. package/dist/esm/contact/country-address-factory.js.map +7 -0
  528. package/dist/esm/contact/country-address-registry.js +16 -0
  529. package/dist/esm/contact/country-address-registry.js.map +7 -0
  530. package/dist/esm/contact/country-address.js +78 -0
  531. package/dist/esm/contact/country-address.js.map +7 -0
  532. package/dist/esm/contact/country-addresses.js +316 -0
  533. package/dist/esm/contact/country-addresses.js.map +7 -0
  534. package/dist/esm/contact/country-zip-code-factory.js +97 -0
  535. package/dist/esm/contact/country-zip-code-factory.js.map +7 -0
  536. package/dist/esm/contact/country-zip-codes.js +363 -0
  537. package/dist/esm/contact/country-zip-codes.js.map +7 -0
  538. package/dist/esm/contact/index.js +63 -0
  539. package/dist/esm/contact/index.js.map +7 -0
  540. package/dist/esm/contact/phone-calling-code.js +419 -0
  541. package/dist/esm/contact/phone-calling-code.js.map +7 -0
  542. package/dist/esm/contact/phone-number-test-data.js +43 -0
  543. package/dist/esm/contact/phone-number-test-data.js.map +7 -0
  544. package/dist/esm/contact/phone-number.js +305 -0
  545. package/dist/esm/contact/phone-number.js.map +7 -0
  546. package/dist/esm/contact/register-default-country-addresses.js +58 -0
  547. package/dist/esm/contact/register-default-country-addresses.js.map +7 -0
  548. package/dist/esm/contact/swedish-address-zip-code.js +72 -0
  549. package/dist/esm/contact/swedish-address-zip-code.js.map +7 -0
  550. package/dist/esm/contact/swedish-address.js +149 -0
  551. package/dist/esm/contact/swedish-address.js.map +7 -0
  552. package/dist/esm/finance/currency.js +231 -0
  553. package/dist/esm/finance/currency.js.map +7 -0
  554. package/dist/esm/finance/exchange-rates.js +31 -0
  555. package/dist/esm/finance/exchange-rates.js.map +7 -0
  556. package/dist/esm/finance/index.js +14 -0
  557. package/dist/esm/finance/index.js.map +7 -0
  558. package/dist/esm/finance/isin.js +141 -0
  559. package/dist/esm/finance/isin.js.map +7 -0
  560. package/dist/esm/finance/money-amount.js +287 -0
  561. package/dist/esm/finance/money-amount.js.map +7 -0
  562. package/dist/esm/geography/adjacency-data.js +315 -0
  563. package/dist/esm/geography/adjacency-data.js.map +7 -0
  564. package/dist/esm/geography/continent.js +105 -0
  565. package/dist/esm/geography/continent.js.map +7 -0
  566. package/dist/esm/geography/country-capital.js +25 -0
  567. package/dist/esm/geography/country-capital.js.map +7 -0
  568. package/dist/esm/geography/country-capitals.js +268 -0
  569. package/dist/esm/geography/country-capitals.js.map +7 -0
  570. package/dist/esm/geography/country-coordinates.js +218 -0
  571. package/dist/esm/geography/country-coordinates.js.map +7 -0
  572. package/dist/esm/geography/country-data.js +510 -0
  573. package/dist/esm/geography/country-data.js.map +7 -0
  574. package/dist/esm/geography/country-metadata.js +607 -0
  575. package/dist/esm/geography/country-metadata.js.map +7 -0
  576. package/dist/esm/geography/country.js +417 -0
  577. package/dist/esm/geography/country.js.map +7 -0
  578. package/dist/esm/geography/geo-coordinate.js +224 -0
  579. package/dist/esm/geography/geo-coordinate.js.map +7 -0
  580. package/dist/esm/geography/geography-extensions.js +62 -0
  581. package/dist/esm/geography/geography-extensions.js.map +7 -0
  582. package/dist/esm/geography/geography-external-links.js +32 -0
  583. package/dist/esm/geography/geography-external-links.js.map +7 -0
  584. package/dist/esm/geography/geography-lookup.js +11 -0
  585. package/dist/esm/geography/geography-lookup.js.map +7 -0
  586. package/dist/esm/geography/geography-masking.js +34 -0
  587. package/dist/esm/geography/geography-masking.js.map +7 -0
  588. package/dist/esm/geography/index.js +55 -0
  589. package/dist/esm/geography/index.js.map +7 -0
  590. package/dist/esm/geography/language.js +442 -0
  591. package/dist/esm/geography/language.js.map +7 -0
  592. package/dist/esm/geography/swedish-county.js +212 -0
  593. package/dist/esm/geography/swedish-county.js.map +7 -0
  594. package/dist/esm/geography/swedish-municipality-data.js +296 -0
  595. package/dist/esm/geography/swedish-municipality-data.js.map +7 -0
  596. package/dist/esm/geography/swedish-municipality.js +198 -0
  597. package/dist/esm/geography/swedish-municipality.js.map +7 -0
  598. package/dist/esm/index.js +16 -0
  599. package/dist/esm/index.js.map +7 -0
  600. package/dist/esm/internal/case-folding.js +12 -0
  601. package/dist/esm/internal/case-folding.js.map +7 -0
  602. package/dist/esm/internal/clock.js +12 -0
  603. package/dist/esm/internal/clock.js.map +7 -0
  604. package/dist/esm/internal/decimal.js +242 -0
  605. package/dist/esm/internal/decimal.js.map +7 -0
  606. package/dist/esm/internal/gs1-prefix.js +144 -0
  607. package/dist/esm/internal/gs1-prefix.js.map +7 -0
  608. package/dist/esm/internal/gtin-check-digit.js +26 -0
  609. package/dist/esm/internal/gtin-check-digit.js.map +7 -0
  610. package/dist/esm/internal/input-sanitization.js +59 -0
  611. package/dist/esm/internal/input-sanitization.js.map +7 -0
  612. package/dist/esm/internal/luhn.js +20 -0
  613. package/dist/esm/internal/luhn.js.map +7 -0
  614. package/dist/esm/internal/measurement-unit-parser.js +66 -0
  615. package/dist/esm/internal/measurement-unit-parser.js.map +7 -0
  616. package/dist/esm/internal/measurement-unit.js +110 -0
  617. package/dist/esm/internal/measurement-unit.js.map +7 -0
  618. package/dist/esm/internal/quantity.js +102 -0
  619. package/dist/esm/internal/quantity.js.map +7 -0
  620. package/dist/esm/internal/shoe-size-format.js +11 -0
  621. package/dist/esm/internal/shoe-size-format.js.map +7 -0
  622. package/dist/esm/measurement/area-unit.js +138 -0
  623. package/dist/esm/measurement/area-unit.js.map +7 -0
  624. package/dist/esm/measurement/area.js +163 -0
  625. package/dist/esm/measurement/area.js.map +7 -0
  626. package/dist/esm/measurement/count.js +112 -0
  627. package/dist/esm/measurement/count.js.map +7 -0
  628. package/dist/esm/measurement/data-size-unit.js +188 -0
  629. package/dist/esm/measurement/data-size-unit.js.map +7 -0
  630. package/dist/esm/measurement/data-size.js +187 -0
  631. package/dist/esm/measurement/data-size.js.map +7 -0
  632. package/dist/esm/measurement/electric-charge-unit.js +89 -0
  633. package/dist/esm/measurement/electric-charge-unit.js.map +7 -0
  634. package/dist/esm/measurement/electric-charge.js +128 -0
  635. package/dist/esm/measurement/electric-charge.js.map +7 -0
  636. package/dist/esm/measurement/electric-current-unit.js +88 -0
  637. package/dist/esm/measurement/electric-current-unit.js.map +7 -0
  638. package/dist/esm/measurement/electric-current.js +134 -0
  639. package/dist/esm/measurement/electric-current.js.map +7 -0
  640. package/dist/esm/measurement/energy-unit.js +181 -0
  641. package/dist/esm/measurement/energy-unit.js.map +7 -0
  642. package/dist/esm/measurement/energy.js +187 -0
  643. package/dist/esm/measurement/energy.js.map +7 -0
  644. package/dist/esm/measurement/flow-rate-unit.js +112 -0
  645. package/dist/esm/measurement/flow-rate-unit.js.map +7 -0
  646. package/dist/esm/measurement/flow-rate.js +142 -0
  647. package/dist/esm/measurement/flow-rate.js.map +7 -0
  648. package/dist/esm/measurement/frequency-unit.js +112 -0
  649. package/dist/esm/measurement/frequency-unit.js.map +7 -0
  650. package/dist/esm/measurement/frequency.js +145 -0
  651. package/dist/esm/measurement/frequency.js.map +7 -0
  652. package/dist/esm/measurement/index.js +129 -0
  653. package/dist/esm/measurement/index.js.map +7 -0
  654. package/dist/esm/measurement/length-unit.js +190 -0
  655. package/dist/esm/measurement/length-unit.js.map +7 -0
  656. package/dist/esm/measurement/length.js +188 -0
  657. package/dist/esm/measurement/length.js.map +7 -0
  658. package/dist/esm/measurement/luminance-unit.js +90 -0
  659. package/dist/esm/measurement/luminance-unit.js.map +7 -0
  660. package/dist/esm/measurement/luminance.js +138 -0
  661. package/dist/esm/measurement/luminance.js.map +7 -0
  662. package/dist/esm/measurement/luminous-flux-unit.js +66 -0
  663. package/dist/esm/measurement/luminous-flux-unit.js.map +7 -0
  664. package/dist/esm/measurement/luminous-flux.js +119 -0
  665. package/dist/esm/measurement/luminous-flux.js.map +7 -0
  666. package/dist/esm/measurement/percentage.js +192 -0
  667. package/dist/esm/measurement/percentage.js.map +7 -0
  668. package/dist/esm/measurement/power-unit.js +135 -0
  669. package/dist/esm/measurement/power-unit.js.map +7 -0
  670. package/dist/esm/measurement/power.js +164 -0
  671. package/dist/esm/measurement/power.js.map +7 -0
  672. package/dist/esm/measurement/pressure-unit.js +148 -0
  673. package/dist/esm/measurement/pressure-unit.js.map +7 -0
  674. package/dist/esm/measurement/pressure.js +169 -0
  675. package/dist/esm/measurement/pressure.js.map +7 -0
  676. package/dist/esm/measurement/rotational-speed-unit.js +76 -0
  677. package/dist/esm/measurement/rotational-speed-unit.js.map +7 -0
  678. package/dist/esm/measurement/rotational-speed.js +132 -0
  679. package/dist/esm/measurement/rotational-speed.js.map +7 -0
  680. package/dist/esm/measurement/sound-level.js +165 -0
  681. package/dist/esm/measurement/sound-level.js.map +7 -0
  682. package/dist/esm/measurement/speed-unit.js +99 -0
  683. package/dist/esm/measurement/speed-unit.js.map +7 -0
  684. package/dist/esm/measurement/speed.js +139 -0
  685. package/dist/esm/measurement/speed.js.map +7 -0
  686. package/dist/esm/measurement/temperature-delta.js +81 -0
  687. package/dist/esm/measurement/temperature-delta.js.map +7 -0
  688. package/dist/esm/measurement/temperature-unit.js +110 -0
  689. package/dist/esm/measurement/temperature-unit.js.map +7 -0
  690. package/dist/esm/measurement/temperature.js +196 -0
  691. package/dist/esm/measurement/temperature.js.map +7 -0
  692. package/dist/esm/measurement/torque-unit.js +118 -0
  693. package/dist/esm/measurement/torque-unit.js.map +7 -0
  694. package/dist/esm/measurement/torque.js +145 -0
  695. package/dist/esm/measurement/torque.js.map +7 -0
  696. package/dist/esm/measurement/voltage-unit.js +107 -0
  697. package/dist/esm/measurement/voltage-unit.js.map +7 -0
  698. package/dist/esm/measurement/voltage.js +139 -0
  699. package/dist/esm/measurement/voltage.js.map +7 -0
  700. package/dist/esm/measurement/volume-unit.js +158 -0
  701. package/dist/esm/measurement/volume-unit.js.map +7 -0
  702. package/dist/esm/measurement/volume.js +175 -0
  703. package/dist/esm/measurement/volume.js.map +7 -0
  704. package/dist/esm/measurement/weight-unit.js +138 -0
  705. package/dist/esm/measurement/weight-unit.js.map +7 -0
  706. package/dist/esm/measurement/weight.js +163 -0
  707. package/dist/esm/measurement/weight.js.map +7 -0
  708. package/dist/esm/measurement/year-month.js +184 -0
  709. package/dist/esm/measurement/year-month.js.map +7 -0
  710. package/dist/esm/measurement/year.js +89 -0
  711. package/dist/esm/measurement/year.js.map +7 -0
  712. package/dist/esm/organization/duns-number.js +94 -0
  713. package/dist/esm/organization/duns-number.js.map +7 -0
  714. package/dist/esm/organization/elf-code.js +112 -0
  715. package/dist/esm/organization/elf-code.js.map +7 -0
  716. package/dist/esm/organization/eu-organization-name.js +99 -0
  717. package/dist/esm/organization/eu-organization-name.js.map +7 -0
  718. package/dist/esm/organization/eu-vat-number.js +424 -0
  719. package/dist/esm/organization/eu-vat-number.js.map +7 -0
  720. package/dist/esm/organization/index.js +62 -0
  721. package/dist/esm/organization/index.js.map +7 -0
  722. package/dist/esm/organization/lei-code.js +113 -0
  723. package/dist/esm/organization/lei-code.js.map +7 -0
  724. package/dist/esm/organization/organization-extensions.js +60 -0
  725. package/dist/esm/organization/organization-extensions.js.map +7 -0
  726. package/dist/esm/organization/organization-validation-utils.js +58 -0
  727. package/dist/esm/organization/organization-validation-utils.js.map +7 -0
  728. package/dist/esm/organization/swedish-cfar-number.js +68 -0
  729. package/dist/esm/organization/swedish-cfar-number.js.map +7 -0
  730. package/dist/esm/organization/swedish-organization-identifier-type.js +14 -0
  731. package/dist/esm/organization/swedish-organization-identifier-type.js.map +7 -0
  732. package/dist/esm/organization/swedish-organization-identifier.js +146 -0
  733. package/dist/esm/organization/swedish-organization-identifier.js.map +7 -0
  734. package/dist/esm/organization/swedish-organization-name.js +235 -0
  735. package/dist/esm/organization/swedish-organization-name.js.map +7 -0
  736. package/dist/esm/organization/swedish-organization-number.js +269 -0
  737. package/dist/esm/organization/swedish-organization-number.js.map +7 -0
  738. package/dist/esm/organization/swedish-organization-type.js +31 -0
  739. package/dist/esm/organization/swedish-organization-type.js.map +7 -0
  740. package/dist/esm/organization/swedish-sni-code.js +76 -0
  741. package/dist/esm/organization/swedish-sni-code.js.map +7 -0
  742. package/dist/esm/person/index.js +42 -0
  743. package/dist/esm/person/index.js.map +7 -0
  744. package/dist/esm/person/person-age.js +167 -0
  745. package/dist/esm/person/person-age.js.map +7 -0
  746. package/dist/esm/person/person-family-name.js +67 -0
  747. package/dist/esm/person/person-family-name.js.map +7 -0
  748. package/dist/esm/person/person-full-name.js +86 -0
  749. package/dist/esm/person/person-full-name.js.map +7 -0
  750. package/dist/esm/person/person-given-name.js +87 -0
  751. package/dist/esm/person/person-given-name.js.map +7 -0
  752. package/dist/esm/person/person-masking.js +28 -0
  753. package/dist/esm/person/person-masking.js.map +7 -0
  754. package/dist/esm/person/person-name-normalization.js +79 -0
  755. package/dist/esm/person/person-name-normalization.js.map +7 -0
  756. package/dist/esm/person/personnummer-parser.js +136 -0
  757. package/dist/esm/person/personnummer-parser.js.map +7 -0
  758. package/dist/esm/person/swedish-coordination-number.js +173 -0
  759. package/dist/esm/person/swedish-coordination-number.js.map +7 -0
  760. package/dist/esm/person/swedish-personal-identity-number.js +175 -0
  761. package/dist/esm/person/swedish-personal-identity-number.js.map +7 -0
  762. package/dist/esm/primitive-type-info.js +1 -0
  763. package/dist/esm/primitive-type-info.js.map +7 -0
  764. package/dist/esm/primitives-defaults.js +72 -0
  765. package/dist/esm/primitives-defaults.js.map +7 -0
  766. package/dist/esm/product/adult-clothing-size.js +128 -0
  767. package/dist/esm/product/adult-clothing-size.js.map +7 -0
  768. package/dist/esm/product/adult-shoe-size.js +119 -0
  769. package/dist/esm/product/adult-shoe-size.js.map +7 -0
  770. package/dist/esm/product/aspect-ratio.js +168 -0
  771. package/dist/esm/product/aspect-ratio.js.map +7 -0
  772. package/dist/esm/product/battery-capacity.js +164 -0
  773. package/dist/esm/product/battery-capacity.js.map +7 -0
  774. package/dist/esm/product/battery-chemistry.js +239 -0
  775. package/dist/esm/product/battery-chemistry.js.map +7 -0
  776. package/dist/esm/product/camera-resolution.js +141 -0
  777. package/dist/esm/product/camera-resolution.js.map +7 -0
  778. package/dist/esm/product/child-clothing-size.js +234 -0
  779. package/dist/esm/product/child-clothing-size.js.map +7 -0
  780. package/dist/esm/product/child-shoe-size.js +180 -0
  781. package/dist/esm/product/child-shoe-size.js.map +7 -0
  782. package/dist/esm/product/clothing-fit.js +203 -0
  783. package/dist/esm/product/clothing-fit.js.map +7 -0
  784. package/dist/esm/product/clothing-gender.js +178 -0
  785. package/dist/esm/product/clothing-gender.js.map +7 -0
  786. package/dist/esm/product/clothing-season.js +182 -0
  787. package/dist/esm/product/clothing-season.js.map +7 -0
  788. package/dist/esm/product/clothing-size-system.js +11 -0
  789. package/dist/esm/product/clothing-size-system.js.map +7 -0
  790. package/dist/esm/product/clothing-size.js +126 -0
  791. package/dist/esm/product/clothing-size.js.map +7 -0
  792. package/dist/esm/product/color.js +314 -0
  793. package/dist/esm/product/color.js.map +7 -0
  794. package/dist/esm/product/display-panel-type.js +267 -0
  795. package/dist/esm/product/display-panel-type.js.map +7 -0
  796. package/dist/esm/product/electrical-phase.js +174 -0
  797. package/dist/esm/product/electrical-phase.js.map +7 -0
  798. package/dist/esm/product/energy-scale.js +11 -0
  799. package/dist/esm/product/energy-scale.js.map +7 -0
  800. package/dist/esm/product/eu-energy-efficiency-class.js +115 -0
  801. package/dist/esm/product/eu-energy-efficiency-class.js.map +7 -0
  802. package/dist/esm/product/google-product-category.js +94 -0
  803. package/dist/esm/product/google-product-category.js.map +7 -0
  804. package/dist/esm/product/gtin.js +83 -0
  805. package/dist/esm/product/gtin.js.map +7 -0
  806. package/dist/esm/product/gtin12.js +110 -0
  807. package/dist/esm/product/gtin12.js.map +7 -0
  808. package/dist/esm/product/gtin13.js +127 -0
  809. package/dist/esm/product/gtin13.js.map +7 -0
  810. package/dist/esm/product/gtin14.js +115 -0
  811. package/dist/esm/product/gtin14.js.map +7 -0
  812. package/dist/esm/product/gtin8.js +110 -0
  813. package/dist/esm/product/gtin8.js.map +7 -0
  814. package/dist/esm/product/hs-code-level.js +12 -0
  815. package/dist/esm/product/hs-code-level.js.map +7 -0
  816. package/dist/esm/product/hs-code.js +106 -0
  817. package/dist/esm/product/hs-code.js.map +7 -0
  818. package/dist/esm/product/index.js +137 -0
  819. package/dist/esm/product/index.js.map +7 -0
  820. package/dist/esm/product/ip-rating.js +146 -0
  821. package/dist/esm/product/ip-rating.js.map +7 -0
  822. package/dist/esm/product/operating-system-family.js +17 -0
  823. package/dist/esm/product/operating-system-family.js.map +7 -0
  824. package/dist/esm/product/operating-system-info.js +80 -0
  825. package/dist/esm/product/operating-system-info.js.map +7 -0
  826. package/dist/esm/product/operating-system-name.js +107 -0
  827. package/dist/esm/product/operating-system-name.js.map +7 -0
  828. package/dist/esm/product/operating-system-version.js +90 -0
  829. package/dist/esm/product/operating-system-version.js.map +7 -0
  830. package/dist/esm/product/power-source.js +298 -0
  831. package/dist/esm/product/power-source.js.map +7 -0
  832. package/dist/esm/product/processor-speed.js +139 -0
  833. package/dist/esm/product/processor-speed.js.map +7 -0
  834. package/dist/esm/product/product-extensions.js +7 -0
  835. package/dist/esm/product/product-extensions.js.map +7 -0
  836. package/dist/esm/product/product-masking.js +82 -0
  837. package/dist/esm/product/product-masking.js.map +7 -0
  838. package/dist/esm/product/ram-capacity.js +134 -0
  839. package/dist/esm/product/ram-capacity.js.map +7 -0
  840. package/dist/esm/product/refrigerant-family.js +20 -0
  841. package/dist/esm/product/refrigerant-family.js.map +7 -0
  842. package/dist/esm/product/refrigerant.js +399 -0
  843. package/dist/esm/product/refrigerant.js.map +7 -0
  844. package/dist/esm/product/screen-resolution.js +177 -0
  845. package/dist/esm/product/screen-resolution.js.map +7 -0
  846. package/dist/esm/product/screen-size.js +164 -0
  847. package/dist/esm/product/screen-size.js.map +7 -0
  848. package/dist/esm/product/shoe-size-system.js +11 -0
  849. package/dist/esm/product/shoe-size-system.js.map +7 -0
  850. package/dist/esm/product/shoe-size.js +118 -0
  851. package/dist/esm/product/shoe-size.js.map +7 -0
  852. package/dist/esm/product/storage-capacity.js +139 -0
  853. package/dist/esm/product/storage-capacity.js.map +7 -0
  854. package/dist/esm/product/storage-media-type.js +251 -0
  855. package/dist/esm/product/storage-media-type.js.map +7 -0
  856. package/dist/esm/property/index.js +19 -0
  857. package/dist/esm/property/index.js.map +7 -0
  858. package/dist/esm/property/swedish-property-designation.js +159 -0
  859. package/dist/esm/property/swedish-property-designation.js.map +7 -0
  860. package/dist/esm/property/swedish-property-taxation-code.js +198 -0
  861. package/dist/esm/property/swedish-property-taxation-code.js.map +7 -0
  862. package/dist/esm/register-default-text-scanners.js +270 -0
  863. package/dist/esm/register-default-text-scanners.js.map +7 -0
  864. package/dist/esm/sample-data/index.js +355 -0
  865. package/dist/esm/sample-data/index.js.map +7 -0
  866. package/dist/esm/text-scanning/index.js +21 -0
  867. package/dist/esm/text-scanning/index.js.map +7 -0
  868. package/dist/esm/text-scanning/text-candidate-category.js +15 -0
  869. package/dist/esm/text-scanning/text-candidate-category.js.map +7 -0
  870. package/dist/esm/text-scanning/text-candidate.js +55 -0
  871. package/dist/esm/text-scanning/text-candidate.js.map +7 -0
  872. package/dist/esm/text-scanning/text-match-confidence.js +23 -0
  873. package/dist/esm/text-scanning/text-match-confidence.js.map +7 -0
  874. package/dist/esm/text-scanning/text-scan-helpers.js +78 -0
  875. package/dist/esm/text-scanning/text-scan-helpers.js.map +7 -0
  876. package/dist/esm/text-scanning/text-scan-result.js +313 -0
  877. package/dist/esm/text-scanning/text-scan-result.js.map +7 -0
  878. package/dist/esm/text-scanning/text-scanner-options.js +9 -0
  879. package/dist/esm/text-scanning/text-scanner-options.js.map +7 -0
  880. package/dist/esm/text-scanning/text-scanner.js +40 -0
  881. package/dist/esm/text-scanning/text-scanner.js.map +7 -0
  882. package/dist/esm/validation/index.js +9 -0
  883. package/dist/esm/validation/index.js.map +7 -0
  884. package/dist/esm/validation/validation-error-reason.js +33 -0
  885. package/dist/esm/validation/validation-error-reason.js.map +7 -0
  886. package/dist/esm/validation/validation-issue.js +23 -0
  887. package/dist/esm/validation/validation-issue.js.map +7 -0
  888. package/dist/esm/validation/validation-result.js +32 -0
  889. package/dist/esm/validation/validation-result.js.map +7 -0
  890. package/dist/esm/vehicle/boat-ce-design-category.js +180 -0
  891. package/dist/esm/vehicle/boat-ce-design-category.js.map +7 -0
  892. package/dist/esm/vehicle/boat-hull-material.js +202 -0
  893. package/dist/esm/vehicle/boat-hull-material.js.map +7 -0
  894. package/dist/esm/vehicle/body-type.js +305 -0
  895. package/dist/esm/vehicle/body-type.js.map +7 -0
  896. package/dist/esm/vehicle/bolt-pattern.js +130 -0
  897. package/dist/esm/vehicle/bolt-pattern.js.map +7 -0
  898. package/dist/esm/vehicle/drivetrain-type.js +180 -0
  899. package/dist/esm/vehicle/drivetrain-type.js.map +7 -0
  900. package/dist/esm/vehicle/emission-rate.js +174 -0
  901. package/dist/esm/vehicle/emission-rate.js.map +7 -0
  902. package/dist/esm/vehicle/energy-consumption.js +230 -0
  903. package/dist/esm/vehicle/energy-consumption.js.map +7 -0
  904. package/dist/esm/vehicle/engine-displacement.js +149 -0
  905. package/dist/esm/vehicle/engine-displacement.js.map +7 -0
  906. package/dist/esm/vehicle/engine-power.js +191 -0
  907. package/dist/esm/vehicle/engine-power.js.map +7 -0
  908. package/dist/esm/vehicle/eu-type-approval-number.js +176 -0
  909. package/dist/esm/vehicle/eu-type-approval-number.js.map +7 -0
  910. package/dist/esm/vehicle/eu-vehicle-category.js +147 -0
  911. package/dist/esm/vehicle/eu-vehicle-category.js.map +7 -0
  912. package/dist/esm/vehicle/euro-emission-class.js +293 -0
  913. package/dist/esm/vehicle/euro-emission-class.js.map +7 -0
  914. package/dist/esm/vehicle/fuel-consumption-norm.js +186 -0
  915. package/dist/esm/vehicle/fuel-consumption-norm.js.map +7 -0
  916. package/dist/esm/vehicle/fuel-consumption.js +261 -0
  917. package/dist/esm/vehicle/fuel-consumption.js.map +7 -0
  918. package/dist/esm/vehicle/fuel-type.js +268 -0
  919. package/dist/esm/vehicle/fuel-type.js.map +7 -0
  920. package/dist/esm/vehicle/index.js +134 -0
  921. package/dist/esm/vehicle/index.js.map +7 -0
  922. package/dist/esm/vehicle/odometer-reading.js +145 -0
  923. package/dist/esm/vehicle/odometer-reading.js.map +7 -0
  924. package/dist/esm/vehicle/operating-hours.js +154 -0
  925. package/dist/esm/vehicle/operating-hours.js.map +7 -0
  926. package/dist/esm/vehicle/suspension-type.js +292 -0
  927. package/dist/esm/vehicle/suspension-type.js.map +7 -0
  928. package/dist/esm/vehicle/swedish-driving-license-category.js +384 -0
  929. package/dist/esm/vehicle/swedish-driving-license-category.js.map +7 -0
  930. package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js +12 -0
  931. package/dist/esm/vehicle/swedish-driving-license-vehicle-group.js.map +7 -0
  932. package/dist/esm/vehicle/swedish-eco-vehicle-classification.js +212 -0
  933. package/dist/esm/vehicle/swedish-eco-vehicle-classification.js.map +7 -0
  934. package/dist/esm/vehicle/swedish-vehicle-registration-number.js +176 -0
  935. package/dist/esm/vehicle/swedish-vehicle-registration-number.js.map +7 -0
  936. package/dist/esm/vehicle/swedish-vehicle-status.js +152 -0
  937. package/dist/esm/vehicle/swedish-vehicle-status.js.map +7 -0
  938. package/dist/esm/vehicle/swedish-vehicle-type.js +262 -0
  939. package/dist/esm/vehicle/swedish-vehicle-type.js.map +7 -0
  940. package/dist/esm/vehicle/tire-dimension.js +186 -0
  941. package/dist/esm/vehicle/tire-dimension.js.map +7 -0
  942. package/dist/esm/vehicle/tire-type.js +208 -0
  943. package/dist/esm/vehicle/tire-type.js.map +7 -0
  944. package/dist/esm/vehicle/track-type.js +168 -0
  945. package/dist/esm/vehicle/track-type.js.map +7 -0
  946. package/dist/esm/vehicle/transmission-type.js +238 -0
  947. package/dist/esm/vehicle/transmission-type.js.map +7 -0
  948. package/dist/esm/vehicle/vehicle-extensions.js +15 -0
  949. package/dist/esm/vehicle/vehicle-extensions.js.map +7 -0
  950. package/dist/esm/vehicle/vehicle-identification-number.js +248 -0
  951. package/dist/esm/vehicle/vehicle-identification-number.js.map +7 -0
  952. package/dist/esm/vehicle/vehicle-masking.js +48 -0
  953. package/dist/esm/vehicle/vehicle-masking.js.map +7 -0
  954. package/dist/esm/vehicle/wheel-rim-dimension.js +163 -0
  955. package/dist/esm/vehicle/wheel-rim-dimension.js.map +7 -0
  956. package/dist/esm/web/email-address.js +522 -0
  957. package/dist/esm/web/email-address.js.map +7 -0
  958. package/dist/esm/web/index.js +16 -0
  959. package/dist/esm/web/index.js.map +7 -0
  960. package/dist/esm/web/url.js +333 -0
  961. package/dist/esm/web/url.js.map +7 -0
  962. package/dist/types/frequency-CweGfJFS.d.cts +329 -0
  963. package/dist/types/frequency-DdOMV6Sw.d.ts +329 -0
  964. package/dist/{index.d.cts → types/index.d.cts} +9 -0
  965. package/dist/{index.d.ts → types/index.d.ts} +9 -0
  966. package/dist/types/length-CceXIJYY.d.ts +354 -0
  967. package/dist/types/length-XRL5Eg7F.d.cts +354 -0
  968. package/dist/types/measurement/index.d.cts +136 -0
  969. package/dist/types/measurement/index.d.ts +136 -0
  970. package/dist/types/product/index.d.cts +1239 -0
  971. package/dist/types/product/index.d.ts +1239 -0
  972. package/dist/types/screen-size-BD4t3wzb.d.cts +473 -0
  973. package/dist/types/screen-size-DUmjNjxG.d.ts +473 -0
  974. package/dist/{text-scanning → types/text-scanning}/index.d.cts +50 -0
  975. package/dist/{text-scanning → types/text-scanning}/index.d.ts +50 -0
  976. package/dist/types/vehicle/index.d.cts +798 -0
  977. package/dist/types/vehicle/index.d.ts +798 -0
  978. package/dist/types/volume-CFA4e3dc.d.cts +175 -0
  979. package/dist/types/volume-DGLPQypt.d.ts +175 -0
  980. package/dist/types/weight-B30-Hzxu.d.ts +1057 -0
  981. package/dist/types/weight-C5C7OuV_.d.cts +1057 -0
  982. package/dist/types/wheel-rim-dimension-CVCmLASl.d.ts +699 -0
  983. package/dist/types/wheel-rim-dimension-CdkDrzad.d.cts +699 -0
  984. package/package.json +100 -65
  985. package/dist/banking/index.cjs +0 -6491
  986. package/dist/banking/index.cjs.map +0 -1
  987. package/dist/banking/index.js +0 -6464
  988. package/dist/banking/index.js.map +0 -1
  989. package/dist/contact/index.cjs +0 -6678
  990. package/dist/contact/index.cjs.map +0 -1
  991. package/dist/contact/index.js +0 -6586
  992. package/dist/contact/index.js.map +0 -1
  993. package/dist/finance/index.cjs +0 -3592
  994. package/dist/finance/index.cjs.map +0 -1
  995. package/dist/finance/index.js +0 -3584
  996. package/dist/finance/index.js.map +0 -1
  997. package/dist/geography/index.cjs +0 -4227
  998. package/dist/geography/index.cjs.map +0 -1
  999. package/dist/geography/index.js +0 -4202
  1000. package/dist/geography/index.js.map +0 -1
  1001. package/dist/index.cjs +0 -14087
  1002. package/dist/index.cjs.map +0 -1
  1003. package/dist/index.js +0 -13868
  1004. package/dist/index.js.map +0 -1
  1005. package/dist/organization/index.cjs +0 -2376
  1006. package/dist/organization/index.cjs.map +0 -1
  1007. package/dist/organization/index.js +0 -2346
  1008. package/dist/organization/index.js.map +0 -1
  1009. package/dist/person/index.cjs +0 -1144
  1010. package/dist/person/index.cjs.map +0 -1
  1011. package/dist/person/index.js +0 -1125
  1012. package/dist/person/index.js.map +0 -1
  1013. package/dist/property/index.cjs +0 -487
  1014. package/dist/property/index.cjs.map +0 -1
  1015. package/dist/property/index.js +0 -480
  1016. package/dist/property/index.js.map +0 -1
  1017. package/dist/sample-data/index.cjs +0 -12310
  1018. package/dist/sample-data/index.cjs.map +0 -1
  1019. package/dist/sample-data/index.js +0 -12302
  1020. package/dist/sample-data/index.js.map +0 -1
  1021. package/dist/text-scanning/index.cjs +0 -10414
  1022. package/dist/text-scanning/index.cjs.map +0 -1
  1023. package/dist/text-scanning/index.js +0 -10406
  1024. package/dist/text-scanning/index.js.map +0 -1
  1025. package/dist/validation/index.cjs +0 -83
  1026. package/dist/validation/index.cjs.map +0 -1
  1027. package/dist/validation/index.js +0 -79
  1028. package/dist/validation/index.js.map +0 -1
  1029. package/dist/web/index.cjs +0 -3994
  1030. package/dist/web/index.cjs.map +0 -1
  1031. package/dist/web/index.js +0 -3987
  1032. package/dist/web/index.js.map +0 -1
  1033. /package/dist/{banking → types/banking}/index.d.cts +0 -0
  1034. /package/dist/{banking → types/banking}/index.d.ts +0 -0
  1035. /package/dist/{contact → types/contact}/index.d.cts +0 -0
  1036. /package/dist/{contact → types/contact}/index.d.ts +0 -0
  1037. /package/dist/{country-BhD51LDL.d.cts → types/country-BhD51LDL.d.cts} +0 -0
  1038. /package/dist/{country-p0n0EVQ9.d.ts → types/country-p0n0EVQ9.d.ts} +0 -0
  1039. /package/dist/{finance → types/finance}/index.d.cts +0 -0
  1040. /package/dist/{finance → types/finance}/index.d.ts +0 -0
  1041. /package/dist/{geography → types/geography}/index.d.cts +0 -0
  1042. /package/dist/{geography → types/geography}/index.d.ts +0 -0
  1043. /package/dist/{isin-EeVPpNWu.d.ts → types/isin-EeVPpNWu.d.ts} +0 -0
  1044. /package/dist/{isin-ZlQLBVm8.d.cts → types/isin-ZlQLBVm8.d.cts} +0 -0
  1045. /package/dist/{organization → types/organization}/index.d.cts +0 -0
  1046. /package/dist/{organization → types/organization}/index.d.ts +0 -0
  1047. /package/dist/{person → types/person}/index.d.cts +0 -0
  1048. /package/dist/{person → types/person}/index.d.ts +0 -0
  1049. /package/dist/{person-full-name-Cmc9Ynuc.d.cts → types/person-full-name-Cmc9Ynuc.d.cts} +0 -0
  1050. /package/dist/{person-full-name-D6Hbsab6.d.ts → types/person-full-name-D6Hbsab6.d.ts} +0 -0
  1051. /package/dist/{phone-number-C24--ggy.d.ts → types/phone-number-C24--ggy.d.ts} +0 -0
  1052. /package/dist/{phone-number-DZ-YxCQQ.d.cts → types/phone-number-DZ-YxCQQ.d.cts} +0 -0
  1053. /package/dist/{property → types/property}/index.d.cts +0 -0
  1054. /package/dist/{property → types/property}/index.d.ts +0 -0
  1055. /package/dist/{sample-data → types/sample-data}/index.d.cts +0 -0
  1056. /package/dist/{sample-data → types/sample-data}/index.d.ts +0 -0
  1057. /package/dist/{swedish-address-DNC3ftRF.d.cts → types/swedish-address-DNC3ftRF.d.cts} +0 -0
  1058. /package/dist/{swedish-address-GMzjqgxb.d.ts → types/swedish-address-GMzjqgxb.d.ts} +0 -0
  1059. /package/dist/{swedish-bank-account-holder-name-BFJ8h1aO.d.cts → types/swedish-bank-account-holder-name-BFJ8h1aO.d.cts} +0 -0
  1060. /package/dist/{swedish-bank-account-holder-name-CAAru07F.d.ts → types/swedish-bank-account-holder-name-CAAru07F.d.ts} +0 -0
  1061. /package/dist/{swedish-municipality-DlUS7g7h.d.cts → types/swedish-municipality-DlUS7g7h.d.cts} +0 -0
  1062. /package/dist/{swedish-municipality-nDRHYRAd.d.ts → types/swedish-municipality-nDRHYRAd.d.ts} +0 -0
  1063. /package/dist/{swedish-organization-name-D7NvERxA.d.cts → types/swedish-organization-name-D7NvERxA.d.cts} +0 -0
  1064. /package/dist/{swedish-organization-name-rR0Q836C.d.ts → types/swedish-organization-name-rR0Q836C.d.ts} +0 -0
  1065. /package/dist/{swedish-organization-number-Bcj7V_lh.d.cts → types/swedish-organization-number-Bcj7V_lh.d.cts} +0 -0
  1066. /package/dist/{swedish-organization-number-DM8dpXwR.d.ts → types/swedish-organization-number-DM8dpXwR.d.ts} +0 -0
  1067. /package/dist/{swedish-organization-type-CZOdETwG.d.cts → types/swedish-organization-type-CZOdETwG.d.cts} +0 -0
  1068. /package/dist/{swedish-organization-type-CZOdETwG.d.ts → types/swedish-organization-type-CZOdETwG.d.ts} +0 -0
  1069. /package/dist/{swedish-personal-identity-number-BiIg4io3.d.ts → types/swedish-personal-identity-number-BiIg4io3.d.ts} +0 -0
  1070. /package/dist/{swedish-personal-identity-number-Cp9Coz55.d.cts → types/swedish-personal-identity-number-Cp9Coz55.d.cts} +0 -0
  1071. /package/dist/{swedish-property-designation-BM-gdd9x.d.ts → types/swedish-property-designation-BM-gdd9x.d.ts} +0 -0
  1072. /package/dist/{swedish-property-designation-BaHXufqV.d.cts → types/swedish-property-designation-BaHXufqV.d.cts} +0 -0
  1073. /package/dist/{swedish-sni-code-Ccsswpni.d.ts → types/swedish-sni-code-Ccsswpni.d.ts} +0 -0
  1074. /package/dist/{swedish-sni-code-CuJFyM6l.d.cts → types/swedish-sni-code-CuJFyM6l.d.cts} +0 -0
  1075. /package/dist/{swedish-swish-number-CL6Gx_h3.d.cts → types/swedish-swish-number-CL6Gx_h3.d.cts} +0 -0
  1076. /package/dist/{swedish-swish-number-DDG3mNDg.d.ts → types/swedish-swish-number-DDG3mNDg.d.ts} +0 -0
  1077. /package/dist/{text-candidate-qg2bD9PY.d.cts → types/text-candidate-qg2bD9PY.d.cts} +0 -0
  1078. /package/dist/{text-candidate-qg2bD9PY.d.ts → types/text-candidate-qg2bD9PY.d.ts} +0 -0
  1079. /package/dist/{validation → types/validation}/index.d.cts +0 -0
  1080. /package/dist/{validation → types/validation}/index.d.ts +0 -0
  1081. /package/dist/{web → types/web}/index.d.cts +0 -0
  1082. /package/dist/{web → types/web}/index.d.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/vehicle/energy-consumption.ts"],
4
+ "sourcesContent": ["import { Decimal } from \"../internal/decimal.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { tryParseNumberOnly } from \"../internal/measurement-unit-parser.js\";\nimport { formatQuantityDecimal } from \"../internal/quantity.js\";\nimport type { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\n/** Options for {@link EnergyConsumption.format} and {@link EnergyConsumption.normalize}. */\nexport interface EnergyConsumptionFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\nconst KILOMETRES_PER_MILE = Decimal.parse(\"1.609344\")!;\nconst HUNDRED = Decimal.parse(\"100\")!;\nconst TEN = Decimal.parse(\"10\")!;\nconst CONVERSION_PRECISION = 6;\n\nconst PATTERN =\n /^\\s*([0-9][0-9 .,]*[0-9]|[0-9])\\s*(kWh\\/100\\s*km|kWh\\/km|Wh\\/km|mi\\/kWh|miles\\/kWh|kWh\\/mi|kWh\\/mile)\\s*$/iu;\n\nconst SCAN_PATTERN =\n /(?<![\\p{L}\\p{N}_])\\d+[0-9 .,]*\\s*(?:kWh\\/100\\s*km|kWh\\/km|Wh\\/km|mi\\/kWh|miles\\/kWh|kWh\\/mi|kWh\\/mile)(?![\\p{L}\\p{N}_])/giu;\n\n/**\n * Electric vehicle energy consumption (`elf\u00F6rbrukning`), held as kWh per 100 km.\n * Accepts `kWh/100km`, `kWh/km`, `Wh/km` and the US `mi/kWh` and `kWh/mi`; a bare\n * number is read as kWh per 100 km.\n *\n * Sources:\n * - https://en.wikipedia.org/wiki/Fuel_economy_in_electric_vehicles\n * - https://www.energimyndigheten.se/\n */\nexport class EnergyConsumption {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Energy Consumption\",\n localizedName: \"Elf\u00F6rbrukning\",\n emoji: \"\uD83D\uDD0C\",\n sources: Object.freeze([\n \"https://en.wikipedia.org/wiki/Fuel_economy_in_electric_vehicles\",\n \"https://www.energimyndigheten.se/\",\n ]),\n });\n\n /** Display form preserving the parsed unit, e.g. `150 Wh/km`. */\n readonly value: string;\n\n /** The unit the value was parsed from, e.g. `kWh/100km` or `mi/kWh`. */\n readonly originalUnit: string;\n\n private readonly exactKwhPer100Km: Decimal;\n\n private constructor(kwhPer100Km: Decimal, displayUnit: string, value: string) {\n this.exactKwhPer100Km = kwhPer100Km;\n this.originalUnit = displayUnit;\n this.value = value;\n }\n\n /** Consumption in kilowatt-hours per 100 km, e.g. `15` for a typical EV. */\n get kwhPer100Km(): number {\n return this.exactKwhPer100Km.toNumber();\n }\n\n /** Consumption in kilowatt-hours per km, e.g. `0.15` for 15 kWh/100km. */\n get kwhPerKm(): number {\n return round(this.exactKwhPer100Km.dividedBy(HUNDRED)).toNumber();\n }\n\n /** Consumption in watt-hours per km, e.g. `150` for 15 kWh/100km. */\n get whPerKm(): number {\n return round(this.exactKwhPer100Km.times(TEN)).toNumber();\n }\n\n /** Energy economy in US miles per kilowatt-hour, e.g. `4.13` for 15 kWh/100km. */\n get milesPerKwh(): number {\n if (this.exactKwhPer100Km.compareTo(Decimal.zero) <= 0) return 0;\n return round(HUNDRED.dividedBy(this.exactKwhPer100Km.times(KILOMETRES_PER_MILE))).toNumber();\n }\n\n /** Consumption in kilowatt-hours per mile, e.g. `0.241` for 15 kWh/100km. */\n get kwhPerMile(): number {\n return round(this.exactKwhPer100Km.times(KILOMETRES_PER_MILE).dividedBy(HUNDRED)).toNumber();\n }\n\n static fromKwhPer100Km(value: number | Decimal): EnergyConsumption {\n const amount = positive(value);\n return new EnergyConsumption(amount, \"kWh/100km\", `${formatQuantityDecimal(amount)} kWh/100km`);\n }\n\n static fromWhPerKm(value: number | Decimal): EnergyConsumption {\n const amount = positive(value);\n return new EnergyConsumption(\n round(amount.dividedBy(TEN)),\n \"Wh/km\",\n `${formatQuantityDecimal(amount)} Wh/km`,\n );\n }\n\n static fromKwhPerKm(value: number | Decimal): EnergyConsumption {\n const amount = positive(value);\n return new EnergyConsumption(\n round(amount.times(HUNDRED)),\n \"kWh/km\",\n `${formatQuantityDecimal(amount)} kWh/km`,\n );\n }\n\n static fromMilesPerKwh(value: number | Decimal): EnergyConsumption {\n const amount = positive(value);\n return new EnergyConsumption(\n round(HUNDRED.dividedBy(amount.times(KILOMETRES_PER_MILE))),\n \"mi/kWh\",\n `${formatQuantityDecimal(amount)} mi/kWh`,\n );\n }\n\n static fromKwhPerMile(value: number | Decimal): EnergyConsumption {\n const amount = positive(value);\n return new EnergyConsumption(\n round(amount.times(HUNDRED).dividedBy(KILOMETRES_PER_MILE)),\n \"kWh/mi\",\n `${formatQuantityDecimal(amount)} kWh/mi`,\n );\n }\n\n private static fromUnit(amount: Decimal, unitRaw: string): EnergyConsumption | null {\n const unit = unitRaw.toLowerCase().replaceAll(\" \", \"\");\n\n switch (unit) {\n case \"kwh/100km\":\n return new EnergyConsumption(\n amount,\n \"kWh/100km\",\n `${formatQuantityDecimal(amount)} kWh/100km`,\n );\n case \"kwh/km\":\n return new EnergyConsumption(\n round(amount.times(HUNDRED)),\n \"kWh/km\",\n `${formatQuantityDecimal(amount)} kWh/km`,\n );\n case \"wh/km\":\n return new EnergyConsumption(\n round(amount.dividedBy(TEN)),\n \"Wh/km\",\n `${formatQuantityDecimal(amount)} Wh/km`,\n );\n case \"mi/kwh\":\n case \"miles/kwh\":\n return new EnergyConsumption(\n round(HUNDRED.dividedBy(amount.times(KILOMETRES_PER_MILE))),\n \"mi/kWh\",\n `${formatQuantityDecimal(amount)} mi/kWh`,\n );\n case \"kwh/mi\":\n case \"kwh/mile\":\n return new EnergyConsumption(\n round(amount.times(HUNDRED).dividedBy(KILOMETRES_PER_MILE)),\n \"kWh/mi\",\n `${formatQuantityDecimal(amount)} kWh/mi`,\n );\n default:\n return null;\n }\n }\n\n static tryParse(input: string | null | undefined): EnergyConsumption | null {\n if (input == null || input.trim().length === 0) return null;\n const trimmed = sanitizeInput(input).trim();\n\n const match = PATTERN.exec(trimmed);\n if (match !== null) {\n const amount = tryParseNumberOnly(match[1]!);\n if (amount === null || amount.compareTo(Decimal.zero) <= 0) return null;\n return EnergyConsumption.fromUnit(amount, match[2]!);\n }\n\n const bare = tryParseNumberOnly(trimmed);\n if (bare === null || bare.compareTo(Decimal.zero) <= 0) return null;\n return new EnergyConsumption(bare, \"kWh/100km\", `${formatQuantityDecimal(bare)} kWh/100km`);\n }\n\n static parse(input: string): EnergyConsumption {\n const result = EnergyConsumption.tryParse(input);\n if (result === null) throw new Error(\"Invalid energy consumption.\");\n return result;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EnergyConsumption.tryParse(input) !== null;\n }\n\n /** Returns the display form in the parsed unit, e.g. `4 mi/kWh`. */\n static format(\n input: string | null | undefined,\n options?: EnergyConsumptionFormatOptions,\n ): string | null {\n const parsed = EnergyConsumption.tryParse(input);\n if (parsed !== null) return parsed.value;\n return fallback(input, options);\n }\n\n /** Returns the value in kWh/100km, e.g. `15 kWh/100km`. */\n static normalize(\n input: string | null | undefined,\n options?: EnergyConsumptionFormatOptions,\n ): string | null {\n const parsed = EnergyConsumption.tryParse(input);\n if (parsed !== null) return parsed.toNormalizedString();\n return fallback(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EnergyConsumption.normalize(input) === input;\n }\n\n /** Finds energy consumption values in unstructured text, e.g. `150 Wh/km`. */\n static findCandidatesInText(text: string): readonly TextCandidate<EnergyConsumption>[] {\n if (!text) return [];\n\n const out: TextCandidate<EnergyConsumption>[] = [];\n const pattern = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text)) !== null) {\n const value = EnergyConsumption.tryParse(match[0]);\n if (value === null) continue;\n out.push(\n new TextCandidate<EnergyConsumption>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EnergyConsumption\",\n category: TextCandidateCategory.Vehicle,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskEnergyConsumption(value),\n confidence: TextMatchConfidence.Medium,\n value,\n }),\n );\n }\n\n return out;\n }\n\n /** Returns the value in kWh/100km, e.g. `15 kWh/100km`. */\n toNormalizedString(): string {\n return `${formatQuantityDecimal(this.exactKwhPer100Km)} kWh/100km`;\n }\n\n toString(): string {\n return this.value;\n }\n\n equals(other: EnergyConsumption | null | undefined): boolean {\n return other != null && this.exactKwhPer100Km.equals(other.exactKwhPer100Km);\n }\n\n compareTo(other: EnergyConsumption | null | undefined): number {\n if (other == null) return 1;\n return this.exactKwhPer100Km.compareTo(other.exactKwhPer100Km);\n }\n}\n\n/** Returns a masked energy consumption, e.g. `15 kWh/100km` becomes `*** kWh/100km`. */\nexport function maskEnergyConsumption(consumption: EnergyConsumption): string {\n const separator = consumption.value.indexOf(\" \");\n if (separator < 0) return \"*\".repeat(consumption.value.length);\n return `*** ${consumption.value.slice(separator + 1)}`;\n}\n\nfunction round(value: Decimal): Decimal {\n return value.round(CONVERSION_PRECISION, \"half-even\");\n}\n\nfunction positive(value: number | Decimal): Decimal {\n const amount = value instanceof Decimal ? value : Decimal.fromNumber(value);\n if (amount === null) throw new Error(`Value cannot be represented as a consumption: ${value}`);\n if (amount.compareTo(Decimal.zero) <= 0) throw new Error(\"Value must be positive.\");\n return amount;\n}\n\nfunction fallback(\n input: string | null | undefined,\n options?: EnergyConsumptionFormatOptions,\n): string | null {\n if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,149 @@
1
+ import { Decimal } from "../internal/decimal.js";
2
+ import { sanitizeInput } from "../internal/input-sanitization.js";
3
+ import { tryParseNumberOnly } from "../internal/measurement-unit-parser.js";
4
+ import { formatQuantityDecimal } from "../internal/quantity.js";
5
+ import { Volume } from "../measurement/volume.js";
6
+ import { VolumeUnit } from "../measurement/volume-unit.js";
7
+ class EngineDisplacement {
8
+ static typeInfo = Object.freeze({
9
+ englishName: "Engine Displacement",
10
+ localizedName: "Motorvolym",
11
+ emoji: "\u{1F529}",
12
+ sources: Object.freeze([])
13
+ });
14
+ /** The underlying volume. */
15
+ displacement;
16
+ /** Display form preserving the parsed unit, e.g. `1998 mL`. */
17
+ value;
18
+ constructor(displacement, displayValue) {
19
+ this.displacement = displacement;
20
+ this.value = displayValue ?? displacement.toString();
21
+ }
22
+ /** Displacement in cubic centimetres (cc), which are millilitres. */
23
+ get cubicCentimeters() {
24
+ return this.displacement.milliliters;
25
+ }
26
+ /** Displacement in litres. */
27
+ get liters() {
28
+ return this.displacement.liters;
29
+ }
30
+ /** Creates a displacement from a value and volume unit. The value must be positive. */
31
+ static create(value, unit) {
32
+ const amount = value instanceof Decimal ? value : decimalOf(value);
33
+ if (amount.compareTo(Decimal.zero) <= 0) {
34
+ throw new Error("Engine displacement must be positive.");
35
+ }
36
+ return new EngineDisplacement(Volume.create(amount, unit));
37
+ }
38
+ static fromCubicCentimeters(value) {
39
+ return EngineDisplacement.create(value, VolumeUnit.Milliliter);
40
+ }
41
+ static fromLiters(value) {
42
+ return EngineDisplacement.create(value, VolumeUnit.Liter);
43
+ }
44
+ static tryParse(input) {
45
+ if (input == null || input.trim().length === 0) return null;
46
+ const trimmed = sanitizeInput(input).trim();
47
+ const bare = tryParseNumberOnly(trimmed);
48
+ if (bare !== null) {
49
+ if (bare.compareTo(Decimal.zero) <= 0) return null;
50
+ return new EngineDisplacement(
51
+ Volume.fromMilliliters(bare),
52
+ `${formatQuantityDecimal(bare)} mL`
53
+ );
54
+ }
55
+ if (trimmed.toLowerCase().endsWith("cc")) {
56
+ const amount = tryParseNumberOnly(trimmed.slice(0, -2).trim());
57
+ if (amount !== null && amount.compareTo(Decimal.zero) > 0) {
58
+ return new EngineDisplacement(
59
+ Volume.fromMilliliters(amount),
60
+ `${formatQuantityDecimal(amount)} mL`
61
+ );
62
+ }
63
+ }
64
+ const parsed = Volume.tryParse(trimmed);
65
+ if (parsed === null || parsed.liters <= 0) return null;
66
+ return new EngineDisplacement(parsed);
67
+ }
68
+ static parse(input) {
69
+ const result = EngineDisplacement.tryParse(input);
70
+ if (result === null) throw new Error("Invalid engine displacement.");
71
+ return result;
72
+ }
73
+ static isValid(input) {
74
+ return EngineDisplacement.tryParse(input) !== null;
75
+ }
76
+ /** Returns the display form, e.g. `1998 mL`. Returns `null` when the input is invalid. */
77
+ static format(input, options) {
78
+ const parsed = EngineDisplacement.tryParse(input);
79
+ if (parsed !== null) {
80
+ if (options?.unit !== void 0 || options?.decimals !== void 0) {
81
+ return parsed.displacement.toStringInUnit(
82
+ options.unit ?? parsed.displacement.originalUnit,
83
+ options.decimals
84
+ );
85
+ }
86
+ return parsed.value;
87
+ }
88
+ return fallback(input, options);
89
+ }
90
+ /** Returns the value in litres, e.g. `1.998 L`. Returns `null` when the input is invalid. */
91
+ static normalize(input, options) {
92
+ const parsed = EngineDisplacement.tryParse(input);
93
+ if (parsed !== null) return parsed.displacement.toNormalizedString();
94
+ return fallback(input, options);
95
+ }
96
+ static isNormalized(input) {
97
+ return input != null && EngineDisplacement.normalize(input) === input;
98
+ }
99
+ toNormalizedString() {
100
+ return this.displacement.toNormalizedString();
101
+ }
102
+ toString() {
103
+ return this.value;
104
+ }
105
+ /** Returns the value in the most readable metric unit, e.g. `2 L` rather than `2000 mL`. */
106
+ toNaturalString(decimals) {
107
+ return this.displacement.toNaturalString(decimals);
108
+ }
109
+ plus(other) {
110
+ return new EngineDisplacement(this.displacement.plus(other.displacement));
111
+ }
112
+ minus(other) {
113
+ return new EngineDisplacement(this.displacement.minus(other.displacement));
114
+ }
115
+ times(factor) {
116
+ return new EngineDisplacement(
117
+ this.displacement.times(factor instanceof Decimal ? factor : decimalOf(factor))
118
+ );
119
+ }
120
+ dividedBy(divisor) {
121
+ return new EngineDisplacement(
122
+ this.displacement.dividedBy(divisor instanceof Decimal ? divisor : decimalOf(divisor))
123
+ );
124
+ }
125
+ negated() {
126
+ return new EngineDisplacement(this.displacement.negated());
127
+ }
128
+ equals(other) {
129
+ return other != null && this.displacement.equals(other.displacement);
130
+ }
131
+ compareTo(other) {
132
+ if (other == null) return 1;
133
+ return this.displacement.compareTo(other.displacement);
134
+ }
135
+ }
136
+ function fallback(input, options) {
137
+ if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;
138
+ const trimmed = input.trim();
139
+ return trimmed.length > 0 ? trimmed : null;
140
+ }
141
+ function decimalOf(value) {
142
+ const parsed = Decimal.fromNumber(value);
143
+ if (parsed === null) throw new Error(`Value cannot be represented as a displacement: ${value}`);
144
+ return parsed;
145
+ }
146
+ export {
147
+ EngineDisplacement
148
+ };
149
+ //# sourceMappingURL=engine-displacement.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/vehicle/engine-displacement.ts"],
4
+ "sourcesContent": ["import { Decimal } from \"../internal/decimal.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { tryParseNumberOnly } from \"../internal/measurement-unit-parser.js\";\nimport { formatQuantityDecimal } from \"../internal/quantity.js\";\nimport { Volume } from \"../measurement/volume.js\";\nimport { VolumeUnit } from \"../measurement/volume-unit.js\";\nimport type { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\n\n/** Options for {@link EngineDisplacement.format} and {@link EngineDisplacement.normalize}. */\nexport interface EngineDisplacementFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n /** Convert to this unit instead of preserving the parsed one. */\n unit?: VolumeUnit;\n /** Round to this many fractional digits, away from zero. */\n decimals?: number;\n}\n\n/**\n * Engine displacement (`motorvolym` / `slagvolym`), e.g. `1998 mL` or `2.0 L`.\n * A bare number is read as cubic centimetres, which are the same as millilitres.\n */\nexport class EngineDisplacement {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Engine Displacement\",\n localizedName: \"Motorvolym\",\n emoji: \"\uD83D\uDD29\",\n sources: Object.freeze([]),\n });\n\n /** The underlying volume. */\n readonly displacement: Volume;\n\n /** Display form preserving the parsed unit, e.g. `1998 mL`. */\n readonly value: string;\n\n private constructor(displacement: Volume, displayValue?: string) {\n this.displacement = displacement;\n this.value = displayValue ?? displacement.toString();\n }\n\n /** Displacement in cubic centimetres (cc), which are millilitres. */\n get cubicCentimeters(): number {\n return this.displacement.milliliters;\n }\n\n /** Displacement in litres. */\n get liters(): number {\n return this.displacement.liters;\n }\n\n /** Creates a displacement from a value and volume unit. The value must be positive. */\n static create(value: number | Decimal, unit: VolumeUnit): EngineDisplacement {\n const amount = value instanceof Decimal ? value : decimalOf(value);\n if (amount.compareTo(Decimal.zero) <= 0) {\n throw new Error(\"Engine displacement must be positive.\");\n }\n return new EngineDisplacement(Volume.create(amount, unit));\n }\n\n static fromCubicCentimeters(value: number | Decimal): EngineDisplacement {\n return EngineDisplacement.create(value, VolumeUnit.Milliliter);\n }\n\n static fromLiters(value: number | Decimal): EngineDisplacement {\n return EngineDisplacement.create(value, VolumeUnit.Liter);\n }\n\n static tryParse(input: string | null | undefined): EngineDisplacement | null {\n if (input == null || input.trim().length === 0) return null;\n const trimmed = sanitizeInput(input).trim();\n\n const bare = tryParseNumberOnly(trimmed);\n if (bare !== null) {\n if (bare.compareTo(Decimal.zero) <= 0) return null;\n return new EngineDisplacement(\n Volume.fromMilliliters(bare),\n `${formatQuantityDecimal(bare)} mL`,\n );\n }\n\n // `cc` is not a volume unit symbol, but it is the conventional spelling here.\n if (trimmed.toLowerCase().endsWith(\"cc\")) {\n const amount = tryParseNumberOnly(trimmed.slice(0, -2).trim());\n if (amount !== null && amount.compareTo(Decimal.zero) > 0) {\n return new EngineDisplacement(\n Volume.fromMilliliters(amount),\n `${formatQuantityDecimal(amount)} mL`,\n );\n }\n }\n\n const parsed = Volume.tryParse(trimmed);\n if (parsed === null || parsed.liters <= 0) return null;\n return new EngineDisplacement(parsed);\n }\n\n static parse(input: string): EngineDisplacement {\n const result = EngineDisplacement.tryParse(input);\n if (result === null) throw new Error(\"Invalid engine displacement.\");\n return result;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EngineDisplacement.tryParse(input) !== null;\n }\n\n /** Returns the display form, e.g. `1998 mL`. Returns `null` when the input is invalid. */\n static format(\n input: string | null | undefined,\n options?: EngineDisplacementFormatOptions,\n ): string | null {\n const parsed = EngineDisplacement.tryParse(input);\n if (parsed !== null) {\n if (options?.unit !== undefined || options?.decimals !== undefined) {\n return parsed.displacement.toStringInUnit(\n options.unit ?? parsed.displacement.originalUnit,\n options.decimals,\n );\n }\n return parsed.value;\n }\n return fallback(input, options);\n }\n\n /** Returns the value in litres, e.g. `1.998 L`. Returns `null` when the input is invalid. */\n static normalize(\n input: string | null | undefined,\n options?: EngineDisplacementFormatOptions,\n ): string | null {\n const parsed = EngineDisplacement.tryParse(input);\n if (parsed !== null) return parsed.displacement.toNormalizedString();\n return fallback(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EngineDisplacement.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.displacement.toNormalizedString();\n }\n\n toString(): string {\n return this.value;\n }\n\n /** Returns the value in the most readable metric unit, e.g. `2 L` rather than `2000 mL`. */\n toNaturalString(decimals?: number): string {\n return this.displacement.toNaturalString(decimals);\n }\n\n plus(other: EngineDisplacement): EngineDisplacement {\n return new EngineDisplacement(this.displacement.plus(other.displacement));\n }\n\n minus(other: EngineDisplacement): EngineDisplacement {\n return new EngineDisplacement(this.displacement.minus(other.displacement));\n }\n\n times(factor: number | Decimal): EngineDisplacement {\n return new EngineDisplacement(\n this.displacement.times(factor instanceof Decimal ? factor : decimalOf(factor)),\n );\n }\n\n dividedBy(divisor: number | Decimal): EngineDisplacement {\n return new EngineDisplacement(\n this.displacement.dividedBy(divisor instanceof Decimal ? divisor : decimalOf(divisor)),\n );\n }\n\n negated(): EngineDisplacement {\n return new EngineDisplacement(this.displacement.negated());\n }\n\n equals(other: EngineDisplacement | null | undefined): boolean {\n return other != null && this.displacement.equals(other.displacement);\n }\n\n compareTo(other: EngineDisplacement | null | undefined): number {\n if (other == null) return 1;\n return this.displacement.compareTo(other.displacement);\n }\n}\n\nfunction fallback(\n input: string | null | undefined,\n options?: EngineDisplacementFormatOptions,\n): string | null {\n if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction decimalOf(value: number): Decimal {\n const parsed = Decimal.fromNumber(value);\n if (parsed === null) throw new Error(`Value cannot be represented as a displacement: ${value}`);\n return parsed;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,191 @@
1
+ import { Decimal } from "../internal/decimal.js";
2
+ import { sanitizeInput } from "../internal/input-sanitization.js";
3
+ import { tryParseNumberOnly } from "../internal/measurement-unit-parser.js";
4
+ import { formatQuantityDecimal } from "../internal/quantity.js";
5
+ import { Power } from "../measurement/power.js";
6
+ import { PowerUnit } from "../measurement/power-unit.js";
7
+ import { TextCandidate } from "../text-scanning/text-candidate.js";
8
+ import { TextCandidateCategory } from "../text-scanning/text-candidate-category.js";
9
+ import { TextMatchConfidence } from "../text-scanning/text-match-confidence.js";
10
+ const HK_PATTERN = /^\s*([0-9][0-9 .,]*[0-9]|[0-9])\s*hk\s*$/iu;
11
+ const APPROXIMATE_PREFIX = /^(?:ca\.?\s+|circa\s+|~\s*|approx\.?\s+|ungefär\s+)/iu;
12
+ const SCAN_PATTERN = /(?<![\p{L}\p{N}_])\d+[0-9 .,]*\s*hk(?![\p{L}\p{N}_])/giu;
13
+ class EnginePower {
14
+ static typeInfo = Object.freeze({
15
+ englishName: "Engine Power",
16
+ localizedName: "Motoreffekt",
17
+ emoji: "\u{1F40E}",
18
+ sources: Object.freeze([])
19
+ });
20
+ /** The underlying power value. */
21
+ powerValue;
22
+ /** Display form preserving the parsed unit, e.g. `150 hp`. */
23
+ value;
24
+ constructor(power, displayValue) {
25
+ this.powerValue = power;
26
+ this.value = displayValue ?? power.toString();
27
+ }
28
+ get horsepower() {
29
+ return this.powerValue.horsepower;
30
+ }
31
+ get kilowatts() {
32
+ return this.powerValue.kilowatts;
33
+ }
34
+ get watts() {
35
+ return this.powerValue.watts;
36
+ }
37
+ /** Creates an engine power from a value and power unit. The value must be positive. */
38
+ static create(value, unit) {
39
+ const amount = value instanceof Decimal ? value : decimalOf(value);
40
+ if (amount.compareTo(Decimal.zero) <= 0) throw new Error("Engine power must be positive.");
41
+ return new EnginePower(Power.create(amount, unit));
42
+ }
43
+ static fromHorsepower(value) {
44
+ return EnginePower.create(value, PowerUnit.Horsepower);
45
+ }
46
+ static fromKilowatts(value) {
47
+ return EnginePower.create(value, PowerUnit.Kilowatt);
48
+ }
49
+ static fromWatts(value) {
50
+ return EnginePower.create(value, PowerUnit.Watt);
51
+ }
52
+ static tryParse(input) {
53
+ if (input == null || input.trim().length === 0) return null;
54
+ const trimmed = sanitizeInput(input).trim().replace(APPROXIMATE_PREFIX, "");
55
+ const bare = tryParseNumberOnly(trimmed);
56
+ if (bare !== null) return fromHorsepower(bare);
57
+ const hk = HK_PATTERN.exec(trimmed);
58
+ if (hk !== null) {
59
+ const amount = tryParseNumberOnly(hk[1]);
60
+ return amount === null ? null : fromHorsepower(amount);
61
+ }
62
+ const parsed = Power.tryParse(trimmed);
63
+ if (parsed === null || parsed.watts <= 0) return null;
64
+ return new EnginePower(parsed);
65
+ }
66
+ static parse(input) {
67
+ const result = EnginePower.tryParse(input);
68
+ if (result === null) throw new Error("Invalid engine power.");
69
+ return result;
70
+ }
71
+ static isValid(input) {
72
+ return EnginePower.tryParse(input) !== null;
73
+ }
74
+ /** Returns the display form, e.g. `150 hp`. Returns `null` when the input is invalid. */
75
+ static format(input, options) {
76
+ const parsed = EnginePower.tryParse(input);
77
+ if (parsed !== null) {
78
+ if (options?.unit !== void 0 || options?.decimals !== void 0) {
79
+ return parsed.powerValue.toStringInUnit(
80
+ options.unit ?? parsed.powerValue.originalUnit,
81
+ options.decimals
82
+ );
83
+ }
84
+ return parsed.value;
85
+ }
86
+ return fallback(input, options);
87
+ }
88
+ /** Returns the value in watts, e.g. `110000 W`. Returns `null` when the input is invalid. */
89
+ static normalize(input, options) {
90
+ const parsed = EnginePower.tryParse(input);
91
+ if (parsed !== null) return parsed.powerValue.toNormalizedString();
92
+ return fallback(input, options);
93
+ }
94
+ static isNormalized(input) {
95
+ return input != null && EnginePower.normalize(input) === input;
96
+ }
97
+ /**
98
+ * Finds engine power written with the Swedish `hk` suffix. Standard power units
99
+ * such as `kW` and `hp` are found by {@link Power.findCandidatesInText} instead.
100
+ */
101
+ static findCandidatesInText(text) {
102
+ if (!text) return [];
103
+ const out = [];
104
+ const pattern = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);
105
+ let match;
106
+ while ((match = pattern.exec(text)) !== null) {
107
+ const value = EnginePower.tryParse(match[0]);
108
+ if (value === null) continue;
109
+ out.push(
110
+ new TextCandidate({
111
+ startIndex: match.index,
112
+ length: match[0].length,
113
+ originalText: match[0],
114
+ typeName: "EnginePower",
115
+ category: TextCandidateCategory.Vehicle,
116
+ normalizedForm: value.toNormalizedString(),
117
+ formattedForm: value.toString(),
118
+ maskedForm: maskEnginePower(value),
119
+ confidence: TextMatchConfidence.Low,
120
+ value
121
+ })
122
+ );
123
+ }
124
+ return out;
125
+ }
126
+ toNormalizedString() {
127
+ return this.powerValue.toNormalizedString();
128
+ }
129
+ toString() {
130
+ return this.value;
131
+ }
132
+ /** Returns the value in the most readable SI unit, e.g. `1.5 kW` rather than `1500 W`. */
133
+ toNaturalString(decimals) {
134
+ return this.powerValue.toNaturalString(decimals);
135
+ }
136
+ plus(other) {
137
+ return new EnginePower(this.powerValue.plus(other.powerValue));
138
+ }
139
+ minus(other) {
140
+ return new EnginePower(this.powerValue.minus(other.powerValue));
141
+ }
142
+ times(factor) {
143
+ return new EnginePower(
144
+ this.powerValue.times(factor instanceof Decimal ? factor : decimalOf(factor))
145
+ );
146
+ }
147
+ dividedBy(divisor) {
148
+ return new EnginePower(
149
+ this.powerValue.dividedBy(divisor instanceof Decimal ? divisor : decimalOf(divisor))
150
+ );
151
+ }
152
+ negated() {
153
+ return new EnginePower(this.powerValue.negated());
154
+ }
155
+ equals(other) {
156
+ return other != null && this.powerValue.equals(other.powerValue);
157
+ }
158
+ compareTo(other) {
159
+ if (other == null) return 1;
160
+ return this.powerValue.compareTo(other.powerValue);
161
+ }
162
+ /** @internal Used by the private factories that keep a custom display form. */
163
+ static _fromDisplay(power, displayValue) {
164
+ return new EnginePower(power, displayValue);
165
+ }
166
+ }
167
+ function maskEnginePower(power) {
168
+ return `*** ${power.powerValue.originalUnit.symbol}`;
169
+ }
170
+ function fromHorsepower(amount) {
171
+ if (amount.compareTo(Decimal.zero) <= 0) return null;
172
+ return EnginePower._fromDisplay(
173
+ Power.fromHorsepower(amount),
174
+ `${formatQuantityDecimal(amount)} ${PowerUnit.Horsepower.symbol}`
175
+ );
176
+ }
177
+ function fallback(input, options) {
178
+ if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;
179
+ const trimmed = input.trim();
180
+ return trimmed.length > 0 ? trimmed : null;
181
+ }
182
+ function decimalOf(value) {
183
+ const parsed = Decimal.fromNumber(value);
184
+ if (parsed === null) throw new Error(`Value cannot be represented as a power: ${value}`);
185
+ return parsed;
186
+ }
187
+ export {
188
+ EnginePower,
189
+ maskEnginePower
190
+ };
191
+ //# sourceMappingURL=engine-power.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/vehicle/engine-power.ts"],
4
+ "sourcesContent": ["import { Decimal } from \"../internal/decimal.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { tryParseNumberOnly } from \"../internal/measurement-unit-parser.js\";\nimport { formatQuantityDecimal } from \"../internal/quantity.js\";\nimport { Power } from \"../measurement/power.js\";\nimport { PowerUnit } from \"../measurement/power-unit.js\";\nimport type { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\n/** Options for {@link EnginePower.format} and {@link EnginePower.normalize}. */\nexport interface EnginePowerFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n /** Convert to this unit instead of preserving the parsed one. */\n unit?: PowerUnit;\n /** Round to this many fractional digits, away from zero. */\n decimals?: number;\n}\n\nconst HK_PATTERN = /^\\s*([0-9][0-9 .,]*[0-9]|[0-9])\\s*hk\\s*$/iu;\nconst APPROXIMATE_PREFIX = /^(?:ca\\.?\\s+|circa\\s+|~\\s*|approx\\.?\\s+|ungef\u00E4r\\s+)/iu;\nconst SCAN_PATTERN = /(?<![\\p{L}\\p{N}_])\\d+[0-9 .,]*\\s*hk(?![\\p{L}\\p{N}_])/giu;\n\n/**\n * Engine power output (`motoreffekt`), e.g. `150 hp`, `110 kW` or the Swedish\n * `150 hk`. A bare number is read as horsepower, and a leading `ca` or `~` is\n * ignored.\n */\nexport class EnginePower {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Engine Power\",\n localizedName: \"Motoreffekt\",\n emoji: \"\uD83D\uDC0E\",\n sources: Object.freeze([]),\n });\n\n /** The underlying power value. */\n readonly powerValue: Power;\n\n /** Display form preserving the parsed unit, e.g. `150 hp`. */\n readonly value: string;\n\n private constructor(power: Power, displayValue?: string) {\n this.powerValue = power;\n this.value = displayValue ?? power.toString();\n }\n\n get horsepower(): number {\n return this.powerValue.horsepower;\n }\n\n get kilowatts(): number {\n return this.powerValue.kilowatts;\n }\n\n get watts(): number {\n return this.powerValue.watts;\n }\n\n /** Creates an engine power from a value and power unit. The value must be positive. */\n static create(value: number | Decimal, unit: PowerUnit): EnginePower {\n const amount = value instanceof Decimal ? value : decimalOf(value);\n if (amount.compareTo(Decimal.zero) <= 0) throw new Error(\"Engine power must be positive.\");\n return new EnginePower(Power.create(amount, unit));\n }\n\n static fromHorsepower(value: number | Decimal): EnginePower {\n return EnginePower.create(value, PowerUnit.Horsepower);\n }\n\n static fromKilowatts(value: number | Decimal): EnginePower {\n return EnginePower.create(value, PowerUnit.Kilowatt);\n }\n\n static fromWatts(value: number | Decimal): EnginePower {\n return EnginePower.create(value, PowerUnit.Watt);\n }\n\n static tryParse(input: string | null | undefined): EnginePower | null {\n if (input == null || input.trim().length === 0) return null;\n const trimmed = sanitizeInput(input).trim().replace(APPROXIMATE_PREFIX, \"\");\n\n const bare = tryParseNumberOnly(trimmed);\n if (bare !== null) return fromHorsepower(bare);\n\n // `hk` is Swedish for horsepower and is not a symbol the Power unit index knows.\n const hk = HK_PATTERN.exec(trimmed);\n if (hk !== null) {\n const amount = tryParseNumberOnly(hk[1]!);\n return amount === null ? null : fromHorsepower(amount);\n }\n\n const parsed = Power.tryParse(trimmed);\n if (parsed === null || parsed.watts <= 0) return null;\n return new EnginePower(parsed);\n }\n\n static parse(input: string): EnginePower {\n const result = EnginePower.tryParse(input);\n if (result === null) throw new Error(\"Invalid engine power.\");\n return result;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EnginePower.tryParse(input) !== null;\n }\n\n /** Returns the display form, e.g. `150 hp`. Returns `null` when the input is invalid. */\n static format(\n input: string | null | undefined,\n options?: EnginePowerFormatOptions,\n ): string | null {\n const parsed = EnginePower.tryParse(input);\n if (parsed !== null) {\n if (options?.unit !== undefined || options?.decimals !== undefined) {\n return parsed.powerValue.toStringInUnit(\n options.unit ?? parsed.powerValue.originalUnit,\n options.decimals,\n );\n }\n return parsed.value;\n }\n return fallback(input, options);\n }\n\n /** Returns the value in watts, e.g. `110000 W`. Returns `null` when the input is invalid. */\n static normalize(\n input: string | null | undefined,\n options?: EnginePowerFormatOptions,\n ): string | null {\n const parsed = EnginePower.tryParse(input);\n if (parsed !== null) return parsed.powerValue.toNormalizedString();\n return fallback(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EnginePower.normalize(input) === input;\n }\n\n /**\n * Finds engine power written with the Swedish `hk` suffix. Standard power units\n * such as `kW` and `hp` are found by {@link Power.findCandidatesInText} instead.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<EnginePower>[] {\n if (!text) return [];\n\n const out: TextCandidate<EnginePower>[] = [];\n const pattern = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text)) !== null) {\n const value = EnginePower.tryParse(match[0]);\n if (value === null) continue;\n out.push(\n new TextCandidate<EnginePower>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EnginePower\",\n category: TextCandidateCategory.Vehicle,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskEnginePower(value),\n confidence: TextMatchConfidence.Low,\n value,\n }),\n );\n }\n\n return out;\n }\n\n toNormalizedString(): string {\n return this.powerValue.toNormalizedString();\n }\n\n toString(): string {\n return this.value;\n }\n\n /** Returns the value in the most readable SI unit, e.g. `1.5 kW` rather than `1500 W`. */\n toNaturalString(decimals?: number): string {\n return this.powerValue.toNaturalString(decimals);\n }\n\n plus(other: EnginePower): EnginePower {\n return new EnginePower(this.powerValue.plus(other.powerValue));\n }\n\n minus(other: EnginePower): EnginePower {\n return new EnginePower(this.powerValue.minus(other.powerValue));\n }\n\n times(factor: number | Decimal): EnginePower {\n return new EnginePower(\n this.powerValue.times(factor instanceof Decimal ? factor : decimalOf(factor)),\n );\n }\n\n dividedBy(divisor: number | Decimal): EnginePower {\n return new EnginePower(\n this.powerValue.dividedBy(divisor instanceof Decimal ? divisor : decimalOf(divisor)),\n );\n }\n\n negated(): EnginePower {\n return new EnginePower(this.powerValue.negated());\n }\n\n equals(other: EnginePower | null | undefined): boolean {\n return other != null && this.powerValue.equals(other.powerValue);\n }\n\n compareTo(other: EnginePower | null | undefined): number {\n if (other == null) return 1;\n return this.powerValue.compareTo(other.powerValue);\n }\n\n /** @internal Used by the private factories that keep a custom display form. */\n static _fromDisplay(power: Power, displayValue: string): EnginePower {\n return new EnginePower(power, displayValue);\n }\n}\n\n/** Returns a masked engine power, e.g. `150 hp` becomes `*** hp`. */\nexport function maskEnginePower(power: EnginePower): string {\n return `*** ${power.powerValue.originalUnit.symbol}`;\n}\n\nfunction fromHorsepower(amount: Decimal): EnginePower | null {\n if (amount.compareTo(Decimal.zero) <= 0) return null;\n return EnginePower._fromDisplay(\n Power.fromHorsepower(amount),\n `${formatQuantityDecimal(amount)} ${PowerUnit.Horsepower.symbol}`,\n );\n}\n\nfunction fallback(\n input: string | null | undefined,\n options?: EnginePowerFormatOptions,\n): string | null {\n if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction decimalOf(value: number): Decimal {\n const parsed = Decimal.fromNumber(value);\n if (parsed === null) throw new Error(`Value cannot be represented as a power: ${value}`);\n return parsed;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,176 @@
1
+ import { TextCandidate } from "../text-scanning/text-candidate.js";
2
+ import { TextCandidateCategory } from "../text-scanning/text-candidate-category.js";
3
+ import { TextMatchConfidence } from "../text-scanning/text-match-confidence.js";
4
+ const MAX_COUNTRY_CODE = 58;
5
+ const APPROVAL_PATTERN = /^[eE](\d{1,2})\*([0-9/]+)\*(\d+)\*(\d+)$/u;
6
+ const SCAN_PATTERN = /(?<![\p{L}\p{N}_])[eE]\d{1,2}\*[0-9/]+\*\d+\*\d+(?![\p{L}\p{N}_])/gu;
7
+ const E_MARK_COUNTRIES = Object.freeze({
8
+ 1: "Germany",
9
+ 2: "France",
10
+ 3: "Italy",
11
+ 4: "Netherlands",
12
+ 5: "Sweden",
13
+ 6: "Belgium",
14
+ 7: "Hungary",
15
+ 8: "Czech Republic",
16
+ 9: "Spain",
17
+ 10: "Serbia",
18
+ 11: "United Kingdom",
19
+ 12: "Austria",
20
+ 13: "Luxembourg",
21
+ 14: "Switzerland",
22
+ 16: "Norway",
23
+ 17: "Finland",
24
+ 18: "Denmark",
25
+ 19: "Romania",
26
+ 20: "Poland",
27
+ 21: "Portugal",
28
+ 22: "Russia",
29
+ 23: "Greece",
30
+ 24: "Ireland",
31
+ 25: "Croatia",
32
+ 26: "Slovenia",
33
+ 27: "Slovakia",
34
+ 28: "Belarus",
35
+ 29: "Estonia",
36
+ 31: "Bosnia and Herzegovina",
37
+ 32: "Latvia",
38
+ 34: "Bulgaria",
39
+ 36: "Lithuania",
40
+ 37: "Turkey",
41
+ 39: "Azerbaijan",
42
+ 40: "North Macedonia",
43
+ 42: "EU",
44
+ 43: "Japan",
45
+ 45: "Australia",
46
+ 46: "Ukraine",
47
+ 47: "South Africa",
48
+ 48: "New Zealand",
49
+ 49: "Cyprus",
50
+ 50: "Malta",
51
+ 51: "South Korea",
52
+ 52: "Malaysia",
53
+ 53: "Thailand",
54
+ 54: "Indonesia",
55
+ 56: "Montenegro",
56
+ 57: "San Marino",
57
+ 58: "Tunisia"
58
+ });
59
+ class EuTypeApprovalNumber {
60
+ static typeInfo = Object.freeze({
61
+ englishName: "EU Type Approval Number",
62
+ localizedName: "Typgodk\xE4nnandenummer",
63
+ emoji: "\u2705",
64
+ sources: Object.freeze([
65
+ "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32018R0858",
66
+ "https://unece.org/transport/vehicle-regulations",
67
+ "https://www.transportstyrelsen.se/"
68
+ ])
69
+ });
70
+ /** Canonical form, e.g. `e9*2007/46*6364*09`. */
71
+ value;
72
+ /** E-mark country code, e.g. `9` for Spain and `5` for Sweden. */
73
+ approvalCountryCode;
74
+ /** Country name for the E-mark code, or `null` when the code is unassigned. */
75
+ approvalCountryName;
76
+ /** Directive or regulation reference, e.g. `2007/46`. */
77
+ directive;
78
+ /** Type approval number, e.g. `6364`. */
79
+ typeNumber;
80
+ /** Extension or variant number, e.g. `09`. */
81
+ extension;
82
+ constructor(approvalCountryCode, directive, typeNumber, extension) {
83
+ this.approvalCountryCode = approvalCountryCode;
84
+ this.approvalCountryName = E_MARK_COUNTRIES[approvalCountryCode] ?? null;
85
+ this.directive = directive;
86
+ this.typeNumber = typeNumber;
87
+ this.extension = extension;
88
+ this.value = `e${approvalCountryCode}*${directive}*${typeNumber}*${extension}`;
89
+ }
90
+ static tryParse(input) {
91
+ if (input == null || input.trim().length === 0) return null;
92
+ const match = APPROVAL_PATTERN.exec(input.trim());
93
+ if (match === null) return null;
94
+ const countryCode = Number(match[1]);
95
+ if (countryCode < 1 || countryCode > MAX_COUNTRY_CODE) return null;
96
+ return new EuTypeApprovalNumber(countryCode, match[2], match[3], match[4]);
97
+ }
98
+ static parse(input) {
99
+ const result = EuTypeApprovalNumber.tryParse(input);
100
+ if (result === null) throw new Error("Invalid EU type-approval number.");
101
+ return result;
102
+ }
103
+ static isValid(input) {
104
+ return EuTypeApprovalNumber.tryParse(input) !== null;
105
+ }
106
+ /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */
107
+ static format(input, options) {
108
+ const parsed = EuTypeApprovalNumber.tryParse(input);
109
+ if (parsed !== null) return parsed.value;
110
+ return fallback(input, options);
111
+ }
112
+ /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */
113
+ static normalize(input, options) {
114
+ const parsed = EuTypeApprovalNumber.tryParse(input);
115
+ if (parsed !== null) return parsed.value;
116
+ return fallback(input, options);
117
+ }
118
+ static isNormalized(input) {
119
+ return input != null && EuTypeApprovalNumber.normalize(input) === input;
120
+ }
121
+ /** Finds type-approval numbers in unstructured text, e.g. `e9*2007/46*6364*09`. */
122
+ static findCandidatesInText(text) {
123
+ if (!text) return [];
124
+ const out = [];
125
+ const pattern = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);
126
+ let match;
127
+ while ((match = pattern.exec(text)) !== null) {
128
+ const value = EuTypeApprovalNumber.tryParse(match[0]);
129
+ if (value === null) continue;
130
+ out.push(
131
+ new TextCandidate({
132
+ startIndex: match.index,
133
+ length: match[0].length,
134
+ originalText: match[0],
135
+ typeName: "EuTypeApprovalNumber",
136
+ category: TextCandidateCategory.Vehicle,
137
+ normalizedForm: value.toNormalizedString(),
138
+ formattedForm: value.toString(),
139
+ maskedForm: maskEuTypeApprovalNumber(value),
140
+ confidence: TextMatchConfidence.High,
141
+ value
142
+ })
143
+ );
144
+ }
145
+ return out;
146
+ }
147
+ /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */
148
+ toNormalizedString() {
149
+ return this.value;
150
+ }
151
+ /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */
152
+ toString() {
153
+ return this.value;
154
+ }
155
+ equals(other) {
156
+ return other != null && this.value === other.value;
157
+ }
158
+ compareTo(other) {
159
+ if (other == null) return 1;
160
+ return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;
161
+ }
162
+ }
163
+ function maskEuTypeApprovalNumber(approval) {
164
+ const prefix = `e${approval.approvalCountryCode}`;
165
+ return prefix + "*".repeat(approval.value.length - prefix.length);
166
+ }
167
+ function fallback(input, options) {
168
+ if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;
169
+ const trimmed = input.trim();
170
+ return trimmed.length > 0 ? trimmed : null;
171
+ }
172
+ export {
173
+ EuTypeApprovalNumber,
174
+ maskEuTypeApprovalNumber
175
+ };
176
+ //# sourceMappingURL=eu-type-approval-number.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/vehicle/eu-type-approval-number.ts"],
4
+ "sourcesContent": ["import type { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\n\n/** Options for {@link EuTypeApprovalNumber.format} and `normalize`. */\nexport interface EuTypeApprovalNumberFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\nconst MAX_COUNTRY_CODE = 58;\n\nconst APPROVAL_PATTERN = /^[eE](\\d{1,2})\\*([0-9/]+)\\*(\\d+)\\*(\\d+)$/u;\nconst SCAN_PATTERN = /(?<![\\p{L}\\p{N}_])[eE]\\d{1,2}\\*[0-9/]+\\*\\d+\\*\\d+(?![\\p{L}\\p{N}_])/gu;\n\n/** UNECE E-mark country codes. Gaps are codes that have never been assigned. */\nconst E_MARK_COUNTRIES: Readonly<Record<number, string>> = Object.freeze({\n 1: \"Germany\",\n 2: \"France\",\n 3: \"Italy\",\n 4: \"Netherlands\",\n 5: \"Sweden\",\n 6: \"Belgium\",\n 7: \"Hungary\",\n 8: \"Czech Republic\",\n 9: \"Spain\",\n 10: \"Serbia\",\n 11: \"United Kingdom\",\n 12: \"Austria\",\n 13: \"Luxembourg\",\n 14: \"Switzerland\",\n 16: \"Norway\",\n 17: \"Finland\",\n 18: \"Denmark\",\n 19: \"Romania\",\n 20: \"Poland\",\n 21: \"Portugal\",\n 22: \"Russia\",\n 23: \"Greece\",\n 24: \"Ireland\",\n 25: \"Croatia\",\n 26: \"Slovenia\",\n 27: \"Slovakia\",\n 28: \"Belarus\",\n 29: \"Estonia\",\n 31: \"Bosnia and Herzegovina\",\n 32: \"Latvia\",\n 34: \"Bulgaria\",\n 36: \"Lithuania\",\n 37: \"Turkey\",\n 39: \"Azerbaijan\",\n 40: \"North Macedonia\",\n 42: \"EU\",\n 43: \"Japan\",\n 45: \"Australia\",\n 46: \"Ukraine\",\n 47: \"South Africa\",\n 48: \"New Zealand\",\n 49: \"Cyprus\",\n 50: \"Malta\",\n 51: \"South Korea\",\n 52: \"Malaysia\",\n 53: \"Thailand\",\n 54: \"Indonesia\",\n 56: \"Montenegro\",\n 57: \"San Marino\",\n 58: \"Tunisia\",\n});\n\n/**\n * An EU whole-vehicle type-approval number (`typgodk\u00E4nnandenummer`) such as\n * `e9*2007/46*6364*09`: the E-mark country code, the directive or regulation, the\n * type number and the extension.\n *\n * Sources:\n * - https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32018R0858\n * - https://unece.org/transport/vehicle-regulations\n * - https://www.transportstyrelsen.se/\n */\nexport class EuTypeApprovalNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"EU Type Approval Number\",\n localizedName: \"Typgodk\u00E4nnandenummer\",\n emoji: \"\u2705\",\n sources: Object.freeze([\n \"https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32018R0858\",\n \"https://unece.org/transport/vehicle-regulations\",\n \"https://www.transportstyrelsen.se/\",\n ]),\n });\n\n /** Canonical form, e.g. `e9*2007/46*6364*09`. */\n readonly value: string;\n\n /** E-mark country code, e.g. `9` for Spain and `5` for Sweden. */\n readonly approvalCountryCode: number;\n\n /** Country name for the E-mark code, or `null` when the code is unassigned. */\n readonly approvalCountryName: string | null;\n\n /** Directive or regulation reference, e.g. `2007/46`. */\n readonly directive: string;\n\n /** Type approval number, e.g. `6364`. */\n readonly typeNumber: string;\n\n /** Extension or variant number, e.g. `09`. */\n readonly extension: string;\n\n private constructor(\n approvalCountryCode: number,\n directive: string,\n typeNumber: string,\n extension: string,\n ) {\n this.approvalCountryCode = approvalCountryCode;\n this.approvalCountryName = E_MARK_COUNTRIES[approvalCountryCode] ?? null;\n this.directive = directive;\n this.typeNumber = typeNumber;\n this.extension = extension;\n this.value = `e${approvalCountryCode}*${directive}*${typeNumber}*${extension}`;\n }\n\n static tryParse(input: string | null | undefined): EuTypeApprovalNumber | null {\n if (input == null || input.trim().length === 0) return null;\n\n const match = APPROVAL_PATTERN.exec(input.trim());\n if (match === null) return null;\n\n const countryCode = Number(match[1]);\n if (countryCode < 1 || countryCode > MAX_COUNTRY_CODE) return null;\n\n return new EuTypeApprovalNumber(countryCode, match[2]!, match[3]!, match[4]!);\n }\n\n static parse(input: string): EuTypeApprovalNumber {\n const result = EuTypeApprovalNumber.tryParse(input);\n if (result === null) throw new Error(\"Invalid EU type-approval number.\");\n return result;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return EuTypeApprovalNumber.tryParse(input) !== null;\n }\n\n /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */\n static format(\n input: string | null | undefined,\n options?: EuTypeApprovalNumberFormatOptions,\n ): string | null {\n const parsed = EuTypeApprovalNumber.tryParse(input);\n if (parsed !== null) return parsed.value;\n return fallback(input, options);\n }\n\n /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */\n static normalize(\n input: string | null | undefined,\n options?: EuTypeApprovalNumberFormatOptions,\n ): string | null {\n const parsed = EuTypeApprovalNumber.tryParse(input);\n if (parsed !== null) return parsed.value;\n return fallback(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && EuTypeApprovalNumber.normalize(input) === input;\n }\n\n /** Finds type-approval numbers in unstructured text, e.g. `e9*2007/46*6364*09`. */\n static findCandidatesInText(text: string): readonly TextCandidate<EuTypeApprovalNumber>[] {\n if (!text) return [];\n\n const out: TextCandidate<EuTypeApprovalNumber>[] = [];\n const pattern = new RegExp(SCAN_PATTERN.source, SCAN_PATTERN.flags);\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text)) !== null) {\n const value = EuTypeApprovalNumber.tryParse(match[0]);\n if (value === null) continue;\n out.push(\n new TextCandidate<EuTypeApprovalNumber>({\n startIndex: match.index,\n length: match[0].length,\n originalText: match[0],\n typeName: \"EuTypeApprovalNumber\",\n category: TextCandidateCategory.Vehicle,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskEuTypeApprovalNumber(value),\n confidence: TextMatchConfidence.High,\n value,\n }),\n );\n }\n\n return out;\n }\n\n /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */\n toNormalizedString(): string {\n return this.value;\n }\n\n /** Returns the canonical number, e.g. `e9*2007/46*6364*09`. */\n toString(): string {\n return this.value;\n }\n\n equals(other: EuTypeApprovalNumber | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n\n compareTo(other: EuTypeApprovalNumber | 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/** Returns a masked approval number keeping the e-mark, e.g. `e9*****`. */\nexport function maskEuTypeApprovalNumber(approval: EuTypeApprovalNumber): string {\n const prefix = `e${approval.approvalCountryCode}`;\n return prefix + \"*\".repeat(approval.value.length - prefix.length);\n}\n\nfunction fallback(\n input: string | null | undefined,\n options?: EuTypeApprovalNumberFormatOptions,\n): string | null {\n if (options?.fallbackToTrimmedInputWhenInvalid !== true || input == null) return null;\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }