@budiauktioner/buildi-primitives 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/LICENSE +21 -0
- package/README.md +253 -0
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/banking/index.cjs +6491 -0
- package/dist/banking/index.cjs.map +1 -0
- package/dist/banking/index.d.cts +58 -0
- package/dist/banking/index.d.ts +58 -0
- package/dist/banking/index.js +6464 -0
- package/dist/banking/index.js.map +1 -0
- package/dist/contact/index.cjs +6678 -0
- package/dist/contact/index.cjs.map +1 -0
- package/dist/contact/index.d.cts +709 -0
- package/dist/contact/index.d.ts +709 -0
- package/dist/contact/index.js +6586 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/country-BhD51LDL.d.cts +433 -0
- package/dist/country-p0n0EVQ9.d.ts +433 -0
- package/dist/finance/index.cjs +3592 -0
- package/dist/finance/index.cjs.map +1 -0
- package/dist/finance/index.d.cts +83 -0
- package/dist/finance/index.d.ts +83 -0
- package/dist/finance/index.js +3584 -0
- package/dist/finance/index.js.map +1 -0
- package/dist/geography/index.cjs +4227 -0
- package/dist/geography/index.cjs.map +1 -0
- package/dist/geography/index.d.cts +34 -0
- package/dist/geography/index.d.ts +34 -0
- package/dist/geography/index.js +4202 -0
- package/dist/geography/index.js.map +1 -0
- package/dist/index.cjs +14087 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +75 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.js +13868 -0
- package/dist/index.js.map +1 -0
- package/dist/isin-EeVPpNWu.d.ts +39 -0
- package/dist/isin-ZlQLBVm8.d.cts +39 -0
- package/dist/organization/index.cjs +2376 -0
- package/dist/organization/index.cjs.map +1 -0
- package/dist/organization/index.d.cts +117 -0
- package/dist/organization/index.d.ts +117 -0
- package/dist/organization/index.js +2346 -0
- package/dist/organization/index.js.map +1 -0
- package/dist/person/index.cjs +1144 -0
- package/dist/person/index.cjs.map +1 -0
- package/dist/person/index.d.cts +60 -0
- package/dist/person/index.d.ts +60 -0
- package/dist/person/index.js +1125 -0
- package/dist/person/index.js.map +1 -0
- package/dist/person-full-name-Cmc9Ynuc.d.cts +82 -0
- package/dist/person-full-name-D6Hbsab6.d.ts +82 -0
- package/dist/phone-number-C24--ggy.d.ts +139 -0
- package/dist/phone-number-DZ-YxCQQ.d.cts +139 -0
- package/dist/property/index.cjs +487 -0
- package/dist/property/index.cjs.map +1 -0
- package/dist/property/index.d.cts +56 -0
- package/dist/property/index.d.ts +56 -0
- package/dist/property/index.js +480 -0
- package/dist/property/index.js.map +1 -0
- package/dist/sample-data/index.cjs +12310 -0
- package/dist/sample-data/index.cjs.map +1 -0
- package/dist/sample-data/index.d.cts +260 -0
- package/dist/sample-data/index.d.ts +260 -0
- package/dist/sample-data/index.js +12302 -0
- package/dist/sample-data/index.js.map +1 -0
- package/dist/swedish-address-DNC3ftRF.d.cts +297 -0
- package/dist/swedish-address-GMzjqgxb.d.ts +297 -0
- package/dist/swedish-bank-account-holder-name-BFJ8h1aO.d.cts +45 -0
- package/dist/swedish-bank-account-holder-name-CAAru07F.d.ts +45 -0
- package/dist/swedish-municipality-DlUS7g7h.d.cts +87 -0
- package/dist/swedish-municipality-nDRHYRAd.d.ts +87 -0
- package/dist/swedish-organization-name-D7NvERxA.d.cts +33 -0
- package/dist/swedish-organization-name-rR0Q836C.d.ts +33 -0
- package/dist/swedish-organization-number-Bcj7V_lh.d.cts +130 -0
- package/dist/swedish-organization-number-DM8dpXwR.d.ts +130 -0
- package/dist/swedish-organization-type-CZOdETwG.d.cts +29 -0
- package/dist/swedish-organization-type-CZOdETwG.d.ts +29 -0
- package/dist/swedish-personal-identity-number-BiIg4io3.d.ts +149 -0
- package/dist/swedish-personal-identity-number-Cp9Coz55.d.cts +149 -0
- package/dist/swedish-property-designation-BM-gdd9x.d.ts +46 -0
- package/dist/swedish-property-designation-BaHXufqV.d.cts +46 -0
- package/dist/swedish-sni-code-Ccsswpni.d.ts +53 -0
- package/dist/swedish-sni-code-CuJFyM6l.d.cts +53 -0
- package/dist/swedish-swish-number-CL6Gx_h3.d.cts +397 -0
- package/dist/swedish-swish-number-DDG3mNDg.d.ts +397 -0
- package/dist/text-candidate-qg2bD9PY.d.cts +110 -0
- package/dist/text-candidate-qg2bD9PY.d.ts +110 -0
- package/dist/text-scanning/index.cjs +10414 -0
- package/dist/text-scanning/index.cjs.map +1 -0
- package/dist/text-scanning/index.d.cts +153 -0
- package/dist/text-scanning/index.d.ts +153 -0
- package/dist/text-scanning/index.js +10406 -0
- package/dist/text-scanning/index.js.map +1 -0
- package/dist/validation/index.cjs +83 -0
- package/dist/validation/index.cjs.map +1 -0
- package/dist/validation/index.d.cts +63 -0
- package/dist/validation/index.d.ts +63 -0
- package/dist/validation/index.js +79 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/web/index.cjs +3994 -0
- package/dist/web/index.cjs.map +1 -0
- package/dist/web/index.d.cts +203 -0
- package/dist/web/index.d.ts +203 -0
- package/dist/web/index.js +3987 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +211 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/validation/validation-error-reason.ts
|
|
4
|
+
var ValidationErrorReason = {
|
|
5
|
+
// --- Common ---
|
|
6
|
+
InputIsEmpty: "InputIsEmpty",
|
|
7
|
+
InputTooLong: "InputTooLong",
|
|
8
|
+
InputTooShort: "InputTooShort",
|
|
9
|
+
InvalidLength: "InvalidLength",
|
|
10
|
+
InvalidFormat: "InvalidFormat",
|
|
11
|
+
InvalidCharacters: "InvalidCharacters",
|
|
12
|
+
InvalidCheckDigit: "InvalidCheckDigit",
|
|
13
|
+
// --- Banking / clearing ---
|
|
14
|
+
UnknownClearingRange: "UnknownClearingRange",
|
|
15
|
+
InvalidSwedbankFormat: "InvalidSwedbankFormat",
|
|
16
|
+
InvalidAccountLengthForBank: "InvalidAccountLengthForBank",
|
|
17
|
+
InvalidClearingNumber: "InvalidClearingNumber",
|
|
18
|
+
// --- Identity / organization ---
|
|
19
|
+
InvalidDate: "InvalidDate",
|
|
20
|
+
InvalidPrefix: "InvalidPrefix",
|
|
21
|
+
InvalidEntityPattern: "InvalidEntityPattern",
|
|
22
|
+
// --- International / country ---
|
|
23
|
+
UnknownCountryCode: "UnknownCountryCode",
|
|
24
|
+
InvalidCountryPrefix: "InvalidCountryPrefix",
|
|
25
|
+
InvalidLengthForCountry: "InvalidLengthForCountry",
|
|
26
|
+
// --- OCR ---
|
|
27
|
+
InvalidLengthDigit: "InvalidLengthDigit",
|
|
28
|
+
// --- Email ---
|
|
29
|
+
MissingAtSign: "MissingAtSign",
|
|
30
|
+
InvalidLocalPart: "InvalidLocalPart",
|
|
31
|
+
InvalidDomain: "InvalidDomain"
|
|
32
|
+
};
|
|
33
|
+
var DEFAULT_UI_CULTURE = "sv-SE";
|
|
34
|
+
var state = {
|
|
35
|
+
uiCulture: DEFAULT_UI_CULTURE};
|
|
36
|
+
var PrimitivesDefaults = {
|
|
37
|
+
/**
|
|
38
|
+
* `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).
|
|
39
|
+
* Types use this to select between localized and English display names.
|
|
40
|
+
*/
|
|
41
|
+
get useLocalizedDisplayNames() {
|
|
42
|
+
const lang = state.uiCulture.toLowerCase().split("-")[0];
|
|
43
|
+
return lang === "sv";
|
|
44
|
+
}};
|
|
45
|
+
|
|
46
|
+
// src/validation/validation-issue.ts
|
|
47
|
+
var ValidationIssue = class {
|
|
48
|
+
reason;
|
|
49
|
+
englishDescription;
|
|
50
|
+
localizedDescription;
|
|
51
|
+
constructor(reason, englishDescription, localizedDescription) {
|
|
52
|
+
this.reason = reason;
|
|
53
|
+
this.englishDescription = englishDescription;
|
|
54
|
+
this.localizedDescription = localizedDescription;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns {@link localizedDescription} when
|
|
58
|
+
* {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise
|
|
59
|
+
* {@link englishDescription}.
|
|
60
|
+
*/
|
|
61
|
+
get description() {
|
|
62
|
+
return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedDescription : this.englishDescription;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// src/validation/validation-result.ts
|
|
67
|
+
var ValidationResult = class {
|
|
68
|
+
rawInput;
|
|
69
|
+
isValid;
|
|
70
|
+
issues;
|
|
71
|
+
/** @internal — use `validResult` / `invalidResult` factories. */
|
|
72
|
+
constructor(rawInput, isValid, issues) {
|
|
73
|
+
this.rawInput = rawInput ?? null;
|
|
74
|
+
this.isValid = isValid;
|
|
75
|
+
this.issues = Object.freeze([...issues]);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
exports.ValidationErrorReason = ValidationErrorReason;
|
|
80
|
+
exports.ValidationIssue = ValidationIssue;
|
|
81
|
+
exports.ValidationResult = ValidationResult;
|
|
82
|
+
//# sourceMappingURL=index.cjs.map
|
|
83
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/validation/validation-error-reason.ts","../../src/primitives-defaults.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts"],"names":[],"mappings":";;;AAMO,IAAM,qBAAA,GAAwB;AAAA;AAAA,EAEnC,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,iBAAA,EAAmB,mBAAA;AAAA,EACnB,iBAAA,EAAmB,mBAAA;AAAA;AAAA,EAGnB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,2BAAA,EAA6B,6BAAA;AAAA,EAC7B,qBAAA,EAAuB,uBAAA;AAAA;AAAA,EAGvB,WAAA,EAAa,aAAA;AAAA,EACb,aAAA,EAAe,eAAA;AAAA,EACf,oBAAA,EAAsB,sBAAA;AAAA;AAAA,EAGtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,uBAAA,EAAyB,yBAAA;AAAA;AAAA,EAGzB,kBAAA,EAAoB,oBAAA;AAAA;AAAA,EAGpB,aAAA,EAAe,eAAA;AAAA,EACf,gBAAA,EAAkB,kBAAA;AAAA,EAClB,aAAA,EAAe;AACjB;AC7BA,IAAM,kBAAA,GAAqB,OAAA;AAW3B,IAAM,KAAA,GAAiC;AAAA,EAErC,SAAA,EAAW,kBAGb,CAAA;AAWO,IAAM,kBAAA,GAAqB;AAAA,EA4ChC;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,wBAAA,GAAoC;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,IAAA,OAAO,IAAA,KAAS,IAAA;AAAA,EAClB,CASF,CAAA;;;AC3FO,IAAM,kBAAN,MAAsB;AAAA,EAClB,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EAET,WAAA,CACE,MAAA,EACA,kBAAA,EACA,oBAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAC1B,IAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,kBAAA,CAAmB,wBAAA,GACtB,IAAA,CAAK,oBAAA,GACL,IAAA,CAAK,kBAAA;AAAA,EACX;AACF;;;ACzBO,IAAM,mBAAN,MAAuB;AAAA,EACnB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAGT,WAAA,CACE,QAAA,EACA,OAAA,EACA,MAAA,EACA;AACA,IAAA,IAAA,CAAK,WAAW,QAAA,IAAY,IAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AAAA,EACzC;AACF","file":"index.cjs","sourcesContent":["/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describes why a value failed validation. Shared across all types that support
|
|
3
|
+
* the `validate` method. Not every reason applies to every type.
|
|
4
|
+
*
|
|
5
|
+
* Maps 1:1 to the .NET `ValidationErrorReason` enum.
|
|
6
|
+
*/
|
|
7
|
+
declare const ValidationErrorReason: {
|
|
8
|
+
readonly InputIsEmpty: "InputIsEmpty";
|
|
9
|
+
readonly InputTooLong: "InputTooLong";
|
|
10
|
+
readonly InputTooShort: "InputTooShort";
|
|
11
|
+
readonly InvalidLength: "InvalidLength";
|
|
12
|
+
readonly InvalidFormat: "InvalidFormat";
|
|
13
|
+
readonly InvalidCharacters: "InvalidCharacters";
|
|
14
|
+
readonly InvalidCheckDigit: "InvalidCheckDigit";
|
|
15
|
+
readonly UnknownClearingRange: "UnknownClearingRange";
|
|
16
|
+
readonly InvalidSwedbankFormat: "InvalidSwedbankFormat";
|
|
17
|
+
readonly InvalidAccountLengthForBank: "InvalidAccountLengthForBank";
|
|
18
|
+
readonly InvalidClearingNumber: "InvalidClearingNumber";
|
|
19
|
+
readonly InvalidDate: "InvalidDate";
|
|
20
|
+
readonly InvalidPrefix: "InvalidPrefix";
|
|
21
|
+
readonly InvalidEntityPattern: "InvalidEntityPattern";
|
|
22
|
+
readonly UnknownCountryCode: "UnknownCountryCode";
|
|
23
|
+
readonly InvalidCountryPrefix: "InvalidCountryPrefix";
|
|
24
|
+
readonly InvalidLengthForCountry: "InvalidLengthForCountry";
|
|
25
|
+
readonly InvalidLengthDigit: "InvalidLengthDigit";
|
|
26
|
+
readonly MissingAtSign: "MissingAtSign";
|
|
27
|
+
readonly InvalidLocalPart: "InvalidLocalPart";
|
|
28
|
+
readonly InvalidDomain: "InvalidDomain";
|
|
29
|
+
};
|
|
30
|
+
type ValidationErrorReason = (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A single validation problem detected during `validate`, carrying a
|
|
34
|
+
* machine-readable {@link reason} and human-readable descriptions in English
|
|
35
|
+
* and the current locale.
|
|
36
|
+
*/
|
|
37
|
+
declare class ValidationIssue {
|
|
38
|
+
readonly reason: ValidationErrorReason;
|
|
39
|
+
readonly englishDescription: string;
|
|
40
|
+
readonly localizedDescription: string;
|
|
41
|
+
constructor(reason: ValidationErrorReason, englishDescription: string, localizedDescription: string);
|
|
42
|
+
/**
|
|
43
|
+
* Returns {@link localizedDescription} when
|
|
44
|
+
* {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise
|
|
45
|
+
* {@link englishDescription}.
|
|
46
|
+
*/
|
|
47
|
+
get description(): string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The outcome of a `validate` call, carrying the original input, a validity
|
|
52
|
+
* flag, and zero or more {@link ValidationIssue} entries that explain why the
|
|
53
|
+
* input is invalid.
|
|
54
|
+
*/
|
|
55
|
+
declare class ValidationResult {
|
|
56
|
+
readonly rawInput: string | null;
|
|
57
|
+
readonly isValid: boolean;
|
|
58
|
+
readonly issues: readonly ValidationIssue[];
|
|
59
|
+
/** @internal — use `validResult` / `invalidResult` factories. */
|
|
60
|
+
constructor(rawInput: string | null | undefined, isValid: boolean, issues: readonly ValidationIssue[]);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { ValidationErrorReason, ValidationIssue, ValidationResult };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describes why a value failed validation. Shared across all types that support
|
|
3
|
+
* the `validate` method. Not every reason applies to every type.
|
|
4
|
+
*
|
|
5
|
+
* Maps 1:1 to the .NET `ValidationErrorReason` enum.
|
|
6
|
+
*/
|
|
7
|
+
declare const ValidationErrorReason: {
|
|
8
|
+
readonly InputIsEmpty: "InputIsEmpty";
|
|
9
|
+
readonly InputTooLong: "InputTooLong";
|
|
10
|
+
readonly InputTooShort: "InputTooShort";
|
|
11
|
+
readonly InvalidLength: "InvalidLength";
|
|
12
|
+
readonly InvalidFormat: "InvalidFormat";
|
|
13
|
+
readonly InvalidCharacters: "InvalidCharacters";
|
|
14
|
+
readonly InvalidCheckDigit: "InvalidCheckDigit";
|
|
15
|
+
readonly UnknownClearingRange: "UnknownClearingRange";
|
|
16
|
+
readonly InvalidSwedbankFormat: "InvalidSwedbankFormat";
|
|
17
|
+
readonly InvalidAccountLengthForBank: "InvalidAccountLengthForBank";
|
|
18
|
+
readonly InvalidClearingNumber: "InvalidClearingNumber";
|
|
19
|
+
readonly InvalidDate: "InvalidDate";
|
|
20
|
+
readonly InvalidPrefix: "InvalidPrefix";
|
|
21
|
+
readonly InvalidEntityPattern: "InvalidEntityPattern";
|
|
22
|
+
readonly UnknownCountryCode: "UnknownCountryCode";
|
|
23
|
+
readonly InvalidCountryPrefix: "InvalidCountryPrefix";
|
|
24
|
+
readonly InvalidLengthForCountry: "InvalidLengthForCountry";
|
|
25
|
+
readonly InvalidLengthDigit: "InvalidLengthDigit";
|
|
26
|
+
readonly MissingAtSign: "MissingAtSign";
|
|
27
|
+
readonly InvalidLocalPart: "InvalidLocalPart";
|
|
28
|
+
readonly InvalidDomain: "InvalidDomain";
|
|
29
|
+
};
|
|
30
|
+
type ValidationErrorReason = (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A single validation problem detected during `validate`, carrying a
|
|
34
|
+
* machine-readable {@link reason} and human-readable descriptions in English
|
|
35
|
+
* and the current locale.
|
|
36
|
+
*/
|
|
37
|
+
declare class ValidationIssue {
|
|
38
|
+
readonly reason: ValidationErrorReason;
|
|
39
|
+
readonly englishDescription: string;
|
|
40
|
+
readonly localizedDescription: string;
|
|
41
|
+
constructor(reason: ValidationErrorReason, englishDescription: string, localizedDescription: string);
|
|
42
|
+
/**
|
|
43
|
+
* Returns {@link localizedDescription} when
|
|
44
|
+
* {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise
|
|
45
|
+
* {@link englishDescription}.
|
|
46
|
+
*/
|
|
47
|
+
get description(): string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The outcome of a `validate` call, carrying the original input, a validity
|
|
52
|
+
* flag, and zero or more {@link ValidationIssue} entries that explain why the
|
|
53
|
+
* input is invalid.
|
|
54
|
+
*/
|
|
55
|
+
declare class ValidationResult {
|
|
56
|
+
readonly rawInput: string | null;
|
|
57
|
+
readonly isValid: boolean;
|
|
58
|
+
readonly issues: readonly ValidationIssue[];
|
|
59
|
+
/** @internal — use `validResult` / `invalidResult` factories. */
|
|
60
|
+
constructor(rawInput: string | null | undefined, isValid: boolean, issues: readonly ValidationIssue[]);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { ValidationErrorReason, ValidationIssue, ValidationResult };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// src/validation/validation-error-reason.ts
|
|
2
|
+
var ValidationErrorReason = {
|
|
3
|
+
// --- Common ---
|
|
4
|
+
InputIsEmpty: "InputIsEmpty",
|
|
5
|
+
InputTooLong: "InputTooLong",
|
|
6
|
+
InputTooShort: "InputTooShort",
|
|
7
|
+
InvalidLength: "InvalidLength",
|
|
8
|
+
InvalidFormat: "InvalidFormat",
|
|
9
|
+
InvalidCharacters: "InvalidCharacters",
|
|
10
|
+
InvalidCheckDigit: "InvalidCheckDigit",
|
|
11
|
+
// --- Banking / clearing ---
|
|
12
|
+
UnknownClearingRange: "UnknownClearingRange",
|
|
13
|
+
InvalidSwedbankFormat: "InvalidSwedbankFormat",
|
|
14
|
+
InvalidAccountLengthForBank: "InvalidAccountLengthForBank",
|
|
15
|
+
InvalidClearingNumber: "InvalidClearingNumber",
|
|
16
|
+
// --- Identity / organization ---
|
|
17
|
+
InvalidDate: "InvalidDate",
|
|
18
|
+
InvalidPrefix: "InvalidPrefix",
|
|
19
|
+
InvalidEntityPattern: "InvalidEntityPattern",
|
|
20
|
+
// --- International / country ---
|
|
21
|
+
UnknownCountryCode: "UnknownCountryCode",
|
|
22
|
+
InvalidCountryPrefix: "InvalidCountryPrefix",
|
|
23
|
+
InvalidLengthForCountry: "InvalidLengthForCountry",
|
|
24
|
+
// --- OCR ---
|
|
25
|
+
InvalidLengthDigit: "InvalidLengthDigit",
|
|
26
|
+
// --- Email ---
|
|
27
|
+
MissingAtSign: "MissingAtSign",
|
|
28
|
+
InvalidLocalPart: "InvalidLocalPart",
|
|
29
|
+
InvalidDomain: "InvalidDomain"
|
|
30
|
+
};
|
|
31
|
+
var DEFAULT_UI_CULTURE = "sv-SE";
|
|
32
|
+
var state = {
|
|
33
|
+
uiCulture: DEFAULT_UI_CULTURE};
|
|
34
|
+
var PrimitivesDefaults = {
|
|
35
|
+
/**
|
|
36
|
+
* `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).
|
|
37
|
+
* Types use this to select between localized and English display names.
|
|
38
|
+
*/
|
|
39
|
+
get useLocalizedDisplayNames() {
|
|
40
|
+
const lang = state.uiCulture.toLowerCase().split("-")[0];
|
|
41
|
+
return lang === "sv";
|
|
42
|
+
}};
|
|
43
|
+
|
|
44
|
+
// src/validation/validation-issue.ts
|
|
45
|
+
var ValidationIssue = class {
|
|
46
|
+
reason;
|
|
47
|
+
englishDescription;
|
|
48
|
+
localizedDescription;
|
|
49
|
+
constructor(reason, englishDescription, localizedDescription) {
|
|
50
|
+
this.reason = reason;
|
|
51
|
+
this.englishDescription = englishDescription;
|
|
52
|
+
this.localizedDescription = localizedDescription;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns {@link localizedDescription} when
|
|
56
|
+
* {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise
|
|
57
|
+
* {@link englishDescription}.
|
|
58
|
+
*/
|
|
59
|
+
get description() {
|
|
60
|
+
return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedDescription : this.englishDescription;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// src/validation/validation-result.ts
|
|
65
|
+
var ValidationResult = class {
|
|
66
|
+
rawInput;
|
|
67
|
+
isValid;
|
|
68
|
+
issues;
|
|
69
|
+
/** @internal — use `validResult` / `invalidResult` factories. */
|
|
70
|
+
constructor(rawInput, isValid, issues) {
|
|
71
|
+
this.rawInput = rawInput ?? null;
|
|
72
|
+
this.isValid = isValid;
|
|
73
|
+
this.issues = Object.freeze([...issues]);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export { ValidationErrorReason, ValidationIssue, ValidationResult };
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/validation/validation-error-reason.ts","../../src/primitives-defaults.ts","../../src/validation/validation-issue.ts","../../src/validation/validation-result.ts"],"names":[],"mappings":";AAMO,IAAM,qBAAA,GAAwB;AAAA;AAAA,EAEnC,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,iBAAA,EAAmB,mBAAA;AAAA,EACnB,iBAAA,EAAmB,mBAAA;AAAA;AAAA,EAGnB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,2BAAA,EAA6B,6BAAA;AAAA,EAC7B,qBAAA,EAAuB,uBAAA;AAAA;AAAA,EAGvB,WAAA,EAAa,aAAA;AAAA,EACb,aAAA,EAAe,eAAA;AAAA,EACf,oBAAA,EAAsB,sBAAA;AAAA;AAAA,EAGtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,uBAAA,EAAyB,yBAAA;AAAA;AAAA,EAGzB,kBAAA,EAAoB,oBAAA;AAAA;AAAA,EAGpB,aAAA,EAAe,eAAA;AAAA,EACf,gBAAA,EAAkB,kBAAA;AAAA,EAClB,aAAA,EAAe;AACjB;AC7BA,IAAM,kBAAA,GAAqB,OAAA;AAW3B,IAAM,KAAA,GAAiC;AAAA,EAErC,SAAA,EAAW,kBAGb,CAAA;AAWO,IAAM,kBAAA,GAAqB;AAAA,EA4ChC;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,wBAAA,GAAoC;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,WAAA,GAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,IAAA,OAAO,IAAA,KAAS,IAAA;AAAA,EAClB,CASF,CAAA;;;AC3FO,IAAM,kBAAN,MAAsB;AAAA,EAClB,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EAET,WAAA,CACE,MAAA,EACA,kBAAA,EACA,oBAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,kBAAA,GAAqB,kBAAA;AAC1B,IAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,kBAAA,CAAmB,wBAAA,GACtB,IAAA,CAAK,oBAAA,GACL,IAAA,CAAK,kBAAA;AAAA,EACX;AACF;;;ACzBO,IAAM,mBAAN,MAAuB;AAAA,EACnB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAGT,WAAA,CACE,QAAA,EACA,OAAA,EACA,MAAA,EACA;AACA,IAAA,IAAA,CAAK,WAAW,QAAA,IAAY,IAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AAAA,EACzC;AACF","file":"index.js","sourcesContent":["/**\n * Describes why a value failed validation. Shared across all types that support\n * the `validate` method. Not every reason applies to every type.\n *\n * Maps 1:1 to the .NET `ValidationErrorReason` enum.\n */\nexport const ValidationErrorReason = {\n // --- Common ---\n InputIsEmpty: \"InputIsEmpty\",\n InputTooLong: \"InputTooLong\",\n InputTooShort: \"InputTooShort\",\n InvalidLength: \"InvalidLength\",\n InvalidFormat: \"InvalidFormat\",\n InvalidCharacters: \"InvalidCharacters\",\n InvalidCheckDigit: \"InvalidCheckDigit\",\n\n // --- Banking / clearing ---\n UnknownClearingRange: \"UnknownClearingRange\",\n InvalidSwedbankFormat: \"InvalidSwedbankFormat\",\n InvalidAccountLengthForBank: \"InvalidAccountLengthForBank\",\n InvalidClearingNumber: \"InvalidClearingNumber\",\n\n // --- Identity / organization ---\n InvalidDate: \"InvalidDate\",\n InvalidPrefix: \"InvalidPrefix\",\n InvalidEntityPattern: \"InvalidEntityPattern\",\n\n // --- International / country ---\n UnknownCountryCode: \"UnknownCountryCode\",\n InvalidCountryPrefix: \"InvalidCountryPrefix\",\n InvalidLengthForCountry: \"InvalidLengthForCountry\",\n\n // --- OCR ---\n InvalidLengthDigit: \"InvalidLengthDigit\",\n\n // --- Email ---\n MissingAtSign: \"MissingAtSign\",\n InvalidLocalPart: \"InvalidLocalPart\",\n InvalidDomain: \"InvalidDomain\",\n} as const;\n\nexport type ValidationErrorReason =\n (typeof ValidationErrorReason)[keyof typeof ValidationErrorReason];\n","/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * A single validation problem detected during `validate`, carrying a\n * machine-readable {@link reason} and human-readable descriptions in English\n * and the current locale.\n */\nexport class ValidationIssue {\n readonly reason: ValidationErrorReason;\n readonly englishDescription: string;\n readonly localizedDescription: string;\n\n constructor(\n reason: ValidationErrorReason,\n englishDescription: string,\n localizedDescription: string,\n ) {\n this.reason = reason;\n this.englishDescription = englishDescription;\n this.localizedDescription = localizedDescription;\n }\n\n /**\n * Returns {@link localizedDescription} when\n * {@link PrimitivesDefaults.useLocalizedDisplayNames} is `true`, otherwise\n * {@link englishDescription}.\n */\n get description(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames\n ? this.localizedDescription\n : this.englishDescription;\n }\n}\n","import { ValidationIssue } from \"./validation-issue.js\";\nimport { ValidationErrorReason } from \"./validation-error-reason.js\";\n\n/**\n * The outcome of a `validate` call, carrying the original input, a validity\n * flag, and zero or more {@link ValidationIssue} entries that explain why the\n * input is invalid.\n */\nexport class ValidationResult {\n readonly rawInput: string | null;\n readonly isValid: boolean;\n readonly issues: readonly ValidationIssue[];\n\n /** @internal — use `validResult` / `invalidResult` factories. */\n constructor(\n rawInput: string | null | undefined,\n isValid: boolean,\n issues: readonly ValidationIssue[],\n ) {\n this.rawInput = rawInput ?? null;\n this.isValid = isValid;\n this.issues = Object.freeze([...issues]);\n }\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function validResult(rawInput: string | null | undefined): ValidationResult {\n return new ValidationResult(rawInput, true, []);\n}\n\n/** @internal Factory for `validate` implementations. Not part of the public API. */\nexport function invalidResult(\n rawInput: string | null | undefined,\n reasonOrIssues: ValidationErrorReason | readonly ValidationIssue[],\n englishDescription?: string,\n localizedDescription?: string,\n): ValidationResult {\n if (typeof reasonOrIssues === \"string\") {\n if (englishDescription === undefined || localizedDescription === undefined) {\n throw new Error(\"invalidResult requires both english and localized descriptions\");\n }\n return new ValidationResult(rawInput, false, [\n new ValidationIssue(reasonOrIssues, englishDescription, localizedDescription),\n ]);\n }\n return new ValidationResult(rawInput, false, reasonOrIssues);\n}\n"]}
|