@azure-net/node-kit 0.0.0-stage → 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.
Files changed (77) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +301 -2
  4. package/VALIDATION.md +866 -0
  5. package/dist/delivery/http/ResponseBuilder.d.ts +44 -0
  6. package/dist/delivery/http/ResponseBuilder.js +135 -0
  7. package/dist/delivery/http/index.d.ts +1 -0
  8. package/dist/delivery/http/index.js +1 -0
  9. package/dist/delivery/index.d.ts +1 -0
  10. package/dist/delivery/index.js +1 -0
  11. package/dist/domain/Ensure.d.ts +2 -0
  12. package/dist/domain/Ensure.js +7 -0
  13. package/dist/domain/EnsureError.d.ts +4 -0
  14. package/dist/domain/EnsureError.js +7 -0
  15. package/dist/domain/index.d.ts +2 -0
  16. package/dist/domain/index.js +2 -0
  17. package/dist/infrastructure/background/BackgroundTask.d.ts +12 -0
  18. package/dist/infrastructure/background/BackgroundTask.js +41 -0
  19. package/dist/infrastructure/background/index.d.ts +1 -0
  20. package/dist/infrastructure/background/index.js +1 -0
  21. package/dist/infrastructure/environment/Env.d.ts +19 -0
  22. package/dist/infrastructure/environment/Env.js +33 -0
  23. package/dist/infrastructure/environment/index.d.ts +1 -0
  24. package/dist/infrastructure/environment/index.js +1 -0
  25. package/dist/infrastructure/index.d.ts +2 -0
  26. package/dist/infrastructure/index.js +2 -0
  27. package/dist/tools/DateHelper.d.ts +13 -0
  28. package/dist/tools/DateHelper.js +77 -0
  29. package/dist/tools/DurationHelper.d.ts +6 -0
  30. package/dist/tools/DurationHelper.js +31 -0
  31. package/dist/tools/EnumHelper.d.ts +26 -0
  32. package/dist/tools/EnumHelper.js +40 -0
  33. package/dist/tools/ErrorHelper.d.ts +3 -0
  34. package/dist/tools/ErrorHelper.js +31 -0
  35. package/dist/tools/NumberHelper.d.ts +19 -0
  36. package/dist/tools/NumberHelper.js +49 -0
  37. package/dist/tools/ObjectHelper.d.ts +28 -0
  38. package/dist/tools/ObjectHelper.js +90 -0
  39. package/dist/tools/PromiseHelper.d.ts +3 -0
  40. package/dist/tools/PromiseHelper.js +7 -0
  41. package/dist/tools/StringHelper.d.ts +75 -0
  42. package/dist/tools/StringHelper.js +127 -0
  43. package/dist/tools/UidHelper.d.ts +56 -0
  44. package/dist/tools/UidHelper.js +132 -0
  45. package/dist/tools/index.d.ts +9 -0
  46. package/dist/tools/index.js +9 -0
  47. package/dist/validation/Engine.d.ts +6 -0
  48. package/dist/validation/Engine.js +406 -0
  49. package/dist/validation/Result.d.ts +31 -0
  50. package/dist/validation/Result.js +264 -0
  51. package/dist/validation/Symbols.d.ts +1 -0
  52. package/dist/validation/Symbols.js +1 -0
  53. package/dist/validation/Types.d.ts +105 -0
  54. package/dist/validation/Types.js +1 -0
  55. package/dist/validation/Validator.d.ts +26 -0
  56. package/dist/validation/Validator.js +95 -0
  57. package/dist/validation/index.d.ts +5 -0
  58. package/dist/validation/index.js +5 -0
  59. package/dist/validation/messages/En.d.ts +3 -0
  60. package/dist/validation/messages/En.js +118 -0
  61. package/dist/validation/messages/Ru.d.ts +3 -0
  62. package/dist/validation/messages/Ru.js +118 -0
  63. package/dist/validation/messages/index.d.ts +7 -0
  64. package/dist/validation/messages/index.js +7 -0
  65. package/dist/validation/rules/CustomRules.d.ts +8 -0
  66. package/dist/validation/rules/CustomRules.js +64 -0
  67. package/dist/validation/rules/Factory.d.ts +4 -0
  68. package/dist/validation/rules/Factory.js +21 -0
  69. package/dist/validation/rules/StringRules.d.ts +105 -0
  70. package/dist/validation/rules/StringRules.js +481 -0
  71. package/dist/validation/rules/StructureRules.d.ts +30 -0
  72. package/dist/validation/rules/StructureRules.js +145 -0
  73. package/dist/validation/rules/ValueRules.d.ts +82 -0
  74. package/dist/validation/rules/ValueRules.js +365 -0
  75. package/dist/validation/rules/index.d.ts +151 -0
  76. package/dist/validation/rules/index.js +19 -0
  77. package/package.json +77 -3
@@ -0,0 +1,118 @@
1
+ /** Flat, dependency-free Russian catalog keyed by validation code. */
2
+ export const validationMessagesRu = Object.freeze({
3
+ "type.object": "Значение должно быть объектом.",
4
+ "type.array": "Значение должно быть массивом.",
5
+ "type.tuple": "Значение должно соответствовать структуре кортежа.",
6
+ "type.record": "Значение должно быть словарём.",
7
+ "type.map": "Значение должно быть Map.",
8
+ "type.set": "Значение должно быть Set.",
9
+ "type.union": "Значение должно соответствовать одному из допустимых вариантов.",
10
+ "type.intersection": "Значение должно соответствовать всем правилам пересечения.",
11
+ "type.lazy": "Значение должно соответствовать вычисленным правилам проверки.",
12
+ "type.validator": "Значение должно соответствовать правилам вложенного валидатора.",
13
+ "object.unknownKeys": "Объект содержит неизвестные поля.",
14
+ "object.accessor": "Свойства с геттерами или сеттерами не поддерживаются.",
15
+ "validation.depth": "Превышена максимальная глубина проверки.",
16
+ "validation.nodes": "Превышено максимальное количество узлов проверки.",
17
+ "validation.cycle": "Циклические ссылки не поддерживаются.",
18
+ "custom.invalid": "Недопустимое значение.",
19
+ "array.unique": "Элементы массива должны быть уникальными.",
20
+ "array.length": ({ params }) => `Количество элементов массива должно быть равно ${String(params.length)}.`,
21
+ "array.contains": "Массив должен содержать указанное значение.",
22
+ "array.some": "Хотя бы один элемент массива должен удовлетворять условию.",
23
+ "array.every": "Каждый элемент массива должен удовлетворять условию.",
24
+ "comparison.sameAs": "Значение должно совпадать со значением указанного поля.",
25
+ "comparison.notSameAs": "Значение должно отличаться от значения указанного поля.",
26
+ string: "Значение должно быть строкой.",
27
+ number: "Значение должно быть конечным числом.",
28
+ finite: "Значение должно быть конечным числом.",
29
+ bigint: "Значение должно иметь тип bigint.",
30
+ boolean: "Значение должно быть логическим.",
31
+ date: "Значение должно быть корректным объектом Date.",
32
+ symbol: "Значение должно иметь тип symbol.",
33
+ literal: "Значение должно совпадать с заданным литералом.",
34
+ enum: "Значение должно входить в перечисление.",
35
+ enumName: "Значение должно быть допустимым именем элемента перечисления.",
36
+ integer: "Значение должно быть целым числом.",
37
+ safeInteger: "Значение должно быть целым числом в безопасном диапазоне.",
38
+ int32: "Значение должно быть знаковым 32-битным целым числом.",
39
+ uint32: "Значение должно быть беззнаковым 32-битным целым числом.",
40
+ float32: "Значение должно быть конечным числом в диапазоне 32-битного числа с плавающей точкой.",
41
+ int64: "Значение должно быть знаковым 64-битным bigint.",
42
+ uint64: "Значение должно быть беззнаковым 64-битным bigint.",
43
+ lessThan: ({ params }) => `Значение должно быть ${params.inclusive === true ? "не больше" : "меньше"} ${String(params.max)}.`,
44
+ greaterThan: ({ params }) => `Значение должно быть ${params.inclusive === true ? "не меньше" : "больше"} ${String(params.min)}.`,
45
+ lessThanOrEqual: ({ params }) => `Значение должно быть не больше ${String(params.max)}.`,
46
+ greaterThanOrEqual: ({ params }) => `Значение должно быть не меньше ${String(params.min)}.`,
47
+ positive: "Значение должно быть положительным.",
48
+ negative: "Значение должно быть отрицательным.",
49
+ nonNegative: "Значение должно быть неотрицательным.",
50
+ nonPositive: "Значение должно быть неположительным.",
51
+ min: ({ params }) => `Значение должно быть ${params.inclusive === false ? "больше" : "не меньше"} ${String(params.min)}.`,
52
+ max: ({ params }) => `Значение должно быть ${params.inclusive === false ? "меньше" : "не больше"} ${String(params.max)}.`,
53
+ between: ({ params }) => `Значение должно быть ${params.minInclusive === false ? "больше" : "не меньше"} ${String(params.min)} и ${params.maxInclusive === false ? "меньше" : "не больше"} ${String(params.max)}.`,
54
+ multipleOf: ({ params }) => `Значение должно быть кратно ${String(params.divisor)}.`,
55
+ decimal: "Значение должно быть десятичным числом с допустимым количеством знаков после запятой.",
56
+ precisionScale: "Значение должно соответствовать заданной точности и масштабу.",
57
+ equal: "Значение должно совпадать с ожидаемым.",
58
+ notEqual: "Значение должно отличаться от запрещённого.",
59
+ notNull: "Значение не должно быть null.",
60
+ required: "Обязательное значение.",
61
+ notEmpty: "Значение не должно быть пустым.",
62
+ empty: "Значение должно быть пустым.",
63
+ unknown: "Недопустимое значение.",
64
+ never: "Никакое значение не допускается.",
65
+ null: "Значение должно быть null.",
66
+ undefined: "Значение должно быть undefined.",
67
+ nan: "Значение должно быть NaN.",
68
+ instanceOf: "Значение должно быть экземпляром указанного класса.",
69
+ file: "Файл должен соответствовать требованиям к размеру, типу и расширению.",
70
+ blob: "Значение должно быть Blob или File и соответствовать заданным требованиям.",
71
+ before: "Дата должна предшествовать указанной дате.",
72
+ after: "Дата должна следовать за указанной датой.",
73
+ same: "Дата должна совпадать с указанной датой.",
74
+ isPast: "Дата должна быть в прошлом.",
75
+ isFuture: "Дата должна быть в будущем.",
76
+ length: ({ params }) => `Длина должна быть равна ${String(params.length)}.`,
77
+ minLength: ({ params }) => `Длина должна быть не меньше ${String(params.minLength)}.`,
78
+ maxLength: ({ params }) => `Длина должна быть не больше ${String(params.maxLength)}.`,
79
+ matches: "Значение должно соответствовать заданному шаблону.",
80
+ includes: "Строка должна содержать указанную подстроку.",
81
+ startsWith: "Строка должна начинаться с указанного префикса.",
82
+ endsWith: "Строка должна заканчиваться указанным суффиксом.",
83
+ lowercase: "Строка должна быть в нижнем регистре.",
84
+ uppercase: "Строка должна быть в верхнем регистре.",
85
+ email: "Некорректный адрес электронной почты.",
86
+ uuid: "Некорректный UUID.",
87
+ guid: "Некорректный GUID.",
88
+ url: "Некорректный абсолютный URL.",
89
+ httpUrl: "Некорректный HTTP или HTTPS URL.",
90
+ hostname: "Некорректное имя хоста.",
91
+ e164: "Номер телефона должен соответствовать формату E.164.",
92
+ emoji: "Строка должна содержать корректные последовательности эмодзи.",
93
+ base64: "Некорректная строка Base64.",
94
+ base64url: "Некорректная строка Base64url.",
95
+ hex: "Строка должна быть шестнадцатеричной.",
96
+ jwt: "Некорректный синтаксис JWT.",
97
+ nanoid: "Некорректный Nano ID.",
98
+ cuid: "Некорректный CUID.",
99
+ cuid2: "Некорректный CUID2.",
100
+ ulid: "Некорректный ULID.",
101
+ xid: "Некорректный XID.",
102
+ ksuid: "Некорректный KSUID.",
103
+ ip: "Некорректный IP-адрес.",
104
+ ipv4: "Некорректный IPv4-адрес.",
105
+ ipv6: "Некорректный IPv6-адрес.",
106
+ cidr: "Некорректная запись CIDR.",
107
+ cidrv4: "Некорректная запись IPv4 CIDR.",
108
+ cidrv6: "Некорректная запись IPv6 CIDR.",
109
+ mac: "Некорректный MAC-адрес.",
110
+ creditCard: "Некорректный номер карты.",
111
+ iban: "Некорректный IBAN.",
112
+ currencyCode: "Неподдерживаемый код валюты.",
113
+ hash: "Хеш должен соответствовать заданному формату.",
114
+ isoDate: "Некорректная дата ISO.",
115
+ isoTime: "Некорректное время ISO.",
116
+ isoDateTime: "Некорректные дата и время ISO.",
117
+ isoDuration: "Некорректная длительность ISO.",
118
+ });
@@ -0,0 +1,7 @@
1
+ import { validationMessagesEn } from "./En.js";
2
+ import { validationMessagesRu } from "./Ru.js";
3
+ export { validationMessagesEn, validationMessagesRu };
4
+ export declare const validationMessagesI18n: Readonly<{
5
+ en: Readonly<Record<string, import("../Types.js").ValidationMessage>>;
6
+ ru: Readonly<Record<string, import("../Types.js").ValidationMessage>>;
7
+ }>;
@@ -0,0 +1,7 @@
1
+ import { validationMessagesEn } from "./En.js";
2
+ import { validationMessagesRu } from "./Ru.js";
3
+ export { validationMessagesEn, validationMessagesRu };
4
+ export const validationMessagesI18n = Object.freeze({
5
+ en: validationMessagesEn,
6
+ ru: validationMessagesRu,
7
+ });
@@ -0,0 +1,8 @@
1
+ import type { BuiltinRule, FieldRule, RuleContext, RuleOptions, ValidationRule } from "../Types.js";
2
+ export declare const customRules: {
3
+ /** Conditional value checks only. Declare structural type rules outside this group. */
4
+ when<T, D = unknown, R = D, C = unknown>(condition: (context: RuleContext<T, D, R, C>) => boolean, checks: readonly FieldRule<T, D, R, C>[]): ValidationRule<T, D, R, C>;
5
+ contains(expected: unknown, options?: RuleOptions): BuiltinRule<never>;
6
+ some<T>(predicate: (value: T, index: number) => boolean, options?: RuleOptions): ValidationRule<T[]>;
7
+ every<T>(predicate: (value: T, index: number) => boolean, options?: RuleOptions): ValidationRule<T[]>;
8
+ };
@@ -0,0 +1,64 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { testRule } from "./Factory.js";
3
+ function isAsync(value) {
4
+ return (value !== null &&
5
+ typeof value === "object" &&
6
+ "then" in value &&
7
+ typeof value.then === "function");
8
+ }
9
+ function failure(result, rule) {
10
+ if (result === true)
11
+ return true;
12
+ const base = {
13
+ code: rule.code,
14
+ params: rule.params,
15
+ ...rule.options,
16
+ };
17
+ if (result === false)
18
+ return base;
19
+ if (Array.isArray(result))
20
+ return result.map((item) => ({ ...base, ...item }));
21
+ return { ...base, ...result };
22
+ }
23
+ export const customRules = {
24
+ /** Conditional value checks only. Declare structural type rules outside this group. */
25
+ when(condition, checks) {
26
+ const snapshot = [...checks];
27
+ for (const rule of snapshot) {
28
+ if (typeof rule !== "function" &&
29
+ (rule.kind !== "test" || rule.structural)) {
30
+ throw new TypeError("when() accepts value constraints and callbacks; declare structural rules outside it.");
31
+ }
32
+ }
33
+ return (context) => {
34
+ if (!condition(context))
35
+ return true;
36
+ const run = (start) => {
37
+ for (let index = start; index < snapshot.length; index++) {
38
+ const rule = snapshot[index];
39
+ const output = typeof rule === "function"
40
+ ? rule(context)
41
+ : failure(rule.test(context.value, context), rule);
42
+ if (isAsync(output))
43
+ return Promise.resolve(output).then((result) => result === true || (Array.isArray(result) && !result.length)
44
+ ? run(index + 1)
45
+ : result);
46
+ if (output !== true && !(Array.isArray(output) && !output.length))
47
+ return output;
48
+ }
49
+ return true;
50
+ };
51
+ return run(0);
52
+ };
53
+ },
54
+ contains(expected, options = {}) {
55
+ return testRule("array.contains", (value) => Array.isArray(value) &&
56
+ value.some((item) => isDeepStrictEqual(item, expected)), options);
57
+ },
58
+ some(predicate, options = {}) {
59
+ return ({ value }) => value.some(predicate) || { code: "array.some", ...options };
60
+ },
61
+ every(predicate, options = {}) {
62
+ return ({ value }) => value.every(predicate) || { code: "array.every", ...options };
63
+ },
64
+ };
@@ -0,0 +1,4 @@
1
+ import type { BuiltinRule, RuleContext, RuleOptions, RuleResult, ValidationParams } from "../Types.js";
2
+ export declare function testRule<T = never>(code: string, test: (value: unknown, context: RuleContext<unknown>) => RuleResult, options?: RuleOptions, params?: ValidationParams, structural?: boolean): BuiltinRule<T>;
3
+ export declare function descriptor<T>(rule: Omit<BuiltinRule<T>, "output">): BuiltinRule<T>;
4
+ export declare function sizeOption(value: number, name: string): void;
@@ -0,0 +1,21 @@
1
+ export function testRule(code, test, options = {}, params = {}, structural = false) {
2
+ return Object.freeze({
3
+ kind: "test",
4
+ code,
5
+ test,
6
+ structural,
7
+ options: Object.freeze({ ...options }),
8
+ params: Object.freeze({ ...params }),
9
+ });
10
+ }
11
+ export function descriptor(rule) {
12
+ return Object.freeze({
13
+ ...rule,
14
+ options: Object.freeze({ ...rule.options }),
15
+ params: Object.freeze({ ...rule.params }),
16
+ });
17
+ }
18
+ export function sizeOption(value, name) {
19
+ if (!Number.isSafeInteger(value) || value < 0)
20
+ throw new RangeError(`${name} must be a non-negative safe integer.`);
21
+ }
@@ -0,0 +1,105 @@
1
+ import type { BuiltinRule, RuleOptions } from "../Types.js";
2
+ export interface LengthOptions extends RuleOptions {
3
+ readonly unit?: "codePoints" | "codeUnits";
4
+ }
5
+ export interface UuidOptions extends RuleOptions {
6
+ readonly version?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
7
+ }
8
+ /** Caller-supplied patterns must be trusted: JavaScript RegExp has no execution timeout. */
9
+ export interface UrlOptions extends RuleOptions {
10
+ readonly protocol?: RegExp;
11
+ readonly hostname?: RegExp;
12
+ }
13
+ export interface NanoidOptions extends RuleOptions {
14
+ readonly length?: number;
15
+ }
16
+ export interface JwtOptions extends RuleOptions {
17
+ readonly algorithm?: string;
18
+ }
19
+ export interface MacOptions extends RuleOptions {
20
+ readonly delimiter?: ":" | "-" | "";
21
+ }
22
+ export interface HashOptions extends RuleOptions {
23
+ readonly encoding?: "hex" | "base64" | "base64url";
24
+ }
25
+ export interface IsoTimeOptions extends RuleOptions {
26
+ readonly precision?: number | null;
27
+ }
28
+ export interface IsoDateTimeOptions extends IsoTimeOptions {
29
+ readonly offset?: boolean;
30
+ readonly local?: boolean;
31
+ }
32
+ export type HashAlgorithm = "md5" | "sha1" | "sha256" | "sha384" | "sha512";
33
+ /**
34
+ * Noncoercive format checks. Format scope was reviewed against Zod 4.6.7's
35
+ * src/v4/core/{regexes,schemas}.ts (MIT, Colin McDonnell and contributors).
36
+ * Implementations below are independent; no Zod runtime dependency is required.
37
+ */
38
+ export declare const stringRules: {
39
+ string(options?: RuleOptions): BuiltinRule<string>;
40
+ /** Strings count Unicode code points by default, arrays count elements, maps/sets count entries. */
41
+ length(length: number, options?: LengthOptions): BuiltinRule<never>;
42
+ minLength(minLength: number, options?: LengthOptions): BuiltinRule<never>;
43
+ maxLength(maxLength: number, options?: LengthOptions): BuiltinRule<never>;
44
+ /** State-safe, not ReDoS-safe: callers are responsible for their pattern's complexity. */
45
+ matches(regex: RegExp, options?: RuleOptions): BuiltinRule<string>;
46
+ includes(substring: string, options?: RuleOptions): BuiltinRule<string>;
47
+ startsWith(prefix: string, options?: RuleOptions): BuiltinRule<string>;
48
+ endsWith(suffix: string, options?: RuleOptions): BuiltinRule<string>;
49
+ lowercase(options?: RuleOptions): BuiltinRule<string>;
50
+ uppercase(options?: RuleOptions): BuiltinRule<string>;
51
+ /** ASCII dot-atom mailbox with a dotted DNS domain; not all RFC 5322 mailboxes. */
52
+ email(options?: RuleOptions): BuiltinRule<string>;
53
+ /** RFC 9562 versions 1-8 and, without a version filter, Nil/Max UUIDs. */
54
+ uuid(options?: UuidOptions): BuiltinRule<string>;
55
+ guid(options?: RuleOptions): BuiltinRule<string>;
56
+ /** Absolute WHATWG URLs, including non-HTTP schemes; not a safe-URL/security policy. */
57
+ url(options?: UrlOptions): BuiltinRule<string>;
58
+ httpUrl(options?: UrlOptions): BuiltinRule<string>;
59
+ /** ASCII DNS labels, optionally terminated by a root dot; use punycode for IDNs. */
60
+ hostname(options?: RuleOptions): BuiltinRule<string>;
61
+ /** International '+' notation with 2-15 digits; does not verify allocation or reachability. */
62
+ e164(options?: RuleOptions): BuiltinRule<string>;
63
+ /** Common emoji sequences, not a versioned Unicode RGI membership check. */
64
+ emoji(options?: RuleOptions): BuiltinRule<string>;
65
+ /** Canonical padded RFC 4648 encoding (empty input is valid). */
66
+ base64(options?: RuleOptions): BuiltinRule<string>;
67
+ /** Canonical unpadded RFC 4648 URL encoding (empty input is valid). */
68
+ base64url(options?: RuleOptions): BuiltinRule<string>;
69
+ hex(options?: RuleOptions): BuiltinRule<string>;
70
+ /** Compact signed JWT syntax only: no signature, claim, expiry, or algorithm-security verification. */
71
+ jwt(options?: JwtOptions): BuiltinRule<string>;
72
+ nanoid(options?: NanoidOptions): BuiltinRule<string>;
73
+ /** Canonical 25-character CUID v1 shape, not proof of provenance. */
74
+ cuid(options?: RuleOptions): BuiltinRule<string>;
75
+ /** CUID2 allows custom lengths: lowercase leading letter followed by lowercase alphanumerics. */
76
+ cuid2(options?: RuleOptions): BuiltinRule<string>;
77
+ ulid(options?: RuleOptions): BuiltinRule<string>;
78
+ /** Zod-compatible 20-character base32hex shape, case-insensitive; no padding-bit or provenance check. */
79
+ xid(options?: RuleOptions): BuiltinRule<string>;
80
+ /** Zod-compatible 27-character base62 shape; no decoded 160-bit range or timestamp check. */
81
+ ksuid(options?: RuleOptions): BuiltinRule<string>;
82
+ ip(options?: RuleOptions): BuiltinRule<string>;
83
+ ipv4(options?: RuleOptions): BuiltinRule<string>;
84
+ ipv6(options?: RuleOptions): BuiltinRule<string>;
85
+ /** CIDR address/prefix notation; host bits need not be zero. */
86
+ cidr(options?: RuleOptions): BuiltinRule<string>;
87
+ cidrv4(options?: RuleOptions): BuiltinRule<string>;
88
+ cidrv6(options?: RuleOptions): BuiltinRule<string>;
89
+ mac(options?: MacOptions): BuiltinRule<string>;
90
+ /** 12-19 digit PAN with optional single space/hyphen separators and Luhn checksum, not issuer verification. */
91
+ creditCard(options?: RuleOptions): BuiltinRule<string>;
92
+ /** Electronic IBAN shape and MOD-97 checksum; no country-specific BBAN or bank registry validation. */
93
+ iban(options?: RuleOptions): BuiltinRule<string>;
94
+ /** Uppercase currencies supported by the host's ICU data, not a live ISO 4217 registry. */
95
+ currencyCode(options?: RuleOptions): BuiltinRule<string>;
96
+ hash(algorithm: HashAlgorithm, options?: HashOptions): BuiltinRule<string>;
97
+ /** Gregorian calendar YYYY-MM-DD, including astronomical year 0000. */
98
+ isoDate(options?: RuleOptions): BuiltinRule<string>;
99
+ /** Local HH:mm[:ss[.fraction]]; no leap seconds or 24:00. precision -1 means minutes. */
100
+ isoTime(options?: IsoTimeOptions): BuiltinRule<string>;
101
+ /** UTC by default; explicit opt-ins for offsets and local time. Zoned forms require seconds unless precision=-1. */
102
+ isoDateTime(options?: IsoDateTimeOptions): BuiltinRule<string>;
103
+ /** ISO 8601-1 subset: weeks alone, or ordered Y/M/D and H/M/S; fractions only on seconds. */
104
+ isoDuration(options?: RuleOptions): BuiltinRule<string>;
105
+ };