{"_id":"@budiauktioner/buildi-primitives","_rev":"4-bb1c2a9622a3e322e23182870bd36225","name":"@budiauktioner/buildi-primitives","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@budiauktioner/buildi-primitives","version":"0.1.0","keywords":["swedish","sweden","eu","iso","validation","normalization","primitives","value-object","personnummer","organisationsnummer","iban","vat","address","phone","country","language"],"author":{"name":"Budi Auktioner"},"license":"MIT","_id":"@budiauktioner/buildi-primitives@0.1.0","maintainers":[{"name":"peterorneholm","email":"peter@orneholm.com"}],"homepage":"https://github.com/BudiAuktioner/buildi-primitives#readme","bugs":{"url":"https://github.com/BudiAuktioner/buildi-primitives/issues"},"dist":{"shasum":"c01e1dcc4c566bfa7b6c0c5c8f776fc0b01f4218","tarball":"https://registry.npmjs.org/@budiauktioner/buildi-primitives/-/buildi-primitives-0.1.0.tgz","fileCount":107,"integrity":"sha512-TLCg4zJGNYiGZ+uOmTeDGCaCMLAw7fU+gQP2awwHBLu9vHCt9J/X+mCKCKVl1g7RHNq4Tg2sT9BvBNb8RDv4dg==","signatures":[{"sig":"MEYCIQCWX5BYc/+PiquBcCkOaS1kxzN4xIUC6lz8JDIcJs6Q5wIhAOV7WhQkdPYlOWsxIXCdSFIyGdij1Cs4j6Rx6QOg0aD/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16401907},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./web":{"import":{"types":"./dist/web/index.d.ts","default":"./dist/web/index.js"},"require":{"types":"./dist/web/index.d.cts","default":"./dist/web/index.cjs"}},"./person":{"import":{"types":"./dist/person/index.d.ts","default":"./dist/person/index.js"},"require":{"types":"./dist/person/index.d.cts","default":"./dist/person/index.cjs"}},"./banking":{"import":{"types":"./dist/banking/index.d.ts","default":"./dist/banking/index.js"},"require":{"types":"./dist/banking/index.d.cts","default":"./dist/banking/index.cjs"}},"./contact":{"import":{"types":"./dist/contact/index.d.ts","default":"./dist/contact/index.js"},"require":{"types":"./dist/contact/index.d.cts","default":"./dist/contact/index.cjs"}},"./finance":{"import":{"types":"./dist/finance/index.d.ts","default":"./dist/finance/index.js"},"require":{"types":"./dist/finance/index.d.cts","default":"./dist/finance/index.cjs"}},"./property":{"import":{"types":"./dist/property/index.d.ts","default":"./dist/property/index.js"},"require":{"types":"./dist/property/index.d.cts","default":"./dist/property/index.cjs"}},"./geography":{"import":{"types":"./dist/geography/index.d.ts","default":"./dist/geography/index.js"},"require":{"types":"./dist/geography/index.d.cts","default":"./dist/geography/index.cjs"}},"./validation":{"import":{"types":"./dist/validation/index.d.ts","default":"./dist/validation/index.js"},"require":{"types":"./dist/validation/index.d.cts","default":"./dist/validation/index.cjs"}},"./sample-data":{"import":{"types":"./dist/sample-data/index.d.ts","default":"./dist/sample-data/index.js"},"require":{"types":"./dist/sample-data/index.d.cts","default":"./dist/sample-data/index.cjs"}},"./organization":{"import":{"types":"./dist/organization/index.d.ts","default":"./dist/organization/index.js"},"require":{"types":"./dist/organization/index.d.cts","default":"./dist/organization/index.cjs"}},"./package.json":"./package.json","./text-scanning":{"import":{"types":"./dist/text-scanning/index.d.ts","default":"./dist/text-scanning/index.js"},"require":{"types":"./dist/text-scanning/index.d.cts","default":"./dist/text-scanning/index.cjs"}}},"gitHead":"f2f6aaf2cdfa57b10ffde007fe3e07c59293a51e","scripts":{"attw":"attw --pack . --profile node16","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","publint":"publint","release":"pnpm build && pnpm publish --access public","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"peterorneholm","email":"peter@orneholm.com"},"repository":{"url":"git+https://github.com/BudiAuktioner/buildi-primitives.git","type":"git"},"_npmVersion":"10.9.2","description":"Swedish, EU and international value-object primitives — validation, normalization, masking, and text scanning. TypeScript port of Buildi.Primitives (.NET).","directories":{},"sideEffects":["./dist/index.js","./dist/index.cjs","./dist/contact/index.js","./dist/contact/index.cjs","./dist/sample-data/index.js","./dist/sample-data/index.cjs","./dist/text-scanning/index.js","./dist/text-scanning/index.cjs"],"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","eslint":"^9.18.0","vitest":"^2.1.8","publint":"^0.3.2","prettier":"^3.4.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/node":"^22.10.7","typescript-eslint":"^8.21.0","@vitest/coverage-v8":"^2.1.8","@arethetypeswrong/cli":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/buildi-primitives_0.1.0_1786107232158_0.9693743529272758","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@budiauktioner/buildi-primitives","version":"0.1.1","keywords":["swedish","sweden","eu","iso","validation","normalization","primitives","value-object","personnummer","organisationsnummer","iban","vat","address","phone","country","language"],"author":{"name":"Budi Auktioner"},"license":"MIT","_id":"@budiauktioner/buildi-primitives@0.1.1","maintainers":[{"name":"peterorneholm","email":"peter@orneholm.com"}],"homepage":"https://github.com/budiauktioner/buildi-primitives#readme","bugs":{"url":"https://github.com/budiauktioner/buildi-primitives/issues"},"dist":{"shasum":"8c14e2f3a46fca926dbbe546752c606572be0ea7","tarball":"https://registry.npmjs.org/@budiauktioner/buildi-primitives/-/buildi-primitives-0.1.1.tgz","fileCount":107,"integrity":"sha512-QanlzEri/UWmzdzWGN3FaL1xLM74rqrFrBHllq9SYp/SBepS4pX+nLRTAhfrbUhLc5x+vkb5ocoHH7hbx3Wq0A==","signatures":[{"sig":"MEQCIAnZnaUW4HirIollhR78HyKBmoj8dPIU0FL8rOQHT2OAAiBtIimX96N00P5ppmru/GECXkdNRcyku0d0ltB052FzTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@budiauktioner%2fbuildi-primitives@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16402529},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.10"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./web":{"import":{"types":"./dist/web/index.d.ts","default":"./dist/web/index.js"},"require":{"types":"./dist/web/index.d.cts","default":"./dist/web/index.cjs"}},"./person":{"import":{"types":"./dist/person/index.d.ts","default":"./dist/person/index.js"},"require":{"types":"./dist/person/index.d.cts","default":"./dist/person/index.cjs"}},"./banking":{"import":{"types":"./dist/banking/index.d.ts","default":"./dist/banking/index.js"},"require":{"types":"./dist/banking/index.d.cts","default":"./dist/banking/index.cjs"}},"./contact":{"import":{"types":"./dist/contact/index.d.ts","default":"./dist/contact/index.js"},"require":{"types":"./dist/contact/index.d.cts","default":"./dist/contact/index.cjs"}},"./finance":{"import":{"types":"./dist/finance/index.d.ts","default":"./dist/finance/index.js"},"require":{"types":"./dist/finance/index.d.cts","default":"./dist/finance/index.cjs"}},"./property":{"import":{"types":"./dist/property/index.d.ts","default":"./dist/property/index.js"},"require":{"types":"./dist/property/index.d.cts","default":"./dist/property/index.cjs"}},"./geography":{"import":{"types":"./dist/geography/index.d.ts","default":"./dist/geography/index.js"},"require":{"types":"./dist/geography/index.d.cts","default":"./dist/geography/index.cjs"}},"./validation":{"import":{"types":"./dist/validation/index.d.ts","default":"./dist/validation/index.js"},"require":{"types":"./dist/validation/index.d.cts","default":"./dist/validation/index.cjs"}},"./sample-data":{"import":{"types":"./dist/sample-data/index.d.ts","default":"./dist/sample-data/index.js"},"require":{"types":"./dist/sample-data/index.d.cts","default":"./dist/sample-data/index.cjs"}},"./organization":{"import":{"types":"./dist/organization/index.d.ts","default":"./dist/organization/index.js"},"require":{"types":"./dist/organization/index.d.cts","default":"./dist/organization/index.cjs"}},"./package.json":"./package.json","./text-scanning":{"import":{"types":"./dist/text-scanning/index.d.ts","default":"./dist/text-scanning/index.js"},"require":{"types":"./dist/text-scanning/index.d.cts","default":"./dist/text-scanning/index.cjs"}}},"gitHead":"2bb16ca41d9961dd2d6b6a09601042848ec8f86d","scripts":{"attw":"attw --pack . --profile node16","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","publint":"publint","release":"pnpm build && pnpm publish --access public","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ea18cd75-40da-4840-9853-dfcd76029be2"}},"repository":{"url":"git+https://github.com/budiauktioner/buildi-primitives.git","type":"git"},"_npmVersion":"11.17.0","description":"Swedish, EU and international value-object primitives — validation, normalization, masking, and text scanning. TypeScript port of Buildi.Primitives (.NET).","directories":{},"sideEffects":["./dist/index.js","./dist/index.cjs","./dist/contact/index.js","./dist/contact/index.cjs","./dist/sample-data/index.js","./dist/sample-data/index.cjs","./dist/text-scanning/index.js","./dist/text-scanning/index.cjs"],"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","eslint":"^9.18.0","vitest":"^2.1.8","publint":"^0.3.2","prettier":"^3.4.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/node":"^22.10.7","typescript-eslint":"^8.21.0","@vitest/coverage-v8":"^2.1.8","@arethetypeswrong/cli":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/buildi-primitives_0.1.1_1786107589534_0.16229354796623463","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@budiauktioner/buildi-primitives","version":"0.2.0","keywords":["swedish","sweden","eu","iso","validation","normalization","primitives","value-object","personnummer","organisationsnummer","iban","vat","address","phone","country","language"],"author":{"name":"Budi Auktioner"},"license":"MIT","_id":"@budiauktioner/buildi-primitives@0.2.0","maintainers":[{"name":"peterorneholm","email":"peter@orneholm.com"}],"homepage":"https://github.com/budiauktioner/buildi-primitives#readme","bugs":{"url":"https://github.com/budiauktioner/buildi-primitives/issues"},"dist":{"shasum":"5b8ecb4030ec0b1a8b0ddf532af40abd59b34685","tarball":"https://registry.npmjs.org/@budiauktioner/buildi-primitives/-/buildi-primitives-0.2.0.tgz","fileCount":1036,"integrity":"sha512-3FMAZvGg/8GTD+ZJQc84fOpy+GImgJ/04Bn/CVuRdC8OamhS2qKNmAlN+hcPDMKoUi9o88muBZ3jPEwhmtOk6w==","signatures":[{"sig":"MEUCIQCIXootdseq9MTih/FOBo13y10s5Z067hrudpVCxW2dUgIgW1yeLsu+JZz+lIPVGrnz8lI6CETqP2aBaZTBDb9xspo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@budiauktioner%2fbuildi-primitives@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8364584},"main":"./dist/cjs/index.js","type":"module","types":"./dist/types/index.d.ts","module":"./dist/esm/index.js","engines":{"node":">=20.10"},"exports":{".":{"import":{"types":"./dist/types/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/types/index.d.cts","default":"./dist/cjs/index.js"}},"./web":{"import":{"types":"./dist/types/web/index.d.ts","default":"./dist/esm/web/index.js"},"require":{"types":"./dist/types/web/index.d.cts","default":"./dist/cjs/web/index.js"}},"./person":{"import":{"types":"./dist/types/person/index.d.ts","default":"./dist/esm/person/index.js"},"require":{"types":"./dist/types/person/index.d.cts","default":"./dist/cjs/person/index.js"}},"./banking":{"import":{"types":"./dist/types/banking/index.d.ts","default":"./dist/esm/banking/index.js"},"require":{"types":"./dist/types/banking/index.d.cts","default":"./dist/cjs/banking/index.js"}},"./contact":{"import":{"types":"./dist/types/contact/index.d.ts","default":"./dist/esm/contact/index.js"},"require":{"types":"./dist/types/contact/index.d.cts","default":"./dist/cjs/contact/index.js"}},"./finance":{"import":{"types":"./dist/types/finance/index.d.ts","default":"./dist/esm/finance/index.js"},"require":{"types":"./dist/types/finance/index.d.cts","default":"./dist/cjs/finance/index.js"}},"./product":{"import":{"types":"./dist/types/product/index.d.ts","default":"./dist/esm/product/index.js"},"require":{"types":"./dist/types/product/index.d.cts","default":"./dist/cjs/product/index.js"}},"./vehicle":{"import":{"types":"./dist/types/vehicle/index.d.ts","default":"./dist/esm/vehicle/index.js"},"require":{"types":"./dist/types/vehicle/index.d.cts","default":"./dist/cjs/vehicle/index.js"}},"./property":{"import":{"types":"./dist/types/property/index.d.ts","default":"./dist/esm/property/index.js"},"require":{"types":"./dist/types/property/index.d.cts","default":"./dist/cjs/property/index.js"}},"./geography":{"import":{"types":"./dist/types/geography/index.d.ts","default":"./dist/esm/geography/index.js"},"require":{"types":"./dist/types/geography/index.d.cts","default":"./dist/cjs/geography/index.js"}},"./validation":{"import":{"types":"./dist/types/validation/index.d.ts","default":"./dist/esm/validation/index.js"},"require":{"types":"./dist/types/validation/index.d.cts","default":"./dist/cjs/validation/index.js"}},"./measurement":{"import":{"types":"./dist/types/measurement/index.d.ts","default":"./dist/esm/measurement/index.js"},"require":{"types":"./dist/types/measurement/index.d.cts","default":"./dist/cjs/measurement/index.js"}},"./sample-data":{"import":{"types":"./dist/types/sample-data/index.d.ts","default":"./dist/esm/sample-data/index.js"},"require":{"types":"./dist/types/sample-data/index.d.cts","default":"./dist/cjs/sample-data/index.js"}},"./organization":{"import":{"types":"./dist/types/organization/index.d.ts","default":"./dist/esm/organization/index.js"},"require":{"types":"./dist/types/organization/index.d.cts","default":"./dist/cjs/organization/index.js"}},"./package.json":"./package.json","./text-scanning":{"import":{"types":"./dist/types/text-scanning/index.d.ts","default":"./dist/esm/text-scanning/index.js"},"require":{"types":"./dist/types/text-scanning/index.d.cts","default":"./dist/cjs/text-scanning/index.js"}}},"gitHead":"7b41bda449f84e58caa45e2bdf1d6897c4eadc1d","scripts":{"attw":"attw --pack . --profile node16","lint":"eslint .","test":"vitest run","build":"node scripts/build.mjs && tsup","format":"prettier --write .","publint":"publint","release":"pnpm build && pnpm publish --access public","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:package":"node scripts/check-package-identity.mjs && tsc -p fixtures/package-types/tsconfig.json","test:coverage":"vitest run --coverage","test:package:types":"tsc -p fixtures/package-types/tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ea18cd75-40da-4840-9853-dfcd76029be2"}},"repository":{"url":"git+https://github.com/budiauktioner/buildi-primitives.git","type":"git"},"_npmVersion":"11.16.0","description":"Swedish, EU and international value-object primitives — validation, normalization, masking, and text scanning. TypeScript port of Buildi.Primitives (.NET).","directories":{},"sideEffects":["./dist/esm/index.js","./dist/cjs/index.js","./dist/esm/contact/index.js","./dist/cjs/contact/index.js","./dist/esm/sample-data/index.js","./dist/cjs/sample-data/index.js","./dist/esm/text-scanning/index.js","./dist/cjs/text-scanning/index.js"],"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","eslint":"^9.18.0","vitest":"^2.1.8","esbuild":"^0.28.1","publint":"^0.3.2","prettier":"^3.4.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/node":"^22.10.7","typescript-eslint":"^8.21.0","@vitest/coverage-v8":"^2.1.8","@arethetypeswrong/cli":"^0.18.5"},"_npmOperationalInternal":{"tmp":"tmp/buildi-primitives_0.2.0_1786135040447_0.6412769104012375","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@budiauktioner/buildi-primitives","version":"0.2.1","description":"Swedish, EU and international value-object primitives — validation, normalization, masking, and text scanning. TypeScript port of Buildi.Primitives (.NET).","license":"MIT","author":{"name":"Budi Auktioner"},"type":"module","sideEffects":["./dist/esm/index.js","./dist/cjs/index.js","./dist/esm/contact/index.js","./dist/cjs/contact/index.js","./dist/esm/sample-data/index.js","./dist/cjs/sample-data/index.js","./dist/esm/text-scanning/index.js","./dist/cjs/text-scanning/index.js"],"types":"./dist/types/index.d.ts","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","engines":{"node":">=20.10"},"publishConfig":{"access":"public"},"packageManager":"pnpm@9.15.0","repository":{"type":"git","url":"git+https://github.com/budiauktioner/buildi-primitives.git"},"homepage":"https://github.com/budiauktioner/buildi-primitives#readme","bugs":{"url":"https://github.com/budiauktioner/buildi-primitives/issues"},"keywords":["swedish","sweden","eu","iso","validation","normalization","primitives","value-object","personnummer","organisationsnummer","iban","vat","address","phone","country","language"],"exports":{".":{"import":{"types":"./dist/types/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/types/index.d.cts","default":"./dist/cjs/index.js"}},"./contact":{"import":{"types":"./dist/types/contact/index.d.ts","default":"./dist/esm/contact/index.js"},"require":{"types":"./dist/types/contact/index.d.cts","default":"./dist/cjs/contact/index.js"}},"./measurement":{"import":{"types":"./dist/types/measurement/index.d.ts","default":"./dist/esm/measurement/index.js"},"require":{"types":"./dist/types/measurement/index.d.cts","default":"./dist/cjs/measurement/index.js"}},"./person":{"import":{"types":"./dist/types/person/index.d.ts","default":"./dist/esm/person/index.js"},"require":{"types":"./dist/types/person/index.d.cts","default":"./dist/cjs/person/index.js"}},"./organization":{"import":{"types":"./dist/types/organization/index.d.ts","default":"./dist/esm/organization/index.js"},"require":{"types":"./dist/types/organization/index.d.cts","default":"./dist/cjs/organization/index.js"}},"./geography":{"import":{"types":"./dist/types/geography/index.d.ts","default":"./dist/esm/geography/index.js"},"require":{"types":"./dist/types/geography/index.d.cts","default":"./dist/cjs/geography/index.js"}},"./validation":{"import":{"types":"./dist/types/validation/index.d.ts","default":"./dist/esm/validation/index.js"},"require":{"types":"./dist/types/validation/index.d.cts","default":"./dist/cjs/validation/index.js"}},"./text-scanning":{"import":{"types":"./dist/types/text-scanning/index.d.ts","default":"./dist/esm/text-scanning/index.js"},"require":{"types":"./dist/types/text-scanning/index.d.cts","default":"./dist/cjs/text-scanning/index.js"}},"./sample-data":{"import":{"types":"./dist/types/sample-data/index.d.ts","default":"./dist/esm/sample-data/index.js"},"require":{"types":"./dist/types/sample-data/index.d.cts","default":"./dist/cjs/sample-data/index.js"}},"./web":{"import":{"types":"./dist/types/web/index.d.ts","default":"./dist/esm/web/index.js"},"require":{"types":"./dist/types/web/index.d.cts","default":"./dist/cjs/web/index.js"}},"./finance":{"import":{"types":"./dist/types/finance/index.d.ts","default":"./dist/esm/finance/index.js"},"require":{"types":"./dist/types/finance/index.d.cts","default":"./dist/cjs/finance/index.js"}},"./property":{"import":{"types":"./dist/types/property/index.d.ts","default":"./dist/esm/property/index.js"},"require":{"types":"./dist/types/property/index.d.cts","default":"./dist/cjs/property/index.js"}},"./banking":{"import":{"types":"./dist/types/banking/index.d.ts","default":"./dist/esm/banking/index.js"},"require":{"types":"./dist/types/banking/index.d.cts","default":"./dist/cjs/banking/index.js"}},"./vehicle":{"import":{"types":"./dist/types/vehicle/index.d.ts","default":"./dist/esm/vehicle/index.js"},"require":{"types":"./dist/types/vehicle/index.d.cts","default":"./dist/cjs/vehicle/index.js"}},"./product":{"import":{"types":"./dist/types/product/index.d.ts","default":"./dist/esm/product/index.js"},"require":{"types":"./dist/types/product/index.d.cts","default":"./dist/cjs/product/index.js"}},"./package.json":"./package.json"},"scripts":{"build":"node scripts/build.mjs && tsup","typecheck":"tsc --noEmit","lint":"eslint .","format":"prettier --write .","format:check":"prettier --check .","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:package":"node scripts/check-package-identity.mjs && tsc -p fixtures/package-types/tsconfig.json","test:package:types":"tsc -p fixtures/package-types/tsconfig.json","release":"pnpm build && pnpm publish --access public","publint":"publint","attw":"attw --pack . --profile node16"},"devDependencies":{"@arethetypeswrong/cli":"^0.18.5","@eslint/js":"^9.18.0","@types/node":"^22.10.7","@vitest/coverage-v8":"^2.1.8","esbuild":"^0.28.1","eslint":"^9.18.0","prettier":"^3.4.2","publint":"^0.3.2","tsup":"^8.3.5","tsx":"^4.19.2","typescript":"^5.7.3","typescript-eslint":"^8.21.0","vitest":"^2.1.8"},"gitHead":"1c0edfcf2407f21838f60811433d8a051e4688c3","_id":"@budiauktioner/buildi-primitives@0.2.1","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-C2q1Bw3JphjbYH5cf2gKYoDVUwrstqqOP1M30Me22WhjOuUYOUFNjRMoMVifT/0Hv6b3fDtB6iGP3Ql5zjfGyg==","shasum":"41d8e9a9dcbd165619cfc92f8fee87b848899b14","tarball":"https://registry.npmjs.org/@budiauktioner/buildi-primitives/-/buildi-primitives-0.2.1.tgz","fileCount":1040,"unpackedSize":8372876,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@budiauktioner%2fbuildi-primitives@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDN4YbxCm2AfQWV89GN6c8pvDLMZ8VheGFEVX8vTvs60wIgHSjV3GRGCIfMgaLgg+xbIq/scCrW/yv8SwZWhYWw2Bc="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ea18cd75-40da-4840-9853-dfcd76029be2"}},"directories":{},"maintainers":[{"name":"peterorneholm","email":"peter@orneholm.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/buildi-primitives_0.2.1_1786136966219_0.45372457101335417"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-07T12:53:52.039Z","modified":"2026-08-07T21:09:26.880Z","0.1.0":"2026-08-07T12:53:52.416Z","0.1.1":"2026-08-07T12:59:49.817Z","0.2.0":"2026-08-07T20:37:20.648Z","0.2.1":"2026-08-07T21:09:26.547Z"},"bugs":{"url":"https://github.com/budiauktioner/buildi-primitives/issues"},"author":{"name":"Budi Auktioner"},"license":"MIT","homepage":"https://github.com/budiauktioner/buildi-primitives#readme","keywords":["swedish","sweden","eu","iso","validation","normalization","primitives","value-object","personnummer","organisationsnummer","iban","vat","address","phone","country","language"],"repository":{"type":"git","url":"git+https://github.com/budiauktioner/buildi-primitives.git"},"description":"Swedish, EU and international value-object primitives — validation, normalization, masking, and text scanning. TypeScript port of Buildi.Primitives (.NET).","maintainers":[{"name":"peterorneholm","email":"peter@orneholm.com"}],"readme":"# @budiauktioner/buildi-primitives\n\nTypeScript primitives for Swedish, EU, and international value-object\nvalidation, normalization, masking, and text scanning.\n\nThis is the TypeScript port of the .NET package\n[`Buildi.Primitives`](https://www.nuget.org/packages/Buildi.Primitives), whose\n[source](https://github.com/BudiAuktioner/Buildi.Primitives) remains the\nbehavioural specification for both languages.\n\n> **Status**: early release, versioned from 0.1.0. All thirteen .NET namespaces\n> are ported and track the .NET package closely. See [PARITY.md](PARITY.md) for\n> the exact coverage and the handful of intentional divergences.\n\n## Install\n\n```sh\npnpm add @budiauktioner/buildi-primitives\n# or\nnpm install @budiauktioner/buildi-primitives\n# or\nyarn add @budiauktioner/buildi-primitives\n# or\nbun add @budiauktioner/buildi-primitives\n```\n\n## Quick start\n\n```ts\nimport { SwedishOrganizationNumber } from \"@budiauktioner/buildi-primitives/organization\";\n\nSwedishOrganizationNumber.isValid(\"559246-0421\"); // true\nSwedishOrganizationNumber.isValid(\"559246-0420\"); // false — bad check digit\n\n// Static helpers accept messy input and return null when it is not valid.\nSwedishOrganizationNumber.format(\"5592460421\"); // \"559246-0421\"\nSwedishOrganizationNumber.normalize(\"559246-0421\"); // \"165592460421\"\nSwedishOrganizationNumber.format(\"nonsense\"); // null\n\n// Or parse once and keep the value object around.\nconst org = SwedishOrganizationNumber.parse(\"5592460421\");\norg.toString(); // \"559246-0421\"  — display form\norg.toNormalizedString(); // \"165592460421\" — storage form\norg.isPerson; // false — this is a legal entity, not a sole trader\n```\n\n`format()` produces the display form and `normalize()` the canonical form for\nstorage and comparison. For roughly half the types these are the same string;\nfor the rest they deliberately differ, as above. Store the normalized value and\nrender the formatted one.\n\n## API conventions\n\nEvery value-object type follows the same shape:\n\n```ts\nclass TypeName {\n  static readonly typeInfo: PrimitiveTypeInfo;\n\n  static tryParse(input: string | null | undefined): TypeName | null;\n  static parse(input: string): TypeName; // throws on invalid input\n  static isValid(input: string | null | undefined): boolean;\n  static format(\n    input: string | null | undefined,\n    options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n  ): string | null;\n  static normalize(\n    input: string | null | undefined,\n    options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n  ): string | null;\n  static isNormalized(input: string | null | undefined): boolean;\n\n  toNormalizedString(): string;\n  toString(): string;\n\n  equals(other: TypeName | null | undefined): boolean;\n  compareTo(other: TypeName | null | undefined): number;\n}\n```\n\nConstructors are private: a value object can only come from `parse` or\n`tryParse`, so an instance is always valid. Every static helper accepts\n`string | null | undefined`, so unvalidated input can be passed straight in.\n\nPass `{ fallbackToTrimmedInputWhenInvalid: true }` to `format` or `normalize`\nto get the trimmed original input back instead of `null` when the input is not\nvalid — useful when rendering user-entered values you do not want to drop.\n\n## Validation\n\nTypes with more than one meaningful failure mode add `validate()`, which\nreports why the input was rejected rather than just that it was:\n\n```ts\nimport { Iban } from \"@budiauktioner/buildi-primitives/banking\";\n\nconst result = Iban.validate(\"SE45 5000 0000 0583 9825 7460\");\n\nresult.isValid; // false\nresult.issues.map((i) => i.reason); // [\"InvalidCheckDigit\"]\nresult.issues[0].description; // \"Ogiltiga IBAN-kontrollsiffror.\"\n```\n\n`reason` is a stable `ValidationErrorReason` enum value safe to branch on.\n`description` is human-readable and follows the display language described\nunder [Defaults and display language](#defaults-and-display-language); each\nissue also exposes `englishDescription` and `localizedDescription` directly.\n\n## Masking\n\nMasking is done by module-level `maskX` functions, exported from the same\nsubpath as the type they mask:\n\n```ts\nimport { Iban, maskIban } from \"@budiauktioner/buildi-primitives/banking\";\nimport { EmailAddress, maskEmailAddress } from \"@budiauktioner/buildi-primitives/web\";\nimport { PhoneNumber, maskPhoneNumber } from \"@budiauktioner/buildi-primitives/contact\";\n\nmaskIban(Iban.parse(\"SE4550000000058398257466\")); // \"SE45 **** **** **** **** ****\"\nmaskEmailAddress(EmailAddress.parse(\"info@example.com\")); // \"i***@example.com\"\nmaskPhoneNumber(PhoneNumber.parse(\"070-174 06 33\")); // \"+46*****0633\"\n```\n\nSome take options, for example `maskEmailAddress(email, { maskDomain: true })`.\n\n## Text scanning\n\nTypes that can plausibly appear in prose expose `findCandidatesInText`, and\n`defaultTextScanner` runs all of them at once:\n\n```ts\nimport {\n  TextCandidateCategory,\n  defaultTextScanner,\n} from \"@budiauktioner/buildi-primitives/text-scanning\";\n\nconst text = \"Hör av dig till info@example.com eller ring 070-174 06 33.\";\nconst result = defaultTextScanner.scan(text);\n\nresult.emails.map((c) => c.normalizedForm); // [\"info@example.com\"]\nresult.phoneNumbers.map((c) => c.normalizedForm); // [\"0046701740633\"]\n\nresult.maskAll(text); // \"Hör av dig till i***@example.com eller ring +46*****0633.\"\nresult.redactAll(text); // \"Hör av dig till [REDACTED] eller ring [REDACTED].\"\n```\n\n`TextScanResult` has a typed accessor per scannable type (`emails`, `ibans`,\n`organizationNumbers`, and so on). Every candidate carries its span in the\nsource text, its normalized, formatted and masked forms, and a\n`TextMatchConfidence`. Types with a checksum report `High`; bare digit\nsequences report `Low`. Narrow a scan with\n`scan(text, { minimumConfidence, includeCategories, excludeCategories })`.\n\nVersion 0.2.0 expands `defaultTextScanner` with the Measurement, Vehicle, and\nProduct scanners, so an unfiltered scan may now find or mask more values than\n0.1.x. To preserve the previous category scope during migration, exclude the\nnew categories:\n\n```ts\nconst result = defaultTextScanner.scan(text, {\n  excludeCategories: new Set([\n    TextCandidateCategory.Measurement,\n    TextCandidateCategory.Vehicle,\n    TextCandidateCategory.Product,\n  ]),\n});\n```\n\nScanning is the one part of the package with import-time behaviour: importing\n`@budiauktioner/buildi-primitives/text-scanning` (or the root entry) registers\nall built-in scanners on `defaultTextScanner`. Importing only a value-object\nsubpath deliberately does not. Construct your own `TextScanner` if you want an\nisolated registry.\n\n## Defaults and display language\n\n`PrimitivesDefaults` holds the process-wide culture, UI culture, default\ncountry and default calling code. It affects display names, localized\nvalidation messages, and how ambiguous input such as a national phone number\nis interpreted.\n\n```ts\nimport { PrimitivesDefaults, Country } from \"@budiauktioner/buildi-primitives\";\n\nPrimitivesDefaults.culture; // \"sv-SE\"\nPrimitivesDefaults.countryAlpha2Code; // \"SE\"\n\nCountry.parse(\"SE\").displayName; // \"Sverige\"\n\nPrimitivesDefaults.uiCulture = \"en-US\";\nCountry.parse(\"SE\").displayName; // \"Sweden\"\n\nPrimitivesDefaults.reset(); // back to the defaults\n```\n\n`useLocalizedDisplayNames` is a read-only getter derived from `uiCulture` — it\nis `true` when `uiCulture` is Swedish. Set `uiCulture` to change the display\nlanguage; assigning to `useLocalizedDisplayNames` throws a `TypeError`. Types\nthat expose a `displayName` also expose `englishName` and `localizedName`, so a\nmixed-locale app can bypass the global entirely.\n\n## Sample data\n\nValid, publicly known values for tests, fixtures and documentation. Everything\nhere is a real parsed value object, so it stays valid as the rules evolve.\n\n```ts\nimport { OrganizationSampleData } from \"@budiauktioner/buildi-primitives/sample-data\";\n\nOrganizationSampleData.OrganizationNumber.all[0].toString(); // \"559246-0421\"\n```\n\nOnly publicly known organizations and reserved test values are used, such as\nRFC 2606 domains for email and the standard international test IBANs.\n\n## Subpath exports and bundle size\n\nThe root entry re-exports everything for convenience. Import from a namespace\nsubpath instead when bundle size matters. These figures bundle and minify the\ncomplete consumers shown below with esbuild for an ES2022 browser target:\n\n```ts\n// 439,333 bytes minified\nimport { SwedishOrganizationNumber } from \"@budiauktioner/buildi-primitives\";\n\nconsole.log(SwedishOrganizationNumber.parse(\"559246-0421\").toNormalizedString());\n```\n\n```ts\n// 22,024 bytes minified\nimport { SwedishOrganizationNumber } from \"@budiauktioner/buildi-primitives/organization\";\n\nconsole.log(SwedishOrganizationNumber.parse(\"559246-0421\").toNormalizedString());\n```\n\n```ts\n// 15,502 bytes minified\nimport { Length } from \"@budiauktioner/buildi-primitives/measurement\";\n\nconsole.log(Length.fromMeters(1).toNormalizedString());\n```\n\nThe root named import remains substantially larger because importing the root\nentry registers all built-in scanners as an import-time side effect. Namespace\nimports avoid that registration graph, and tree-shaking drops unrelated\nMeasurement dimensions from the `Length` consumer.\n\nAvailable subpaths: `contact`, `person`, `organization`, `geography`, `web`,\n`finance`, `property`, `banking`, `measurement`, `vehicle`, `product`,\n`validation`, `text-scanning`, and `sample-data`.\n\n```ts\nimport { SwedishPersonalIdentityNumber } from \"@budiauktioner/buildi-primitives/person\";\nimport { Country, Continent, Language } from \"@budiauktioner/buildi-primitives/geography\";\nimport { AddressCity, PhoneNumber, SwedishAddress } from \"@budiauktioner/buildi-primitives/contact\";\nimport { Currency, MoneyAmount, ExchangeRates } from \"@budiauktioner/buildi-primitives/finance\";\nimport {\n  Length,\n  Weight,\n  Temperature,\n  Percentage,\n} from \"@budiauktioner/buildi-primitives/measurement\";\nimport {\n  FuelType,\n  TireDimension,\n  VehicleIdentificationNumber,\n} from \"@budiauktioner/buildi-primitives/vehicle\";\nimport { Gtin13, ScreenSize, ClothingSize } from \"@budiauktioner/buildi-primitives/product\";\nimport { ValidationErrorReason } from \"@budiauktioner/buildi-primitives/validation\";\n```\n\nUse the root entry when you want the batteries-included behaviour, in\nparticular a `defaultTextScanner` that already knows every scannable type.\n\n## Runtime targets\n\n- Node.js 20.10 or newer (see [`.nvmrc`](.nvmrc)).\n- Bun 1.1 or newer.\n- Modern browsers (current Chromium, Firefox, Safari).\n- No Node-only runtime APIs and no runtime dependencies; ES2022 plus standard\n  `Intl` only.\n- Ships ESM and CJS builds with type definitions for both.\n\n## Development\n\nAll commands run from the repository root:\n\n```sh\npnpm install\npnpm typecheck\npnpm lint\npnpm test\npnpm build\n```\n\nSee [AGENTS.md](AGENTS.md) for conventions and the per-type pattern,\n[PARITY.md](PARITY.md) for the current state of .NET parity, and\n[CHANGELOG.md](CHANGELOG.md) for release notes.\n\n## License\n\nMIT. See [LICENSE](LICENSE) and [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).\n","readmeFilename":"README.md"}