@oxog/vld 1.1.1 → 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 +84 -0
- 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/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 +15 -1
- 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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/validators/codec.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { VldError, createIssue } from '../errors';\nimport { getMessages } from '../locales';\n\n/**\n * Codec transform functions for bidirectional transformations\n */\nexport interface CodecTransform<TInput, TOutput> {\n decode: (value: TInput) => TOutput | Promise<TOutput>;\n encode: (value: TOutput) => TInput | Promise<TInput>;\n}\n\n/**\n * Codec validator for bidirectional transformations\n * Enables converting between different data representations\n */\nexport class VldCodec<TInput, TOutput> extends VldBase<TInput, TOutput> {\n private readonly inputValidator: VldBase<unknown, TInput>;\n private readonly outputValidator: VldBase<unknown, TOutput>;\n private readonly codecTransform: CodecTransform<TInput, TOutput>;\n \n constructor(\n inputValidator: VldBase<unknown, TInput>,\n outputValidator: VldBase<unknown, TOutput>,\n codecTransform: CodecTransform<TInput, TOutput>\n ) {\n super();\n this.inputValidator = inputValidator;\n this.outputValidator = outputValidator;\n this.codecTransform = codecTransform;\n }\n \n /**\n * Parse (decode) a value from input to output format\n */\n parse(value: unknown): TOutput {\n const result = this.safeParse(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Safely parse (decode) a value from input to output format\n */\n safeParse(value: unknown): ParseResult<TOutput> {\n // First validate the input\n const inputResult = this.inputValidator.safeParse(value);\n if (!inputResult.success) {\n return inputResult as ParseResult<TOutput>;\n }\n \n try {\n // Then decode to output\n const decoded = this.codecTransform.decode(inputResult.data);\n \n // Handle async decode\n if (decoded instanceof Promise) {\n throw new VldError([\n createIssue('custom', [], getMessages().codecAsyncNotSupported)\n ]);\n }\n \n // Validate the decoded output\n return this.outputValidator.safeParse(decoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecDecodeFailed)\n ])\n };\n }\n }\n \n /**\n * Encode a value from output back to input format\n */\n encode(value: unknown): TInput {\n const result = this.safeEncode(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Safely encode a value from output back to input format\n */\n safeEncode(value: unknown): ParseResult<TInput> {\n // First validate the output\n const outputResult = this.outputValidator.safeParse(value);\n if (!outputResult.success) {\n return outputResult as ParseResult<TInput>;\n }\n \n try {\n // Then encode to input\n const encoded = this.codecTransform.encode(outputResult.data);\n \n // Handle async encode\n if (encoded instanceof Promise) {\n throw new VldError([\n createIssue('custom', [], getMessages().codecAsyncNotSupported)\n ]);\n }\n \n // Validate the encoded input\n return this.inputValidator.safeParse(encoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecEncodeFailed)\n ])\n };\n }\n }\n \n /**\n * Async version of parse (decode)\n */\n async parseAsync(value: unknown): Promise<TOutput> {\n const result = await this.safeParseAsync(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Async version of safeParse (decode)\n */\n async safeParseAsync(value: unknown): Promise<ParseResult<TOutput>> {\n // First validate the input\n const inputResult = this.inputValidator.safeParse(value);\n if (!inputResult.success) {\n return inputResult as ParseResult<TOutput>;\n }\n \n try {\n // Then decode to output (supports async)\n const decoded = await this.codecTransform.decode(inputResult.data);\n \n // Validate the decoded output\n return this.outputValidator.safeParse(decoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecDecodeFailed)\n ])\n };\n }\n }\n \n /**\n * Async version of encode\n */\n async encodeAsync(value: unknown): Promise<TInput> {\n const result = await this.safeEncodeAsync(value);\n if (!result.success) {\n throw result.error;\n }\n return result.data;\n }\n \n /**\n * Async version of safeEncode\n */\n async safeEncodeAsync(value: unknown): Promise<ParseResult<TInput>> {\n // First validate the output\n const outputResult = this.outputValidator.safeParse(value);\n if (!outputResult.success) {\n return outputResult as ParseResult<TInput>;\n }\n \n try {\n // Then encode to input (supports async)\n const encoded = await this.codecTransform.encode(outputResult.data);\n \n // Validate the encoded input\n return this.inputValidator.safeParse(encoded);\n } catch (error) {\n if (error instanceof VldError) {\n return { success: false, error };\n }\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().codecEncodeFailed)\n ])\n };\n }\n }\n \n /**\n * Create a codec validator\n */\n static create<TInput, TOutput>(\n inputValidator: VldBase<unknown, TInput>,\n outputValidator: VldBase<unknown, TOutput>,\n codecTransform: CodecTransform<TInput, TOutput>\n ): VldCodec<TInput, TOutput> {\n return new VldCodec(inputValidator, outputValidator, codecTransform);\n }\n}"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Hexadecimal string validator
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldHex extends VldBase<string, string> {
|
|
6
|
+
private static readonly HEX_REGEX;
|
|
7
|
+
private readonly lowercase;
|
|
8
|
+
constructor(lowercase?: boolean);
|
|
9
|
+
parse(value: unknown): string;
|
|
10
|
+
safeParse(value: unknown): ParseResult<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Require lowercase hex characters
|
|
13
|
+
*/
|
|
14
|
+
lowercaseMode(): VldHex;
|
|
15
|
+
static create(lowercase?: boolean): VldHex;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/validators/hex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI9C;;GAEG;AACH,qBAAa,MAAO,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAErD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,SAAS,UAAQ;IAK7B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAQ7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAoC9C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB,MAAM,CAAC,MAAM,CAAC,SAAS,UAAQ,GAAG,MAAM;CAGzC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { VldError, createIssue } from '../errors.js';
|
|
3
|
+
import { getMessages } from '../locales.js';
|
|
4
|
+
/**
|
|
5
|
+
* Hexadecimal string validator
|
|
6
|
+
*/
|
|
7
|
+
export class VldHex extends VldBase {
|
|
8
|
+
constructor(lowercase = false) {
|
|
9
|
+
super();
|
|
10
|
+
this.lowercase = lowercase;
|
|
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 hex string
|
|
29
|
+
if (!VldHex.HEX_REGEX.test(value)) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: new VldError([
|
|
33
|
+
createIssue('custom', [], getMessages().invalidHex)
|
|
34
|
+
])
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Check if even length (full bytes)
|
|
38
|
+
if (value.length % 2 !== 0) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: new VldError([
|
|
42
|
+
createIssue('custom', [], getMessages().invalidHex)
|
|
43
|
+
])
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Normalize case if required
|
|
47
|
+
const normalizedValue = this.lowercase ? value.toLowerCase() : value;
|
|
48
|
+
return { success: true, data: normalizedValue };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Require lowercase hex characters
|
|
52
|
+
*/
|
|
53
|
+
lowercaseMode() {
|
|
54
|
+
return new VldHex(true);
|
|
55
|
+
}
|
|
56
|
+
static create(lowercase = false) {
|
|
57
|
+
return new VldHex(lowercase);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
VldHex.HEX_REGEX = /^[0-9a-fA-F]+$/;
|
|
61
|
+
//# sourceMappingURL=hex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../src/validators/hex.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,MAAO,SAAQ,OAAuB;IAKjD,YAAY,SAAS,GAAG,KAAK;QAC3B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,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,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,QAAQ,CAAC;oBAClB,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC;iBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,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,UAAU,CAAC;iBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK;QAC7B,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;;AA9DuB,gBAAS,GAAG,gBAAgB,CAAC","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { VldError, createIssue } from '../errors';\nimport { getMessages } from '../locales';\n\n/**\n * Hexadecimal string validator\n */\nexport class VldHex extends VldBase<string, string> {\n private static readonly HEX_REGEX = /^[0-9a-fA-F]+$/;\n \n private readonly lowercase: boolean;\n \n constructor(lowercase = false) {\n super();\n this.lowercase = lowercase;\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 hex string\n if (!VldHex.HEX_REGEX.test(value)) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().invalidHex)\n ])\n };\n }\n \n // Check if even length (full bytes)\n if (value.length % 2 !== 0) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().invalidHex)\n ])\n };\n }\n \n // Normalize case if required\n const normalizedValue = this.lowercase ? value.toLowerCase() : value;\n \n return { success: true, data: normalizedValue };\n }\n \n /**\n * Require lowercase hex characters\n */\n lowercaseMode(): VldHex {\n return new VldHex(true);\n }\n \n static create(lowercase = false): VldHex {\n return new VldHex(lowercase);\n }\n}"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Uint8Array validator
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldUint8Array extends VldBase<Uint8Array, Uint8Array> {
|
|
6
|
+
private minLength?;
|
|
7
|
+
private maxLength?;
|
|
8
|
+
private exactLength?;
|
|
9
|
+
parse(value: unknown): Uint8Array;
|
|
10
|
+
safeParse(value: unknown): ParseResult<Uint8Array>;
|
|
11
|
+
/**
|
|
12
|
+
* Set minimum byte length
|
|
13
|
+
*/
|
|
14
|
+
min(length: number): VldUint8Array;
|
|
15
|
+
/**
|
|
16
|
+
* Set maximum byte length
|
|
17
|
+
*/
|
|
18
|
+
max(length: number): VldUint8Array;
|
|
19
|
+
/**
|
|
20
|
+
* Set exact byte length
|
|
21
|
+
*/
|
|
22
|
+
length(length: number): VldUint8Array;
|
|
23
|
+
static create(): VldUint8Array;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=uint8array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uint8array.d.ts","sourceRoot":"","sources":["../../src/validators/uint8array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI9C;;GAEG;AACH,qBAAa,aAAc,SAAQ,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;IAChE,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU;IAQjC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC;IA2ClD;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAQlC;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAQlC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAQrC,MAAM,CAAC,MAAM,IAAI,aAAa;CAG/B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { VldError, createIssue } from '../errors.js';
|
|
3
|
+
import { getMessages } from '../locales.js';
|
|
4
|
+
/**
|
|
5
|
+
* Uint8Array validator
|
|
6
|
+
*/
|
|
7
|
+
export class VldUint8Array extends VldBase {
|
|
8
|
+
parse(value) {
|
|
9
|
+
const result = this.safeParse(value);
|
|
10
|
+
if (!result.success) {
|
|
11
|
+
throw result.error;
|
|
12
|
+
}
|
|
13
|
+
return result.data;
|
|
14
|
+
}
|
|
15
|
+
safeParse(value) {
|
|
16
|
+
if (!(value instanceof Uint8Array)) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
error: new VldError([
|
|
20
|
+
createIssue('invalid_type', [], getMessages().expectedUint8Array)
|
|
21
|
+
])
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Check exact length if specified
|
|
25
|
+
if (this.exactLength !== undefined && value.length !== this.exactLength) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: new VldError([
|
|
29
|
+
createIssue('custom', [], getMessages().uint8ArrayExactLength.replace('{length}', this.exactLength.toString()))
|
|
30
|
+
])
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Check minimum length
|
|
34
|
+
if (this.minLength !== undefined && value.length < this.minLength) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
error: new VldError([
|
|
38
|
+
createIssue('custom', [], getMessages().uint8ArrayMinLength.replace('{min}', this.minLength.toString()))
|
|
39
|
+
])
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Check maximum length
|
|
43
|
+
if (this.maxLength !== undefined && value.length > this.maxLength) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
error: new VldError([
|
|
47
|
+
createIssue('custom', [], getMessages().uint8ArrayMaxLength.replace('{max}', this.maxLength.toString()))
|
|
48
|
+
])
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { success: true, data: value };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set minimum byte length
|
|
55
|
+
*/
|
|
56
|
+
min(length) {
|
|
57
|
+
const validator = new VldUint8Array();
|
|
58
|
+
validator.minLength = length;
|
|
59
|
+
validator.maxLength = this.maxLength;
|
|
60
|
+
validator.exactLength = this.exactLength;
|
|
61
|
+
return validator;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Set maximum byte length
|
|
65
|
+
*/
|
|
66
|
+
max(length) {
|
|
67
|
+
const validator = new VldUint8Array();
|
|
68
|
+
validator.minLength = this.minLength;
|
|
69
|
+
validator.maxLength = length;
|
|
70
|
+
validator.exactLength = this.exactLength;
|
|
71
|
+
return validator;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Set exact byte length
|
|
75
|
+
*/
|
|
76
|
+
length(length) {
|
|
77
|
+
const validator = new VldUint8Array();
|
|
78
|
+
validator.minLength = this.minLength;
|
|
79
|
+
validator.maxLength = this.maxLength;
|
|
80
|
+
validator.exactLength = length;
|
|
81
|
+
return validator;
|
|
82
|
+
}
|
|
83
|
+
static create() {
|
|
84
|
+
return new VldUint8Array();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=uint8array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uint8array.js","sourceRoot":"","sources":["../../src/validators/uint8array.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { VldError, createIssue } from '../errors';\nimport { getMessages } from '../locales';\n\n/**\n * Uint8Array validator\n */\nexport class VldUint8Array extends VldBase<Uint8Array, Uint8Array> {\n private minLength?: number;\n private maxLength?: number;\n private exactLength?: number;\n \n parse(value: unknown): Uint8Array {\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<Uint8Array> {\n if (!(value instanceof Uint8Array)) {\n return {\n success: false,\n error: new VldError([\n createIssue('invalid_type', [], getMessages().expectedUint8Array)\n ])\n };\n }\n \n // Check exact length if specified\n if (this.exactLength !== undefined && value.length !== this.exactLength) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().uint8ArrayExactLength.replace('{length}', this.exactLength.toString()))\n ])\n };\n }\n \n // Check minimum length\n if (this.minLength !== undefined && value.length < this.minLength) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().uint8ArrayMinLength.replace('{min}', this.minLength.toString()))\n ])\n };\n }\n \n // Check maximum length\n if (this.maxLength !== undefined && value.length > this.maxLength) {\n return {\n success: false,\n error: new VldError([\n createIssue('custom', [], getMessages().uint8ArrayMaxLength.replace('{max}', this.maxLength.toString()))\n ])\n };\n }\n \n return { success: true, data: value };\n }\n \n /**\n * Set minimum byte length\n */\n min(length: number): VldUint8Array {\n const validator = new VldUint8Array();\n validator.minLength = length;\n validator.maxLength = this.maxLength;\n validator.exactLength = this.exactLength;\n return validator;\n }\n \n /**\n * Set maximum byte length\n */\n max(length: number): VldUint8Array {\n const validator = new VldUint8Array();\n validator.minLength = this.minLength;\n validator.maxLength = length;\n validator.exactLength = this.exactLength;\n return validator;\n }\n \n /**\n * Set exact byte length\n */\n length(length: number): VldUint8Array {\n const validator = new VldUint8Array();\n validator.minLength = this.minLength;\n validator.maxLength = this.maxLength;\n validator.exactLength = length;\n return validator;\n }\n \n static create(): VldUint8Array {\n return new VldUint8Array();\n }\n}"]}
|