@oxog/vld 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +107 -2
- package/README.md +274 -3
- package/dist/codecs/index.d.ts +89 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +256 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/coercion/string.js +1 -1
- package/dist/coercion/string.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/dist/locales/af.d.ts.map +1 -1
- package/dist/locales/af.js +18 -4
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.d.ts.map +1 -1
- package/dist/locales/ar.js +15 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/bn.d.ts.map +1 -1
- package/dist/locales/bn.js +15 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.d.ts.map +1 -1
- package/dist/locales/da.js +15 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.d.ts.map +1 -1
- package/dist/locales/de.js +15 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/en.js +15 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.d.ts.map +1 -1
- package/dist/locales/es-MX.js +15 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.d.ts.map +1 -1
- package/dist/locales/es.js +15 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.d.ts.map +1 -1
- package/dist/locales/fi.js +15 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.d.ts.map +1 -1
- package/dist/locales/fr.js +15 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.d.ts.map +1 -1
- package/dist/locales/hi.js +15 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.d.ts.map +1 -1
- package/dist/locales/id.js +15 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.d.ts.map +1 -1
- package/dist/locales/it.js +15 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.d.ts.map +1 -1
- package/dist/locales/ja.js +15 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.d.ts.map +1 -1
- package/dist/locales/ko.js +15 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.d.ts.map +1 -1
- package/dist/locales/nl.js +15 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.d.ts.map +1 -1
- package/dist/locales/no.js +15 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.d.ts.map +1 -1
- package/dist/locales/pl.js +15 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/locales/pt-BR.js +15 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.d.ts.map +1 -1
- package/dist/locales/pt.js +15 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.d.ts.map +1 -1
- package/dist/locales/ru.js +15 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.d.ts.map +1 -1
- package/dist/locales/sv.js +15 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.d.ts.map +1 -1
- package/dist/locales/sw.js +15 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.d.ts.map +1 -1
- package/dist/locales/th.js +15 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.d.ts.map +1 -1
- package/dist/locales/tr.js +15 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.d.ts +10 -0
- package/dist/locales/types.d.ts.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.d.ts.map +1 -1
- package/dist/locales/vi.js +15 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.d.ts.map +1 -1
- package/dist/locales/zh.js +15 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/utils/codec-utils.d.ts +44 -0
- package/dist/utils/codec-utils.d.ts.map +1 -0
- package/dist/utils/codec-utils.js +118 -0
- package/dist/utils/codec-utils.js.map +1 -0
- package/dist/validators/base64.d.ts +18 -0
- package/dist/validators/base64.d.ts.map +1 -0
- package/dist/validators/base64.js +62 -0
- package/dist/validators/base64.js.map +1 -0
- package/dist/validators/codec.d.ts +55 -0
- package/dist/validators/codec.d.ts.map +1 -0
- package/dist/validators/codec.js +182 -0
- package/dist/validators/codec.js.map +1 -0
- package/dist/validators/hex.d.ts +17 -0
- package/dist/validators/hex.d.ts.map +1 -0
- package/dist/validators/hex.js +61 -0
- package/dist/validators/hex.js.map +1 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +8 -4
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/uint8array.d.ts +25 -0
- package/dist/validators/uint8array.d.ts.map +1 -0
- package/dist/validators/uint8array.js +87 -0
- package/dist/validators/uint8array.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/locales/types.ts"],"names":[],"mappings":"","sourcesContent":["export type Locale = \n | 'en' | 'tr' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'ru' | 'ja' | 'ko' | 'zh' | 'ar' | 'hi' | 'nl' | 'pl'\n // Major European Languages \n | 'da' | 'sv' | 'no' | 'fi' | 'is' | 'cs' | 'sk' | 'hu' | 'ro' | 'bg' | 'hr' | 'sl' | 'lv' | 'lt' | 'et'\n | 'el' | 'mk' | 'sq' | 'sr' | 'bs' | 'me' | 'mt' | 'ga' | 'cy' | 'eu' | 'ca'\n // Major Asian Languages\n | 'th' | 'vi' | 'id' | 'ms' | 'tl' | 'bn' | 'ur' | 'fa' | 'he' | 'ka' | 'am' | 'hy' | 'az' | 'kk' | 'ky'\n | 'uz' | 'tg' | 'mn' | 'my' | 'km' | 'lo' | 'si' | 'ta' | 'te' | 'ml' | 'kn' | 'gu' | 'pa' | 'or' | 'as'\n | 'ne' | 'mr' | 'sd' | 'dv'\n // African Languages\n | 'sw' | 'am' | 'ha' | 'yo' | 'ig' | 'zu' | 'xh' | 'af' | 'st' | 'tn' | 'ts' | 've' | 'nr' | 'ss'\n // American Languages \n | 'pt-BR' | 'es-MX' | 'es-AR' | 'fr-CA' | 'qu' | 'gn' | 'ay';\n\nexport interface LocaleMessages {\n // String validation messages\n invalidString: string;\n stringMin: (min: number) => string;\n stringMax: (max: number) => string;\n stringLength: (length: number) => string;\n stringEmail: string;\n stringUrl: string;\n stringUuid: string;\n stringRegex: string;\n stringStartsWith: (prefix: string) => string;\n stringEndsWith: (suffix: string) => string;\n stringIncludes: (substring: string) => string;\n stringIp: string;\n stringIpv4: string;\n stringIpv6: string;\n stringEmpty: string;\n\n // Number validation messages \n invalidNumber: string;\n numberMin: (min: number) => string;\n numberMax: (max: number) => string;\n numberInt: string;\n numberPositive: string;\n numberNegative: string;\n numberNonnegative: string;\n numberNonpositive: string;\n numberFinite: string;\n numberSafe: string;\n numberMultipleOf: (value: number) => string;\n\n // Boolean validation messages\n invalidBoolean: string;\n\n // Date validation messages\n invalidDate: string;\n dateMin: (date: Date) => string;\n dateMax: (date: Date) => string;\n\n // Object validation messages\n invalidObject: string;\n unexpectedKeys: (keys: string[]) => string;\n\n // Array validation messages\n invalidArray: string;\n arrayMin: (min: number) => string;\n arrayMax: (max: number) => string;\n arrayLength: (length: number) => string;\n arrayEmpty: string;\n arrayItem: (index: number, error: string) => string;\n\n // Object field validation\n objectField: (field: string, error: string) => string;\n\n // Union validation messages\n unionNoMatch: (errors: string[]) => string;\n\n // Intersection validation messages\n intersectionError: (error: string) => string;\n\n // Literal validation messages\n literalExpected: (expected: string, received: string) => string;\n\n // Enum validation messages\n enumExpected: (values: any[], received: string) => string;\n\n // Special type validation messages\n expectedUndefined: string;\n neverType: string;\n\n // New advanced type validation messages\n invalidBigint: string;\n invalidSymbol: string;\n invalidTuple: string;\n tupleLength: (expected: number, received: number) => string;\n invalidRecord: string;\n invalidSet: string;\n invalidMap: string;\n \n // Transformation and refinement messages\n transformError: (error: string) => string;\n refinementError: (error: string) => string;\n customValidationError: (error: string) => string;\n \n // Coercion messages\n coercionFailed: (type: string, value: unknown) => string;\n}"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/locales/types.ts"],"names":[],"mappings":"","sourcesContent":["export type Locale = \n | 'en' | 'tr' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'ru' | 'ja' | 'ko' | 'zh' | 'ar' | 'hi' | 'nl' | 'pl'\n // Major European Languages \n | 'da' | 'sv' | 'no' | 'fi' | 'is' | 'cs' | 'sk' | 'hu' | 'ro' | 'bg' | 'hr' | 'sl' | 'lv' | 'lt' | 'et'\n | 'el' | 'mk' | 'sq' | 'sr' | 'bs' | 'me' | 'mt' | 'ga' | 'cy' | 'eu' | 'ca'\n // Major Asian Languages\n | 'th' | 'vi' | 'id' | 'ms' | 'tl' | 'bn' | 'ur' | 'fa' | 'he' | 'ka' | 'am' | 'hy' | 'az' | 'kk' | 'ky'\n | 'uz' | 'tg' | 'mn' | 'my' | 'km' | 'lo' | 'si' | 'ta' | 'te' | 'ml' | 'kn' | 'gu' | 'pa' | 'or' | 'as'\n | 'ne' | 'mr' | 'sd' | 'dv'\n // African Languages\n | 'sw' | 'am' | 'ha' | 'yo' | 'ig' | 'zu' | 'xh' | 'af' | 'st' | 'tn' | 'ts' | 've' | 'nr' | 'ss'\n // American Languages \n | 'pt-BR' | 'es-MX' | 'es-AR' | 'fr-CA' | 'qu' | 'gn' | 'ay';\n\nexport interface LocaleMessages {\n // String validation messages\n invalidString: string;\n stringMin: (min: number) => string;\n stringMax: (max: number) => string;\n stringLength: (length: number) => string;\n stringEmail: string;\n stringUrl: string;\n stringUuid: string;\n stringRegex: string;\n stringStartsWith: (prefix: string) => string;\n stringEndsWith: (suffix: string) => string;\n stringIncludes: (substring: string) => string;\n stringIp: string;\n stringIpv4: string;\n stringIpv6: string;\n stringEmpty: string;\n\n // Number validation messages \n invalidNumber: string;\n numberMin: (min: number) => string;\n numberMax: (max: number) => string;\n numberInt: string;\n numberPositive: string;\n numberNegative: string;\n numberNonnegative: string;\n numberNonpositive: string;\n numberFinite: string;\n numberSafe: string;\n numberMultipleOf: (value: number) => string;\n\n // Boolean validation messages\n invalidBoolean: string;\n\n // Date validation messages\n invalidDate: string;\n dateMin: (date: Date) => string;\n dateMax: (date: Date) => string;\n\n // Object validation messages\n invalidObject: string;\n unexpectedKeys: (keys: string[]) => string;\n\n // Array validation messages\n invalidArray: string;\n arrayMin: (min: number) => string;\n arrayMax: (max: number) => string;\n arrayLength: (length: number) => string;\n arrayEmpty: string;\n arrayItem: (index: number, error: string) => string;\n\n // Object field validation\n objectField: (field: string, error: string) => string;\n\n // Union validation messages\n unionNoMatch: (errors: string[]) => string;\n\n // Intersection validation messages\n intersectionError: (error: string) => string;\n\n // Literal validation messages\n literalExpected: (expected: string, received: string) => string;\n\n // Enum validation messages\n enumExpected: (values: any[], received: string) => string;\n\n // Special type validation messages\n expectedUndefined: string;\n neverType: string;\n\n // New advanced type validation messages\n invalidBigint: string;\n invalidSymbol: string;\n invalidTuple: string;\n tupleLength: (expected: number, received: number) => string;\n invalidRecord: string;\n invalidSet: string;\n invalidMap: string;\n \n // Transformation and refinement messages\n transformError: (error: string) => string;\n refinementError: (error: string) => string;\n customValidationError: (error: string) => string;\n \n // Coercion messages\n coercionFailed: (type: string, value: unknown) => string;\n \n // Codec messages\n codecDecodeFailed: string;\n codecEncodeFailed: string;\n codecAsyncNotSupported: string;\n \n // Base64/Hex messages\n invalidBase64: string;\n invalidHex: string;\n \n // Uint8Array messages\n expectedUint8Array: string;\n uint8ArrayMinLength: string;\n uint8ArrayMaxLength: string;\n uint8ArrayExactLength: string;\n \n // Generic type error messages\n expectedString: string;\n}"]}
|
package/dist/locales/vi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vi.d.ts","sourceRoot":"","sources":["../../src/locales/vi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"vi.d.ts","sourceRoot":"","sources":["../../src/locales/vi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,EAAE,EAAE,cAwGhB,CAAC"}
|
package/dist/locales/vi.js
CHANGED
|
@@ -69,6 +69,20 @@ export const vi = {
|
|
|
69
69
|
refinementError: (error) => `Tinh chế thất bại: ${error}`,
|
|
70
70
|
customValidationError: (error) => `Xác thực tùy chỉnh thất bại: ${error}`,
|
|
71
71
|
// Coercion messages
|
|
72
|
-
coercionFailed: (type, value) => `Không thể ép kiểu ${JSON.stringify(value)} thành ${type}
|
|
72
|
+
coercionFailed: (type, value) => `Không thể ép kiểu ${JSON.stringify(value)} thành ${type}`,
|
|
73
|
+
// Codec messages
|
|
74
|
+
codecDecodeFailed: 'Failed to decode value',
|
|
75
|
+
codecEncodeFailed: 'Failed to encode value',
|
|
76
|
+
codecAsyncNotSupported: 'Async codec operations require using parseAsync/encodeAsync methods',
|
|
77
|
+
// Base64/Hex messages
|
|
78
|
+
invalidBase64: 'Invalid base64 string',
|
|
79
|
+
invalidHex: 'Invalid hexadecimal string',
|
|
80
|
+
// Uint8Array messages
|
|
81
|
+
expectedUint8Array: 'Expected Uint8Array',
|
|
82
|
+
uint8ArrayMinLength: 'Uint8Array must have at least {min} bytes',
|
|
83
|
+
uint8ArrayMaxLength: 'Uint8Array must have at most {max} bytes',
|
|
84
|
+
uint8ArrayExactLength: 'Uint8Array must have exactly {length} bytes',
|
|
85
|
+
// Generic type error messages
|
|
86
|
+
expectedString: 'Expected string'
|
|
73
87
|
};
|
|
74
88
|
//# sourceMappingURL=vi.js.map
|
package/dist/locales/vi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vi.js","sourceRoot":"","sources":["../../src/locales/vi.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vi.js","sourceRoot":"","sources":["../../src/locales/vi.ts"],"names":[],"mappings":"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","sourcesContent":["import { LocaleMessages } from './types';\n\nexport const vi: LocaleMessages = {\n // String validation messages\n invalidString: 'Chuỗi không hợp lệ',\n stringMin: (min: number) => `Chuỗi phải có ít nhất ${min} ký tự`,\n stringMax: (max: number) => `Chuỗi không được quá ${max} ký tự`,\n stringLength: (length: number) => `Chuỗi phải có chính xác ${length} ký tự`,\n stringEmail: 'Địa chỉ email không hợp lệ',\n stringUrl: 'URL không hợp lệ',\n stringUuid: 'UUID không hợp lệ',\n stringRegex: 'Định dạng không hợp lệ',\n stringStartsWith: (prefix: string) => `Chuỗi phải bắt đầu bằng \"${prefix}\"`,\n stringEndsWith: (suffix: string) => `Chuỗi phải kết thúc bằng \"${suffix}\"`,\n stringIncludes: (substring: string) => `Chuỗi phải chứa \"${substring}\"`,\n stringIp: 'Địa chỉ IP không hợp lệ',\n stringIpv4: 'Địa chỉ IPv4 không hợp lệ',\n stringIpv6: 'Địa chỉ IPv6 không hợp lệ',\n stringEmpty: 'Chuỗi không được để trống',\n\n // Number validation messages\n invalidNumber: 'Số không hợp lệ',\n numberMin: (min: number) => `Số phải ít nhất là ${min}`,\n numberMax: (max: number) => `Số không được vượt quá ${max}`,\n numberInt: 'Số phải là số nguyên',\n numberPositive: 'Số phải là số dương',\n numberNegative: 'Số phải là số âm',\n numberNonnegative: 'Số không được là số âm',\n numberNonpositive: 'Số không được là số dương',\n numberFinite: 'Số phải là số hữu hạn',\n numberSafe: 'Số phải là số nguyên an toàn',\n numberMultipleOf: (value: number) => `Số phải là bội số của ${value}`,\n\n // Boolean validation messages\n invalidBoolean: 'Giá trị boolean không hợp lệ',\n\n // Date validation messages\n invalidDate: 'Ngày không hợp lệ',\n dateMin: (date: Date) => `Ngày phải sau ${date.toISOString()}`,\n dateMax: (date: Date) => `Ngày phải trước ${date.toISOString()}`,\n\n // Object validation messages\n invalidObject: 'Đối tượng không hợp lệ',\n unexpectedKeys: (keys: string[]) => `Khóa không mong muốn: ${keys.join(', ')}`,\n\n // Array validation messages\n invalidArray: 'Mảng không hợp lệ',\n arrayMin: (min: number) => `Mảng phải có ít nhất ${min} phần tử`,\n arrayMax: (max: number) => `Mảng không được quá ${max} phần tử`,\n arrayLength: (length: number) => `Mảng phải có chính xác ${length} phần tử`,\n arrayEmpty: 'Mảng không được để trống',\n arrayItem: (index: number, error: string) => `Phần tử không hợp lệ tại vị trí ${index}: ${error}`,\n\n // Object field validation\n objectField: (field: string, error: string) => `Trường \"${field}\" không hợp lệ: ${error}`,\n\n // Union validation messages\n unionNoMatch: (errors: string[]) => `Không có thành viên union nào khớp: ${errors.join(', ')}`,\n\n // Intersection validation messages\n intersectionError: (error: string) => `Xác thực intersection thất bại: ${error}`,\n\n // Literal validation messages\n literalExpected: (expected: string, received: string) => `Mong đợi ${expected}, nhận được ${received}`,\n\n // Enum validation messages\n enumExpected: (values: any[], received: string) => `Mong đợi một trong [${values.join(', ')}], nhận được ${received}`,\n\n // Special type validation messages\n expectedUndefined: 'Mong đợi undefined',\n neverType: 'Không thể phân tích kiểu never',\n\n // New advanced type validation messages\n invalidBigint: 'Bigint không hợp lệ',\n invalidSymbol: 'Ký hiệu không hợp lệ',\n invalidTuple: 'Tuple không hợp lệ',\n tupleLength: (expected: number, received: number) => `Tuple phải có chính xác ${expected} phần tử, nhận được ${received}`,\n invalidRecord: 'Record không hợp lệ',\n invalidSet: 'Set không hợp lệ',\n invalidMap: 'Map không hợp lệ',\n \n // Transformation and refinement messages\n transformError: (error: string) => `Biến đổi thất bại: ${error}`,\n refinementError: (error: string) => `Tinh chế thất bại: ${error}`,\n customValidationError: (error: string) => `Xác thực tùy chỉnh thất bại: ${error}`,\n \n // Coercion messages\n coercionFailed: (type: string, value: unknown) => `Không thể ép kiểu ${JSON.stringify(value)} thành ${type}`,\n \n // Codec messages\n codecDecodeFailed: 'Failed to decode value',\n codecEncodeFailed: 'Failed to encode value',\n codecAsyncNotSupported: 'Async codec operations require using parseAsync/encodeAsync methods',\n \n // Base64/Hex messages\n invalidBase64: 'Invalid base64 string',\n invalidHex: 'Invalid hexadecimal string',\n \n // Uint8Array messages\n expectedUint8Array: 'Expected Uint8Array',\n uint8ArrayMinLength: 'Uint8Array must have at least {min} bytes',\n uint8ArrayMaxLength: 'Uint8Array must have at most {max} bytes',\n uint8ArrayExactLength: 'Uint8Array must have exactly {length} bytes',\n \n // Generic type error messages\n expectedString: 'Expected string'\n};"]}
|
package/dist/locales/zh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh.d.ts","sourceRoot":"","sources":["../../src/locales/zh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"zh.d.ts","sourceRoot":"","sources":["../../src/locales/zh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,EAAE,EAAE,cAwGhB,CAAC"}
|
package/dist/locales/zh.js
CHANGED
|
@@ -69,6 +69,20 @@ export const zh = {
|
|
|
69
69
|
refinementError: (error) => `细化失败: ${error}`,
|
|
70
70
|
customValidationError: (error) => `自定义验证失败: ${error}`,
|
|
71
71
|
// Coercion messages
|
|
72
|
-
coercionFailed: (type, value) => `无法将${JSON.stringify(value)}强制转换为${type}
|
|
72
|
+
coercionFailed: (type, value) => `无法将${JSON.stringify(value)}强制转换为${type}`,
|
|
73
|
+
// Codec messages
|
|
74
|
+
codecDecodeFailed: 'Failed to decode value',
|
|
75
|
+
codecEncodeFailed: 'Failed to encode value',
|
|
76
|
+
codecAsyncNotSupported: 'Async codec operations require using parseAsync/encodeAsync methods',
|
|
77
|
+
// Base64/Hex messages
|
|
78
|
+
invalidBase64: 'Invalid base64 string',
|
|
79
|
+
invalidHex: 'Invalid hexadecimal string',
|
|
80
|
+
// Uint8Array messages
|
|
81
|
+
expectedUint8Array: 'Expected Uint8Array',
|
|
82
|
+
uint8ArrayMinLength: 'Uint8Array must have at least {min} bytes',
|
|
83
|
+
uint8ArrayMaxLength: 'Uint8Array must have at most {max} bytes',
|
|
84
|
+
uint8ArrayExactLength: 'Uint8Array must have exactly {length} bytes',
|
|
85
|
+
// Generic type error messages
|
|
86
|
+
expectedString: 'Expected string'
|
|
73
87
|
};
|
|
74
88
|
//# sourceMappingURL=zh.js.map
|
package/dist/locales/zh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../src/locales/zh.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../src/locales/zh.ts"],"names":[],"mappings":"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","sourcesContent":["import { LocaleMessages } from './types';\n\nexport const zh: LocaleMessages = {\n // String validation messages\n invalidString: '无效字符串',\n stringMin: (min: number) => `字符串必须至少${min}个字符`,\n stringMax: (max: number) => `字符串不能超过${max}个字符`,\n stringLength: (length: number) => `字符串必须正好${length}个字符`,\n stringEmail: '无效邮箱地址',\n stringUrl: '无效URL',\n stringUuid: '无效UUID',\n stringRegex: '无效格式',\n stringStartsWith: (prefix: string) => `字符串必须以\"${prefix}\"开头`,\n stringEndsWith: (suffix: string) => `字符串必须以\"${suffix}\"结尾`,\n stringIncludes: (substring: string) => `字符串必须包含\"${substring}\"`,\n stringIp: '无效IP地址',\n stringIpv4: '无效IPv4地址',\n stringIpv6: '无效IPv6地址',\n stringEmpty: '字符串不能为空',\n\n // Number validation messages\n invalidNumber: '无效数字',\n numberMin: (min: number) => `数字必须至少为${min}`,\n numberMax: (max: number) => `数字不能大于${max}`,\n numberInt: '数字必须是整数',\n numberPositive: '数字必须是正数',\n numberNegative: '数字必须是负数',\n numberNonnegative: '数字不能是负数',\n numberNonpositive: '数字不能是正数',\n numberFinite: '数字必须是有限的',\n numberSafe: '数字必须是安全整数',\n numberMultipleOf: (value: number) => `数字必须是${value}的倍数`,\n\n // Boolean validation messages\n invalidBoolean: '无效布尔值',\n\n // Date validation messages\n invalidDate: '无效日期',\n dateMin: (date: Date) => `日期必须在${date.toISOString()}之后`,\n dateMax: (date: Date) => `日期必须在${date.toISOString()}之前`,\n\n // Object validation messages\n invalidObject: '无效对象',\n unexpectedKeys: (keys: string[]) => `意外的键: ${keys.join(', ')}`,\n\n // Array validation messages\n invalidArray: '无效数组',\n arrayMin: (min: number) => `数组必须至少有${min}个元素`,\n arrayMax: (max: number) => `数组不能超过${max}个元素`,\n arrayLength: (length: number) => `数组必须正好有${length}个元素`,\n arrayEmpty: '数组不能为空',\n arrayItem: (index: number, error: string) => `索引${index}处的无效元素: ${error}`,\n\n // Object field validation\n objectField: (field: string, error: string) => `无效字段\"${field}\": ${error}`,\n\n // Union validation messages\n unionNoMatch: (errors: string[]) => `没有匹配的联合成员: ${errors.join(', ')}`,\n\n // Intersection validation messages\n intersectionError: (error: string) => `交集验证失败: ${error}`,\n\n // Literal validation messages\n literalExpected: (expected: string, received: string) => `期望${expected},得到${received}`,\n\n // Enum validation messages\n enumExpected: (values: any[], received: string) => `期望[${values.join(', ')}]中的一个,得到${received}`,\n\n // Special type validation messages\n expectedUndefined: '期望undefined',\n neverType: 'never类型无法解析',\n\n // New advanced type validation messages\n invalidBigint: '无效bigint',\n invalidSymbol: '无效符号',\n invalidTuple: '无效元组',\n tupleLength: (expected: number, received: number) => `元组必须正好有${expected}个元素,得到${received}个`,\n invalidRecord: '无效记录',\n invalidSet: '无效Set',\n invalidMap: '无效Map',\n \n // Transformation and refinement messages\n transformError: (error: string) => `转换失败: ${error}`,\n refinementError: (error: string) => `细化失败: ${error}`,\n customValidationError: (error: string) => `自定义验证失败: ${error}`,\n \n // Coercion messages\n coercionFailed: (type: string, value: unknown) => `无法将${JSON.stringify(value)}强制转换为${type}`,\n \n // Codec messages\n codecDecodeFailed: 'Failed to decode value',\n codecEncodeFailed: 'Failed to encode value',\n codecAsyncNotSupported: 'Async codec operations require using parseAsync/encodeAsync methods',\n \n // Base64/Hex messages\n invalidBase64: 'Invalid base64 string',\n invalidHex: 'Invalid hexadecimal string',\n \n // Uint8Array messages\n expectedUint8Array: 'Expected Uint8Array',\n uint8ArrayMinLength: 'Uint8Array must have at least {min} bytes',\n uint8ArrayMaxLength: 'Uint8Array must have at most {max} bytes',\n uint8ArrayExactLength: 'Uint8Array must have exactly {length} bytes',\n \n // Generic type error messages\n expectedString: 'Expected string'\n};"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for codec transformations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert a base64 string to Uint8Array
|
|
6
|
+
*/
|
|
7
|
+
export declare function base64ToUint8Array(base64: string): Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* Convert Uint8Array to base64 string
|
|
10
|
+
*/
|
|
11
|
+
export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
|
|
12
|
+
/**
|
|
13
|
+
* Convert Uint8Array to URL-safe base64 string
|
|
14
|
+
*/
|
|
15
|
+
export declare function uint8ArrayToBase64Url(bytes: Uint8Array): string;
|
|
16
|
+
/**
|
|
17
|
+
* Convert hex string to Uint8Array
|
|
18
|
+
*/
|
|
19
|
+
export declare function hexToUint8Array(hex: string): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* Convert Uint8Array to hex string
|
|
22
|
+
*/
|
|
23
|
+
export declare function uint8ArrayToHex(bytes: Uint8Array): string;
|
|
24
|
+
/**
|
|
25
|
+
* Convert string to Uint8Array using UTF-8 encoding
|
|
26
|
+
*/
|
|
27
|
+
export declare function stringToUint8Array(str: string): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* Convert Uint8Array to string using UTF-8 decoding
|
|
30
|
+
*/
|
|
31
|
+
export declare function uint8ArrayToString(bytes: Uint8Array): string;
|
|
32
|
+
/**
|
|
33
|
+
* Check if running in Node.js environment
|
|
34
|
+
*/
|
|
35
|
+
export declare function isNodeEnvironment(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Polyfill for atob in Node.js
|
|
38
|
+
*/
|
|
39
|
+
export declare function safeAtob(encoded: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Polyfill for btoa in Node.js
|
|
42
|
+
*/
|
|
43
|
+
export declare function safeBtoa(str: string): string;
|
|
44
|
+
//# sourceMappingURL=codec-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-utils.d.ts","sourceRoot":"","sources":["../../src/utils/codec-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAiB7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAS5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAO/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAavD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAOzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAG1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW5C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for codec transformations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert a base64 string to Uint8Array
|
|
6
|
+
*/
|
|
7
|
+
export function base64ToUint8Array(base64) {
|
|
8
|
+
// Handle URL-safe base64
|
|
9
|
+
const base64Clean = base64.replace(/-/g, '+').replace(/_/g, '/');
|
|
10
|
+
// Add padding if necessary
|
|
11
|
+
const padded = base64Clean.padEnd(base64Clean.length + (4 - base64Clean.length % 4) % 4, '=');
|
|
12
|
+
// Decode base64 to binary string
|
|
13
|
+
const binaryString = safeAtob(padded);
|
|
14
|
+
// Convert binary string to Uint8Array
|
|
15
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
16
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
17
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
18
|
+
}
|
|
19
|
+
return bytes;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert Uint8Array to base64 string
|
|
23
|
+
*/
|
|
24
|
+
export function uint8ArrayToBase64(bytes) {
|
|
25
|
+
// Convert Uint8Array to binary string
|
|
26
|
+
let binaryString = '';
|
|
27
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
28
|
+
binaryString += String.fromCharCode(bytes[i]);
|
|
29
|
+
}
|
|
30
|
+
// Encode to base64
|
|
31
|
+
return safeBtoa(binaryString);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Convert Uint8Array to URL-safe base64 string
|
|
35
|
+
*/
|
|
36
|
+
export function uint8ArrayToBase64Url(bytes) {
|
|
37
|
+
const base64 = uint8ArrayToBase64(bytes);
|
|
38
|
+
// Make URL-safe and remove padding
|
|
39
|
+
return base64
|
|
40
|
+
.replace(/\+/g, '-')
|
|
41
|
+
.replace(/\//g, '_')
|
|
42
|
+
.replace(/=/g, '');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert hex string to Uint8Array
|
|
46
|
+
*/
|
|
47
|
+
export function hexToUint8Array(hex) {
|
|
48
|
+
// Remove any 0x prefix if present
|
|
49
|
+
const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
50
|
+
// Ensure even length
|
|
51
|
+
const paddedHex = cleanHex.length % 2 === 0 ? cleanHex : '0' + cleanHex;
|
|
52
|
+
const bytes = new Uint8Array(paddedHex.length / 2);
|
|
53
|
+
for (let i = 0; i < paddedHex.length; i += 2) {
|
|
54
|
+
bytes[i / 2] = parseInt(paddedHex.substr(i, 2), 16);
|
|
55
|
+
}
|
|
56
|
+
return bytes;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert Uint8Array to hex string
|
|
60
|
+
*/
|
|
61
|
+
export function uint8ArrayToHex(bytes) {
|
|
62
|
+
let hex = '';
|
|
63
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
64
|
+
const byte = bytes[i].toString(16);
|
|
65
|
+
hex += byte.length === 1 ? '0' + byte : byte;
|
|
66
|
+
}
|
|
67
|
+
return hex;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert string to Uint8Array using UTF-8 encoding
|
|
71
|
+
*/
|
|
72
|
+
export function stringToUint8Array(str) {
|
|
73
|
+
const encoder = new TextEncoder();
|
|
74
|
+
return encoder.encode(str);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Convert Uint8Array to string using UTF-8 decoding
|
|
78
|
+
*/
|
|
79
|
+
export function uint8ArrayToString(bytes) {
|
|
80
|
+
const decoder = new TextDecoder();
|
|
81
|
+
return decoder.decode(bytes);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if running in Node.js environment
|
|
85
|
+
*/
|
|
86
|
+
export function isNodeEnvironment() {
|
|
87
|
+
return typeof globalThis !== 'undefined' &&
|
|
88
|
+
typeof globalThis.process !== 'undefined' &&
|
|
89
|
+
globalThis.process.versions != null &&
|
|
90
|
+
globalThis.process.versions.node != null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Polyfill for atob in Node.js
|
|
94
|
+
*/
|
|
95
|
+
export function safeAtob(encoded) {
|
|
96
|
+
if (typeof atob !== 'undefined') {
|
|
97
|
+
return atob(encoded);
|
|
98
|
+
}
|
|
99
|
+
// Node.js fallback
|
|
100
|
+
if (isNodeEnvironment()) {
|
|
101
|
+
return Buffer.from(encoded, 'base64').toString('binary');
|
|
102
|
+
}
|
|
103
|
+
throw new Error('Base64 decoding not supported in this environment');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Polyfill for btoa in Node.js
|
|
107
|
+
*/
|
|
108
|
+
export function safeBtoa(str) {
|
|
109
|
+
if (typeof btoa !== 'undefined') {
|
|
110
|
+
return btoa(str);
|
|
111
|
+
}
|
|
112
|
+
// Node.js fallback
|
|
113
|
+
if (isNodeEnvironment()) {
|
|
114
|
+
return Buffer.from(str, 'binary').toString('base64');
|
|
115
|
+
}
|
|
116
|
+
throw new Error('Base64 encoding not supported in this environment');
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=codec-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-utils.js","sourceRoot":"","sources":["../../src/utils/codec-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Utility functions for codec transformations\n */\n\n/**\n * Convert a base64 string to Uint8Array\n */\nexport function base64ToUint8Array(base64: string): Uint8Array {\n // Handle URL-safe base64\n const base64Clean = base64.replace(/-/g, '+').replace(/_/g, '/');\n \n // Add padding if necessary\n const padded = base64Clean.padEnd(base64Clean.length + (4 - base64Clean.length % 4) % 4, '=');\n \n // Decode base64 to binary string\n const binaryString = safeAtob(padded);\n \n // Convert binary string to Uint8Array\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n \n return bytes;\n}\n\n/**\n * Convert Uint8Array to base64 string\n */\nexport function uint8ArrayToBase64(bytes: Uint8Array): string {\n // Convert Uint8Array to binary string\n let binaryString = '';\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n \n // Encode to base64\n return safeBtoa(binaryString);\n}\n\n/**\n * Convert Uint8Array to URL-safe base64 string\n */\nexport function uint8ArrayToBase64Url(bytes: Uint8Array): string {\n const base64 = uint8ArrayToBase64(bytes);\n // Make URL-safe and remove padding\n return base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\n/**\n * Convert hex string to Uint8Array\n */\nexport function hexToUint8Array(hex: string): Uint8Array {\n // Remove any 0x prefix if present\n const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex;\n \n // Ensure even length\n const paddedHex = cleanHex.length % 2 === 0 ? cleanHex : '0' + cleanHex;\n \n const bytes = new Uint8Array(paddedHex.length / 2);\n for (let i = 0; i < paddedHex.length; i += 2) {\n bytes[i / 2] = parseInt(paddedHex.substr(i, 2), 16);\n }\n \n return bytes;\n}\n\n/**\n * Convert Uint8Array to hex string\n */\nexport function uint8ArrayToHex(bytes: Uint8Array): string {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i].toString(16);\n hex += byte.length === 1 ? '0' + byte : byte;\n }\n return hex;\n}\n\n/**\n * Convert string to Uint8Array using UTF-8 encoding\n */\nexport function stringToUint8Array(str: string): Uint8Array {\n const encoder = new TextEncoder();\n return encoder.encode(str);\n}\n\n/**\n * Convert Uint8Array to string using UTF-8 decoding\n */\nexport function uint8ArrayToString(bytes: Uint8Array): string {\n const decoder = new TextDecoder();\n return decoder.decode(bytes);\n}\n\n/**\n * Check if running in Node.js environment\n */\nexport function isNodeEnvironment(): boolean {\n return typeof globalThis !== 'undefined' && \n typeof globalThis.process !== 'undefined' &&\n globalThis.process.versions != null &&\n globalThis.process.versions.node != null;\n}\n\n/**\n * Polyfill for atob in Node.js\n */\nexport function safeAtob(encoded: string): string {\n if (typeof atob !== 'undefined') {\n return atob(encoded);\n }\n \n // Node.js fallback\n if (isNodeEnvironment()) {\n return Buffer.from(encoded, 'base64').toString('binary');\n }\n \n throw new Error('Base64 decoding not supported in this environment');\n}\n\n/**\n * Polyfill for btoa in Node.js\n */\nexport function safeBtoa(str: string): string {\n if (typeof btoa !== 'undefined') {\n return btoa(str);\n }\n \n // Node.js fallback\n if (isNodeEnvironment()) {\n return Buffer.from(str, 'binary').toString('base64');\n }\n \n throw new Error('Base64 encoding not supported in this environment');\n}"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Base64 string validator
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldBase64 extends VldBase<string, string> {
|
|
6
|
+
private static readonly BASE64_REGEX;
|
|
7
|
+
private static readonly BASE64_URL_REGEX;
|
|
8
|
+
private readonly urlSafe;
|
|
9
|
+
constructor(urlSafe?: boolean);
|
|
10
|
+
parse(value: unknown): string;
|
|
11
|
+
safeParse(value: unknown): ParseResult<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Create a URL-safe base64 validator
|
|
14
|
+
*/
|
|
15
|
+
urlSafeMode(): VldBase64;
|
|
16
|
+
static create(urlSafe?: boolean): VldBase64;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=base64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/validators/base64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI9C;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAEpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,UAAQ;IAK3B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAQ7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAoC9C;;OAEG;IACH,WAAW,IAAI,SAAS;IAIxB,MAAM,CAAC,MAAM,CAAC,OAAO,UAAQ,GAAG,SAAS;CAG1C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { VldError, createIssue } from '../errors.js';
|
|
3
|
+
import { getMessages } from '../locales.js';
|
|
4
|
+
/**
|
|
5
|
+
* Base64 string validator
|
|
6
|
+
*/
|
|
7
|
+
export class VldBase64 extends VldBase {
|
|
8
|
+
constructor(urlSafe = false) {
|
|
9
|
+
super();
|
|
10
|
+
this.urlSafe = urlSafe;
|
|
11
|
+
}
|
|
12
|
+
parse(value) {
|
|
13
|
+
const result = this.safeParse(value);
|
|
14
|
+
if (!result.success) {
|
|
15
|
+
throw result.error;
|
|
16
|
+
}
|
|
17
|
+
return result.data;
|
|
18
|
+
}
|
|
19
|
+
safeParse(value) {
|
|
20
|
+
if (typeof value !== 'string') {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
error: new VldError([
|
|
24
|
+
createIssue('invalid_type', [], getMessages().expectedString)
|
|
25
|
+
])
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Check if it's a valid base64 string
|
|
29
|
+
const regex = this.urlSafe ? VldBase64.BASE64_URL_REGEX : VldBase64.BASE64_REGEX;
|
|
30
|
+
// Check basic format
|
|
31
|
+
if (!regex.test(value)) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: new VldError([
|
|
35
|
+
createIssue('custom', [], getMessages().invalidBase64)
|
|
36
|
+
])
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Check length is multiple of 4 (after padding)
|
|
40
|
+
if (value.length % 4 !== 0) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: new VldError([
|
|
44
|
+
createIssue('custom', [], getMessages().invalidBase64)
|
|
45
|
+
])
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return { success: true, data: value };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a URL-safe base64 validator
|
|
52
|
+
*/
|
|
53
|
+
urlSafeMode() {
|
|
54
|
+
return new VldBase64(true);
|
|
55
|
+
}
|
|
56
|
+
static create(urlSafe = false) {
|
|
57
|
+
return new VldBase64(urlSafe);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
VldBase64.BASE64_REGEX = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
61
|
+
VldBase64.BASE64_URL_REGEX = /^[A-Za-z0-9_-]*={0,2}$/;
|
|
62
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/validators/base64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,OAAuB;IAMpD,YAAY,OAAO,GAAG,KAAK;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC;iBAC9D,CAAC;aACH,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;QAEjF,qBAAqB;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC;iBACvD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC;iBACvD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK;QAC3B,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;;AA/DuB,sBAAY,GAAG,wBAAwB,CAAC;AACxC,0BAAgB,GAAG,wBAAwB,CAAC","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { VldError, createIssue } from '../errors';\nimport { getMessages } from '../locales';\n\n/**\n * Base64 string validator\n */\nexport class VldBase64 extends VldBase<string, string> {\n private static readonly BASE64_REGEX = /^[A-Za-z0-9+/]*={0,2}$/;\n private static readonly BASE64_URL_REGEX = /^[A-Za-z0-9_-]*={0,2}$/;\n \n private readonly urlSafe: boolean;\n \n constructor(urlSafe = false) {\n super();\n this.urlSafe = urlSafe;\n }\n \n parse(value: unknown): string {\n const result = this.safeParse(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n safeParse(value: unknown): ParseResult<string> {\n if (typeof value !== 'string') {\n return {\n success: false,\n error: new VldError([\n createIssue('invalid_type', [], getMessages().expectedString)\n ])\n };\n }\n \n // Check if it's a valid base64 string\n const regex = this.urlSafe ? VldBase64.BASE64_URL_REGEX : VldBase64.BASE64_REGEX;\n \n // Check basic format\n if (!regex.test(value)) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().invalidBase64)\n ])\n };\n }\n \n // Check length is multiple of 4 (after padding)\n if (value.length % 4 !== 0) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().invalidBase64)\n ])\n };\n }\n \n return { success: true, data: value };\n }\n \n /**\n * Create a URL-safe base64 validator\n */\n urlSafeMode(): VldBase64 {\n return new VldBase64(true);\n }\n \n static create(urlSafe = false): VldBase64 {\n return new VldBase64(urlSafe);\n }\n}"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Codec transform functions for bidirectional transformations
|
|
4
|
+
*/
|
|
5
|
+
export interface CodecTransform<TInput, TOutput> {
|
|
6
|
+
decode: (value: TInput) => TOutput | Promise<TOutput>;
|
|
7
|
+
encode: (value: TOutput) => TInput | Promise<TInput>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Codec validator for bidirectional transformations
|
|
11
|
+
* Enables converting between different data representations
|
|
12
|
+
*/
|
|
13
|
+
export declare class VldCodec<TInput, TOutput> extends VldBase<TInput, TOutput> {
|
|
14
|
+
private readonly inputValidator;
|
|
15
|
+
private readonly outputValidator;
|
|
16
|
+
private readonly codecTransform;
|
|
17
|
+
constructor(inputValidator: VldBase<unknown, TInput>, outputValidator: VldBase<unknown, TOutput>, codecTransform: CodecTransform<TInput, TOutput>);
|
|
18
|
+
/**
|
|
19
|
+
* Parse (decode) a value from input to output format
|
|
20
|
+
*/
|
|
21
|
+
parse(value: unknown): TOutput;
|
|
22
|
+
/**
|
|
23
|
+
* Safely parse (decode) a value from input to output format
|
|
24
|
+
*/
|
|
25
|
+
safeParse(value: unknown): ParseResult<TOutput>;
|
|
26
|
+
/**
|
|
27
|
+
* Encode a value from output back to input format
|
|
28
|
+
*/
|
|
29
|
+
encode(value: unknown): TInput;
|
|
30
|
+
/**
|
|
31
|
+
* Safely encode a value from output back to input format
|
|
32
|
+
*/
|
|
33
|
+
safeEncode(value: unknown): ParseResult<TInput>;
|
|
34
|
+
/**
|
|
35
|
+
* Async version of parse (decode)
|
|
36
|
+
*/
|
|
37
|
+
parseAsync(value: unknown): Promise<TOutput>;
|
|
38
|
+
/**
|
|
39
|
+
* Async version of safeParse (decode)
|
|
40
|
+
*/
|
|
41
|
+
safeParseAsync(value: unknown): Promise<ParseResult<TOutput>>;
|
|
42
|
+
/**
|
|
43
|
+
* Async version of encode
|
|
44
|
+
*/
|
|
45
|
+
encodeAsync(value: unknown): Promise<TInput>;
|
|
46
|
+
/**
|
|
47
|
+
* Async version of safeEncode
|
|
48
|
+
*/
|
|
49
|
+
safeEncodeAsync(value: unknown): Promise<ParseResult<TInput>>;
|
|
50
|
+
/**
|
|
51
|
+
* Create a codec validator
|
|
52
|
+
*/
|
|
53
|
+
static create<TInput, TOutput>(inputValidator: VldBase<unknown, TInput>, outputValidator: VldBase<unknown, TOutput>, codecTransform: CodecTransform<TInput, TOutput>): VldCodec<TInput, TOutput>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/validators/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,OAAO;IAC7C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,qBAAa,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAE,SAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;gBAG/D,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EACxC,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1C,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;IAQjD;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQ9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAiC/C;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAQ9B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAiC/C;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQlD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IA0BnE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAQlD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IA0BnE;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAC3B,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EACxC,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1C,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAG7B"}
|