@zipbul/baker 0.1.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +368 -280
- package/README.md +407 -280
- package/dist/index-70ggmxsa.js +6 -0
- package/dist/index-gcptd79v.js +6 -0
- package/dist/index-xdn55cz3.js +4 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +211 -155
- package/dist/src/collect.d.ts +3 -3
- package/dist/src/configure.d.ts +33 -0
- package/dist/src/create-rule.d.ts +10 -19
- package/dist/src/decorators/field.d.ts +86 -0
- package/dist/src/decorators/index.d.ts +2 -14
- package/dist/src/decorators/index.js +2 -2
- package/dist/src/errors.d.ts +17 -17
- package/dist/src/functions/deserialize.d.ts +6 -4
- package/dist/src/functions/serialize.d.ts +5 -4
- package/dist/src/functions/to-json-schema.d.ts +11 -5
- package/dist/src/interfaces.d.ts +9 -30
- package/dist/src/registry.d.ts +4 -12
- package/dist/src/rules/index.d.ts +2 -0
- package/dist/src/rules/index.js +11 -2
- package/dist/src/rules/object.d.ts +1 -1
- package/dist/src/seal/circular-analyzer.d.ts +5 -9
- package/dist/src/seal/expose-validator.d.ts +6 -6
- package/dist/src/seal/index.d.ts +1 -1
- package/dist/src/seal/seal.d.ts +30 -15
- package/dist/src/seal/serialize-builder.d.ts +2 -2
- package/dist/src/symbols.d.ts +5 -5
- package/dist/src/symbols.js +2 -2
- package/dist/src/types.d.ts +38 -32
- package/dist/src/utils.d.ts +2 -0
- package/package.json +1 -1
- package/dist/index-3gcf6hkv.js +0 -5
- package/dist/index-mx6gnk4h.js +0 -6
- package/dist/index-wy5sh2nx.js +0 -15
- package/dist/src/decorators/array.d.ts +0 -13
- package/dist/src/decorators/common.d.ts +0 -39
- package/dist/src/decorators/date.d.ts +0 -5
- package/dist/src/decorators/locales.d.ts +0 -9
- package/dist/src/decorators/nested.d.ts +0 -17
- package/dist/src/decorators/number.d.ts +0 -15
- package/dist/src/decorators/object.d.ts +0 -9
- package/dist/src/decorators/schema.d.ts +0 -13
- package/dist/src/decorators/string.d.ts +0 -72
- package/dist/src/decorators/transform.d.ts +0 -68
- package/dist/src/decorators/typechecker.d.ts +0 -18
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SealOptions } from './interfaces';
|
|
2
|
+
export interface BakerConfig {
|
|
3
|
+
/** Automatic type conversion ("123" → 123). @default false */
|
|
4
|
+
autoConvert?: boolean;
|
|
5
|
+
/** Use class default values when key is missing from input. @default false */
|
|
6
|
+
allowClassDefaults?: boolean;
|
|
7
|
+
/** Stop at first error. @default false */
|
|
8
|
+
stopAtFirstError?: boolean;
|
|
9
|
+
/** Reject undeclared fields with an error. @default false */
|
|
10
|
+
forbidUnknown?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Renamed to `forbidUnknown`. This option actually raises an error
|
|
13
|
+
* for unknown fields rather than silently removing them. Use `forbidUnknown` instead.
|
|
14
|
+
* If `forbidUnknown` is specified, `stripUnknown` is ignored.
|
|
15
|
+
*/
|
|
16
|
+
stripUnknown?: boolean;
|
|
17
|
+
/** Include field exclusion reasons as comments in generated code. @default false */
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ConfigureResult {
|
|
21
|
+
warnings: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Baker global configuration. Call before the first auto-seal.
|
|
25
|
+
* If not called, defaults are applied.
|
|
26
|
+
*
|
|
27
|
+
* @returns `{ warnings }` — contains warning messages if called after seal.
|
|
28
|
+
*/
|
|
29
|
+
export declare function configure(config: BakerConfig): ConfigureResult;
|
|
30
|
+
/** @internal — used by seal */
|
|
31
|
+
export declare function _getGlobalOptions(): SealOptions;
|
|
32
|
+
/** @internal — reset to defaults on unseal */
|
|
33
|
+
export declare function _resetConfigForTesting(): void;
|
|
@@ -1,35 +1,26 @@
|
|
|
1
1
|
import type { EmittableRule } from './types';
|
|
2
2
|
export interface CreateRuleOptions {
|
|
3
|
-
/**
|
|
3
|
+
/** Rule name. Used as the error code. */
|
|
4
4
|
name: string;
|
|
5
|
-
/**
|
|
5
|
+
/** Validation function — true: pass, false: fail. Async functions allowed (automatically registered as async rule when returning Promise<boolean>). */
|
|
6
6
|
validate: (value: unknown) => boolean | Promise<boolean>;
|
|
7
|
-
/**
|
|
8
|
-
* 기본 에러 메시지.
|
|
9
|
-
* @phase2 — 현재는 수집만 하고 코드 생성에서 미사용.
|
|
10
|
-
*/
|
|
11
|
-
defaultMessage?: string;
|
|
12
|
-
/** 룰 파라미터 — toJsonSchema 매핑에 사용 */
|
|
7
|
+
/** Rule parameters — used for toJsonSchema mapping */
|
|
13
8
|
constraints?: Record<string, unknown>;
|
|
14
|
-
/**
|
|
9
|
+
/** Type assumed by this rule — used for type gate optimization */
|
|
15
10
|
requiresType?: 'string' | 'number' | 'boolean' | 'date';
|
|
16
11
|
}
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* 반환된 EmittableRule은:
|
|
21
|
-
* - 함수로 직접 호출 가능 (validate 위임)
|
|
22
|
-
* - .emit()으로 인라인 코드 생성 지원
|
|
23
|
-
* - 데코레이터/헬퍼 양쪽에서 사용 가능
|
|
13
|
+
* Creates a user-defined validation rule.
|
|
24
14
|
*
|
|
25
15
|
* @example
|
|
16
|
+
* // Simple form
|
|
17
|
+
* const koreanPhone = createRule('koreanPhone', (v) => /^01[016789]/.test(v as string));
|
|
18
|
+
*
|
|
19
|
+
* // Options form
|
|
26
20
|
* const isEven = createRule({
|
|
27
21
|
* name: 'isEven',
|
|
28
22
|
* validate: (v) => typeof v === 'number' && v % 2 === 0,
|
|
29
23
|
* });
|
|
30
|
-
*
|
|
31
|
-
* class Dto {
|
|
32
|
-
* @IsEven() count: number;
|
|
33
|
-
* }
|
|
34
24
|
*/
|
|
25
|
+
export declare function createRule(name: string, validate: (value: unknown) => boolean | Promise<boolean>): EmittableRule;
|
|
35
26
|
export declare function createRule(options: CreateRuleOptions): EmittableRule;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { EmittableRule } from '../types';
|
|
2
|
+
export interface ArrayOfMarker {
|
|
3
|
+
readonly [key: symbol]: true;
|
|
4
|
+
readonly rules: EmittableRule[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Apply rules to each element of an array.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* @Field(arrayOf(isString(), minLength(1)))
|
|
11
|
+
* tags!: string[];
|
|
12
|
+
*/
|
|
13
|
+
export declare function arrayOf(...rules: EmittableRule[]): ArrayOfMarker;
|
|
14
|
+
export interface FieldTransformParams {
|
|
15
|
+
value: unknown;
|
|
16
|
+
key: string;
|
|
17
|
+
obj: Record<string, unknown>;
|
|
18
|
+
direction: 'deserialize' | 'serialize';
|
|
19
|
+
}
|
|
20
|
+
export interface JsonSchemaOverride {
|
|
21
|
+
title?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
default?: unknown;
|
|
24
|
+
examples?: unknown[];
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface FieldOptions {
|
|
28
|
+
/** Nested DTO type. Thunk — supports circular references. [Dto] for arrays. */
|
|
29
|
+
type?: () => (new (...args: any[]) => any) | (new (...args: any[]) => any)[];
|
|
30
|
+
/** Polymorphic discriminator configuration — used with type */
|
|
31
|
+
discriminator?: {
|
|
32
|
+
property: string;
|
|
33
|
+
subTypes: {
|
|
34
|
+
value: Function;
|
|
35
|
+
name: string;
|
|
36
|
+
}[];
|
|
37
|
+
};
|
|
38
|
+
/** Whether to keep the discriminator property in the result object */
|
|
39
|
+
keepDiscriminatorProperty?: boolean;
|
|
40
|
+
/** Validation rules array */
|
|
41
|
+
rules?: (EmittableRule | ArrayOfMarker)[];
|
|
42
|
+
/** Allow undefined */
|
|
43
|
+
optional?: boolean;
|
|
44
|
+
/** Allow null */
|
|
45
|
+
nullable?: boolean;
|
|
46
|
+
/** JSON key mapping (bidirectional) */
|
|
47
|
+
name?: string;
|
|
48
|
+
/** Deserialize direction key mapping (cannot be used with name) */
|
|
49
|
+
deserializeName?: string;
|
|
50
|
+
/** Serialize direction key mapping (cannot be used with name) */
|
|
51
|
+
serializeName?: string;
|
|
52
|
+
/** Field exclusion — true: bidirectional, 'deserializeOnly': deserialization only, 'serializeOnly': serialization only */
|
|
53
|
+
exclude?: boolean | 'deserializeOnly' | 'serializeOnly';
|
|
54
|
+
/** Groups — field visibility control + conditional validation rule application */
|
|
55
|
+
groups?: string[];
|
|
56
|
+
/** Conditional validation — skip all field validation when false */
|
|
57
|
+
when?: (obj: any) => boolean;
|
|
58
|
+
/** JSON Schema custom override (property level) */
|
|
59
|
+
schema?: JsonSchemaOverride;
|
|
60
|
+
/** Value transform function */
|
|
61
|
+
transform?: (params: FieldTransformParams) => unknown;
|
|
62
|
+
/** Transform direction restriction */
|
|
63
|
+
transformDirection?: 'deserializeOnly' | 'serializeOnly';
|
|
64
|
+
/** Error message on validation failure — applied to all rules of the field (rule's own message takes precedence) */
|
|
65
|
+
message?: string | ((args: {
|
|
66
|
+
property: string;
|
|
67
|
+
value: unknown;
|
|
68
|
+
constraints: Record<string, unknown>;
|
|
69
|
+
}) => string);
|
|
70
|
+
/** Error context on validation failure — applied to all rules of the field (rule's own context takes precedence) */
|
|
71
|
+
context?: unknown;
|
|
72
|
+
/** Nested DTO class thunk for Map values — used with type: () => Map */
|
|
73
|
+
mapValue?: () => new (...args: any[]) => any;
|
|
74
|
+
/** Nested DTO class thunk for Set elements — used with type: () => Set */
|
|
75
|
+
setValue?: () => new (...args: any[]) => any;
|
|
76
|
+
}
|
|
77
|
+
type RuleArg = EmittableRule | ArrayOfMarker;
|
|
78
|
+
/** @Field() — empty field registration */
|
|
79
|
+
export declare function Field(): PropertyDecorator;
|
|
80
|
+
/** @Field(isString(), email()) — variadic rules */
|
|
81
|
+
export declare function Field(...rules: RuleArg[]): PropertyDecorator;
|
|
82
|
+
/** @Field({ type: () => Dto }) — options object */
|
|
83
|
+
export declare function Field(options: FieldOptions): PropertyDecorator;
|
|
84
|
+
/** @Field(isString(), { optional: true }) — rules + options mixed */
|
|
85
|
+
export declare function Field(...rulesAndOptions: [...RuleArg[], FieldOptions]): PropertyDecorator;
|
|
86
|
+
export {};
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export type { NestedOptions } from './nested';
|
|
4
|
-
export { IsString, IsNumber, IsBoolean, IsDate, IsEnum, IsInt, IsArray, IsObject, } from './typechecker';
|
|
5
|
-
export { Min, Max, IsPositive, IsNegative, IsDivisibleBy, } from './number';
|
|
6
|
-
export { MinDate, MaxDate, } from './date';
|
|
7
|
-
export { MinLength, MaxLength, Length, Contains, NotContains, Matches, IsLowercase, IsUppercase, IsAscii, IsAlpha, IsAlphanumeric, IsBooleanString, IsNumberString, IsDecimal, IsFullWidth, IsHalfWidth, IsVariableWidth, IsMultibyte, IsSurrogatePair, IsHexadecimal, IsOctal, IsEmail, IsURL, IsUUID, IsIP, IsHexColor, IsRgbColor, IsHSL, IsMACAddress, IsISBN, IsISIN, IsISO8601, IsISRC, IsISSN, IsJWT, IsLatLong, IsLocale, IsDataURI, IsFQDN, IsPort, IsEAN, IsISO31661Alpha2, IsISO31661Alpha3, IsBIC, IsFirebasePushId, IsSemVer, IsMongoId, IsJSON, IsBase32, IsBase58, IsBase64, IsDateString, IsMimeType, IsCurrency, IsMagnetURI, IsCreditCard, IsIBAN, IsByteLength, IsHash, IsRFC3339, IsMilitaryTime, IsLatitude, IsLongitude, IsEthereumAddress, IsBtcAddress, IsISO4217CurrencyCode, IsPhoneNumber, IsStrongPassword, IsTaxId, } from './string';
|
|
8
|
-
export type { IsEmailOptions, IsURLOptions, IsBase32Options, IsBase64Options, IsDateStringOptions, IsCurrencyOptions, IsMACAddressOptions, IsIBANOptions, IsISSNOptions, IsFQDNOptions, IsLatLongOptions, IsISO8601Options, IsNumberStringOptions, IsDecimalOptions, IsStrongPasswordOptions, } from './string';
|
|
9
|
-
export { ArrayContains, ArrayNotContains, ArrayMinSize, ArrayMaxSize, ArrayUnique, ArrayNotEmpty, } from './array';
|
|
10
|
-
export { IsNotEmptyObject, IsInstance, } from './object';
|
|
11
|
-
export { Expose, Exclude, Transform, Type, } from './transform';
|
|
12
|
-
export type { ExposeOptions, ExcludeOptions, TransformOptions, TypeOptions, } from './transform';
|
|
13
|
-
export { Schema } from './schema';
|
|
14
|
-
export { IsMobilePhone, IsPostalCode, IsIdentityCard, IsPassportNumber, } from './locales';
|
|
1
|
+
export { Field, arrayOf } from './field';
|
|
2
|
+
export type { FieldOptions, FieldTransformParams, JsonSchemaOverride, ArrayOfMarker } from './field';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import"../../index-xdn55cz3.js";import{c as a,d as b}from"../../index-gcptd79v.js";import"../../index-70ggmxsa.js";export{a as arrayOf,b as Field};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=9E4BFE621FA3997464756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/src/errors.d.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Individual field error — minimum contract.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - 'invalidInput': input
|
|
6
|
-
* - 'isObject':
|
|
7
|
-
* - 'isArray':
|
|
8
|
-
* - 'invalidDiscriminator': discriminator
|
|
9
|
-
* - 'conversionFailed':
|
|
10
|
-
* - 'whitelistViolation':
|
|
4
|
+
* Reserved error codes:
|
|
5
|
+
* - 'invalidInput': when input is null, non-object, or array (path='')
|
|
6
|
+
* - 'isObject': when a nested @Type field's value is not an object
|
|
7
|
+
* - 'isArray': when an array-nested (each:true) field's value is not an array
|
|
8
|
+
* - 'invalidDiscriminator': when the discriminator value is not in subTypes
|
|
9
|
+
* - 'conversionFailed': when type conversion fails in enableImplicitConversion
|
|
10
|
+
* - 'whitelistViolation': when undeclared fields exist in input with whitelist: true
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* Future extension fields (message, expected, actual, etc.) must be added as Optional.
|
|
13
13
|
*/
|
|
14
14
|
export interface BakerError {
|
|
15
15
|
readonly path: string;
|
|
16
16
|
readonly code: string;
|
|
17
|
-
/**
|
|
17
|
+
/** User-defined error message — included only when the decorator message option is set */
|
|
18
18
|
readonly message?: string;
|
|
19
|
-
/**
|
|
19
|
+
/** User-defined context — included only when the decorator context option is set */
|
|
20
20
|
readonly context?: unknown;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* deserialize()
|
|
24
|
-
* errors
|
|
23
|
+
* Error thrown on deserialize() validation failure.
|
|
24
|
+
* The errors array contains all field errors.
|
|
25
25
|
*/
|
|
26
26
|
export declare class BakerValidationError extends Error {
|
|
27
27
|
readonly errors: BakerError[];
|
|
28
|
-
/**
|
|
28
|
+
/** Target DTO class name for validation (DX-2) */
|
|
29
29
|
readonly className?: string;
|
|
30
30
|
constructor(errors: BakerError[], className?: string);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
* - seal()
|
|
35
|
-
* -
|
|
33
|
+
* Seal-related error:
|
|
34
|
+
* - When seal() is called more than once
|
|
35
|
+
* - When deserialize()/serialize() is called on an unsealed class
|
|
36
36
|
*/
|
|
37
37
|
export declare class SealError extends Error {
|
|
38
38
|
constructor(message: string);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { RuntimeOptions } from '../interfaces';
|
|
2
2
|
/**
|
|
3
|
-
* input
|
|
4
|
-
* -
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
3
|
+
* Converts input to a Class instance + validates.
|
|
4
|
+
* - Auto-seals on first call (batches entire globalRegistry)
|
|
5
|
+
* - DTOs without async transform/rules run without `async function`, returned via Promise.resolve
|
|
6
|
+
* - Success: returns Promise<T>
|
|
7
|
+
* - Validation failure: BakerValidationError (rejected promise)
|
|
8
|
+
* - Class without decorators: throws SealError
|
|
7
9
|
*/
|
|
8
10
|
export declare function deserialize<T>(Class: new (...args: any[]) => T, input: unknown, options?: RuntimeOptions): Promise<T>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { RuntimeOptions } from '../interfaces';
|
|
2
2
|
/**
|
|
3
|
-
* Class
|
|
4
|
-
* -
|
|
5
|
-
* - async
|
|
6
|
-
* -
|
|
3
|
+
* Converts a Class instance to a plain object.
|
|
4
|
+
* - Auto-seals on first call (batches entire globalRegistry)
|
|
5
|
+
* - DTOs without async transforms run without `async function`, returned via Promise.resolve
|
|
6
|
+
* - No validation — always returns Record<string, unknown>
|
|
7
|
+
* - Class without decorators: throws SealError
|
|
7
8
|
*/
|
|
8
9
|
export declare function serialize<T>(instance: T, options?: RuntimeOptions): Promise<Record<string, unknown>>;
|
|
@@ -2,13 +2,19 @@ import type { JsonSchema202012 } from '../types';
|
|
|
2
2
|
export interface ToJsonSchemaOptions {
|
|
3
3
|
direction?: 'deserialize' | 'serialize';
|
|
4
4
|
groups?: string[];
|
|
5
|
-
/** true:
|
|
5
|
+
/** true: adds unevaluatedProperties: false to all object schemas (corresponds to seal's whitelist option) */
|
|
6
6
|
whitelist?: boolean;
|
|
7
|
+
/** Class-level JSON Schema metadata (title, description, etc.) */
|
|
8
|
+
title?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
$id?: string;
|
|
11
|
+
/** Callback for unmapped rules (default: console.warn) */
|
|
12
|
+
onUnmappedRule?: (ruleName: string, fieldKey: string) => void;
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
12
|
-
* - seal()
|
|
15
|
+
* Converts a registered DTO class to JSON Schema Draft 2020-12 format.
|
|
16
|
+
* - Root class is inlined, nested classes are placed in $defs
|
|
17
|
+
* - Circular references are safely handled via $ref
|
|
18
|
+
* - Can be called before seal() (uses RAW metadata directly)
|
|
13
19
|
*/
|
|
14
20
|
export declare function toJsonSchema(Class: Function, options?: ToJsonSchemaOptions): JsonSchema202012;
|
package/dist/src/interfaces.d.ts
CHANGED
|
@@ -1,53 +1,32 @@
|
|
|
1
|
-
export interface ValidationOptions {
|
|
2
|
-
/** true: 배열의 각 원소에 규칙 적용 */
|
|
3
|
-
each?: boolean;
|
|
4
|
-
/** 이 규칙이 속하는 그룹 목록 */
|
|
5
|
-
groups?: string[];
|
|
6
|
-
/** 사용자 정의 에러 메시지 — 검증 실패 시 BakerError.message에 포함 */
|
|
7
|
-
message?: string | ((args: {
|
|
8
|
-
property: string;
|
|
9
|
-
value: unknown;
|
|
10
|
-
constraints: Record<string, unknown>;
|
|
11
|
-
}) => string);
|
|
12
|
-
/** 검증 실패 시 BakerError.context에 포함할 임의 값 */
|
|
13
|
-
context?: unknown;
|
|
14
|
-
}
|
|
15
1
|
export interface SealOptions {
|
|
16
2
|
/**
|
|
17
|
-
*
|
|
3
|
+
* Automatic conversion using validation decorators as type hints.
|
|
18
4
|
* @default false
|
|
19
5
|
*/
|
|
20
6
|
enableImplicitConversion?: boolean;
|
|
21
7
|
/**
|
|
22
|
-
*
|
|
23
|
-
* 'auto' = 정적 분석으로 필요한 DTO만 WeakSet 삽입.
|
|
24
|
-
* @default 'auto'
|
|
25
|
-
*/
|
|
26
|
-
enableCircularCheck?: boolean | 'auto';
|
|
27
|
-
/**
|
|
28
|
-
* input에 해당 키가 없을 때 클래스 기본값을 사용.
|
|
8
|
+
* Use class default values when the key is missing from input.
|
|
29
9
|
* @default false
|
|
30
10
|
*/
|
|
31
11
|
exposeDefaultValues?: boolean;
|
|
32
12
|
/**
|
|
33
|
-
* true:
|
|
13
|
+
* true: return immediately on first error. false (default): collect all errors.
|
|
34
14
|
* @default false
|
|
35
15
|
*/
|
|
36
16
|
stopAtFirstError?: boolean;
|
|
37
17
|
/**
|
|
38
|
-
* true:
|
|
39
|
-
*
|
|
18
|
+
* true: reject undeclared fields. Uses the key set from mergeInheritance(Class) as the allowlist.
|
|
19
|
+
* @Exclude fields are also included in the whitelist — their presence is allowed but they are excluded from the result.
|
|
40
20
|
* @default false
|
|
41
21
|
*/
|
|
42
|
-
|
|
22
|
+
whitelist?: boolean;
|
|
43
23
|
/**
|
|
44
|
-
* true:
|
|
45
|
-
* @Exclude 필드도 whitelist에 포함 — 존재는 허용하되 결과에서 제외.
|
|
24
|
+
* true: include field exclusion reasons as comments in generated code.
|
|
46
25
|
* @default false
|
|
47
26
|
*/
|
|
48
|
-
|
|
27
|
+
debug?: boolean;
|
|
49
28
|
}
|
|
50
29
|
export interface RuntimeOptions {
|
|
51
|
-
/**
|
|
30
|
+
/** Per-request groups — passed at runtime since they may vary per request */
|
|
52
31
|
groups?: string[];
|
|
53
32
|
}
|
package/dist/src/registry.d.ts
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Global registry — automatically registers classes with at least one decorator attached
|
|
3
3
|
*
|
|
4
|
-
* - ensureMeta()
|
|
5
|
-
* - seal()
|
|
6
|
-
* -
|
|
4
|
+
* - Automatically called from ensureMeta()
|
|
5
|
+
* - seal() iterates this Set to seal all DTOs
|
|
6
|
+
* - Metadata is not stored here — used only as an index (which classes are registered)
|
|
7
7
|
*/
|
|
8
8
|
export declare const globalRegistry: Set<Function>;
|
|
9
|
-
/**
|
|
10
|
-
* 클래스를 레지스트리에서 제거한다.
|
|
11
|
-
* seal() 후 더 이상 필요 없는 DTO를 GC 대상으로 돌린다 (§L1).
|
|
12
|
-
*
|
|
13
|
-
* @param cls 제거할 클래스 생성자
|
|
14
|
-
* @returns 세트에 존재했는지 여부
|
|
15
|
-
*/
|
|
16
|
-
export declare function unregister(cls: Function): boolean;
|
|
@@ -9,3 +9,5 @@ export { arrayContains, arrayNotContains, arrayMinSize, arrayMaxSize, arrayUniqu
|
|
|
9
9
|
export { isNotEmptyObject, isInstance } from './object';
|
|
10
10
|
export type { IsNotEmptyObjectOptions } from './object';
|
|
11
11
|
export { isMobilePhone, isPostalCode, isIdentityCard, isPassportNumber } from './locales';
|
|
12
|
+
export { arrayOf } from '../decorators/field';
|
|
13
|
+
export type { ArrayOfMarker } from '../decorators/field';
|
package/dist/src/rules/index.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{c as xz}from"../../index-gcptd79v.js";import"../../index-70ggmxsa.js";var P=(b)=>typeof b==="string";P.emit=(b,z)=>`if (typeof ${b} !== 'string') ${z.fail("isString")};`;P.ruleName="isString";P.constraints={};var d6=P;function S6(b){let z=b?.allowNaN??!1,Q=b?.allowInfinity??!1,j=b?.maxDecimalPlaces,Z=($)=>{if(typeof $!=="number")return!1;if(isNaN($))return z;if(!isFinite($))return Q;if(j!==void 0){let K=$.toExponential().split("e"),W=(K[0].split(".")[1]||"").length,q=parseInt(K[1],10);if(Math.max(0,W-q)>j)return!1}return!0};return Z.emit=($,K)=>{let W=`if (typeof ${$} !== 'number') ${K.fail("isNumber")};`;if(!z)W+=`
|
|
3
|
+
else if (isNaN(${$})) ${K.fail("isNumber")};`;if(!Q)W+=`
|
|
4
|
+
else if (${$} === Infinity || ${$} === -Infinity) ${K.fail("isNumber")};`;if(j!==void 0)W+=`
|
|
5
|
+
else { var _exp=${$}.toExponential().split('e'); var _mant=(_exp[0].split('.')[1]||'').length; var _exp2=parseInt(_exp[1],10); if(Math.max(0,_mant-_exp2)>${j}) ${K.fail("isNumber")}; }`;return W},Z.ruleName="isNumber",Z.constraints={allowNaN:b?.allowNaN,allowInfinity:b?.allowInfinity,maxDecimalPlaces:b?.maxDecimalPlaces},Z}var C=(b)=>typeof b==="boolean";C.emit=(b,z)=>`if (typeof ${b} !== 'boolean') ${z.fail("isBoolean")};`;C.ruleName="isBoolean";C.constraints={};var p6=C,O=(b)=>b instanceof Date&&!isNaN(b.getTime());O.emit=(b,z)=>`if (!(${b} instanceof Date) || isNaN(${b}.getTime())) ${z.fail("isDate")};`;O.ruleName="isDate";O.constraints={};var o6=O;function R6(b){let z=Object.values(b),Q=(j)=>z.indexOf(j)!==-1;return Q.emit=(j,Z)=>{return`if (_refs[${Z.addRef(z)}].indexOf(${j}) === -1) ${Z.fail("isEnum")};`},Q.ruleName="isEnum",Q.constraints={values:Object.values(b)},Q}var Y=(b)=>typeof b==="number"&&Number.isInteger(b);Y.emit=(b,z)=>`if (typeof ${b} !== 'number' || !Number.isInteger(${b})) ${z.fail("isInt")};`;Y.ruleName="isInt";Y.requiresType="number";Y.constraints={};var f6=Y,k=(b)=>Array.isArray(b);k.emit=(b,z)=>`if (!Array.isArray(${b})) ${z.fail("isArray")};`;k.ruleName="isArray";k.constraints={};var s6=k,I=(b)=>typeof b==="object"&&b!==null&&!Array.isArray(b);I.emit=(b,z)=>`if (typeof ${b} !== 'object' || ${b} === null || Array.isArray(${b})) ${z.fail("isObject")};`;I.ruleName="isObject";I.constraints={};var E6=I;function _6(b,z){if(!Number.isFinite(b))throw Error(`min: bound must be a finite number, got ${b}`);let Q=z?.exclusive??!1,j=Q?(Z)=>Z>b:(Z)=>Z>=b;return j.emit=(Z,$)=>Q?`if (${Z} <= ${b}) ${$.fail("min")};`:`if (${Z} < ${b}) ${$.fail("min")};`,j.ruleName="min",j.requiresType="number",j.constraints=Q?{min:b,exclusive:!0}:{min:b},j}function i6(b,z){if(!Number.isFinite(b))throw Error(`max: bound must be a finite number, got ${b}`);let Q=z?.exclusive??!1,j=Q?(Z)=>Z<b:(Z)=>Z<=b;return j.emit=(Z,$)=>Q?`if (${Z} >= ${b}) ${$.fail("max")};`:`if (${Z} > ${b}) ${$.fail("max")};`,j.ruleName="max",j.requiresType="number",j.constraints=Q?{max:b,exclusive:!0}:{max:b},j}var V=(b)=>b>0;V.emit=(b,z)=>`if (${b} <= 0) ${z.fail("isPositive")};`;V.ruleName="isPositive";V.requiresType="number";V.constraints={min:0,exclusive:!0};var N6=V,M=(b)=>b<0;M.emit=(b,z)=>`if (${b} >= 0) ${z.fail("isNegative")};`;M.ruleName="isNegative";M.requiresType="number";M.constraints={max:0,exclusive:!0};var u6=M;function x6(b){if(b===0)throw Error("isDivisibleBy: divisor must not be zero");let z=(Q)=>Q%b===0;return z.emit=(Q,j)=>`if (${Q} % ${b} !== 0) ${j.fail("isDivisibleBy")};`,z.ruleName="isDivisibleBy",z.requiresType="number",z.constraints={divisor:b},z}function m6(b){let z=b.getTime(),Q=(j)=>j instanceof Date&&j.getTime()>=z;return Q.emit=(j,Z)=>{let $=Z.addRef(z);return`if (!(${j} instanceof Date) || ${j}.getTime() < _refs[${$}]) ${Z.fail("minDate")};`},Q.ruleName="minDate",Q.requiresType="date",Q.constraints={min:b.toISOString()},Q}function n6(b){let z=b.getTime(),Q=(j)=>j instanceof Date&&j.getTime()<=z;return Q.emit=(j,Z)=>{let $=Z.addRef(z);return`if (!(${j} instanceof Date) || ${j}.getTime() > _refs[${$}]) ${Z.fail("maxDate")};`},Q.ruleName="maxDate",Q.requiresType="date",Q.constraints={max:b.toISOString()},Q}function r6(b){let z=(Q)=>Q===b;return z.emit=(Q,j)=>{let Z=j.addRef(b);return`if (${Q} !== _refs[${Z}]) ${j.fail("equals")};`},z.ruleName="equals",z.constraints={value:b},z}function l6(b){let z=(Q)=>Q!==b;return z.emit=(Q,j)=>{let Z=j.addRef(b);return`if (${Q} === _refs[${Z}]) ${j.fail("notEquals")};`},z.ruleName="notEquals",z.constraints={value:b},z}var g=(b)=>b===void 0||b===null||b==="";g.emit=(b,z)=>`if (${b} !== undefined && ${b} !== null && ${b} !== '') ${z.fail("isEmpty")};`;g.ruleName="isEmpty";g.constraints={};var c6=g,T=(b)=>b!==void 0&&b!==null&&b!=="";T.emit=(b,z)=>`if (${b} === undefined || ${b} === null || ${b} === '') ${z.fail("isNotEmpty")};`;T.ruleName="isNotEmpty";T.constraints={};var t6=T;function v6(b){let z=new Set(b),Q=(j)=>z.has(j);return Q.emit=(j,Z)=>{return`if (!_refs[${Z.addRef(z)}].has(${j})) ${Z.fail("isIn")};`},Q.ruleName="isIn",Q.constraints={values:b},Q}function e6(b){let z=new Set(b),Q=(j)=>!z.has(j);return Q.emit=(j,Z)=>{return`if (_refs[${Z.addRef(z)}].has(${j})) ${Z.fail("isNotIn")};`},Q.ruleName="isNotIn",Q.constraints={values:b},Q}function J(b,z,Q,j="string",Z={}){let $=(K)=>{if(typeof K!=="string")return!1;return z(K)};if($.emit=Q,$.ruleName=b,j!==void 0)$.requiresType=j;return $.constraints=Z,$}function a6(b){let z=(Q)=>typeof Q==="string"&&Q.length>=b;return z.emit=(Q,j)=>`if (${Q}.length < ${b}) ${j.fail("minLength")};`,z.ruleName="minLength",z.requiresType="string",z.constraints={min:b},z}function bb(b){let z=(Q)=>typeof Q==="string"&&Q.length<=b;return z.emit=(Q,j)=>`if (${Q}.length > ${b}) ${j.fail("maxLength")};`,z.ruleName="maxLength",z.requiresType="string",z.constraints={max:b},z}function zb(b,z){let Q=(j)=>typeof j==="string"&&j.length>=b&&j.length<=z;return Q.emit=(j,Z)=>`if (${j}.length < ${b} || ${j}.length > ${z}) ${Z.fail("length")};`,Q.ruleName="length",Q.requiresType="string",Q.constraints={min:b,max:z},Q}function Qb(b){let z=(Q)=>typeof Q==="string"&&Q.includes(b);return z.emit=(Q,j)=>{let Z=j.addRef(b);return`if (${Q}.indexOf(_refs[${Z}]) === -1) ${j.fail("contains")};`},z.ruleName="contains",z.requiresType="string",z.constraints={seed:b},z}function jb(b){let z=(Q)=>typeof Q==="string"&&!Q.includes(b);return z.emit=(Q,j)=>{let Z=j.addRef(b);return`if (${Q}.indexOf(_refs[${Z}]) !== -1) ${j.fail("notContains")};`},z.ruleName="notContains",z.requiresType="string",z.constraints={seed:b},z}function Zb(b,z){let Q=b instanceof RegExp?b:new RegExp(b,z),j=(Z)=>typeof Z==="string"&&Q.test(Z);return j.emit=(Z,$)=>{return`if (!_re[${$.addRegex(Q)}].test(${Z})) ${$.fail("matches")};`},j.ruleName="matches",j.requiresType="string",j.constraints={pattern:Q.source},j}var F=(b)=>typeof b==="string"&&b===b.toLowerCase();F.emit=(b,z)=>`if (${b} !== ${b}.toLowerCase()) ${z.fail("isLowercase")};`;F.ruleName="isLowercase";F.requiresType="string";F.constraints={};var $b=F,G=(b)=>typeof b==="string"&&b===b.toUpperCase();G.emit=(b,z)=>`if (${b} !== ${b}.toUpperCase()) ${z.fail("isUppercase")};`;G.ruleName="isUppercase";G.requiresType="string";G.constraints={};var Kb=G,E=/^[\x00-\x7F]*$/,Jb=J("isAscii",(b)=>E.test(b),(b,z)=>{return`if (!_re[${z.addRegex(E)}].test(${b})) ${z.fail("isAscii")};`}),k6=/^[a-zA-Z]+$/;function qb(b){return typeof b==="string"&&b.length>0&&k6.test(b)}var h=function b(z){if(z===void 0)return b;return qb(z)};h.emit=(b,z)=>{return`if (!_re[${z.addRegex(k6)}].test(${b})) ${z.fail("isAlpha")};`};h.ruleName="isAlpha";h.requiresType="string";h.constraints={};var Wb=h,I6=/^[a-zA-Z0-9]+$/;function wb(b){return typeof b==="string"&&b.length>0&&I6.test(b)}var X=function b(z){if(z===void 0)return b;return wb(z)};X.emit=(b,z)=>{return`if (!_re[${z.addRegex(I6)}].test(${b})) ${z.fail("isAlphanumeric")};`};X.ruleName="isAlphanumeric";X.requiresType="string";X.constraints={};var Yb=X,B=(b)=>b==="true"||b==="false"||b==="1"||b==="0";B.emit=(b,z)=>`if (${b} !== 'true' && ${b} !== 'false' && ${b} !== '1' && ${b} !== '0') ${z.fail("isBooleanString")};`;B.ruleName="isBooleanString";B.requiresType="string";B.constraints={};var Vb=B;function Mb(b){return J("isNumberString",(z)=>{if(z.length===0)return!1;let Q=Number(z);return!isNaN(Q)&&isFinite(Q)},(z,Q)=>{let j=($)=>{if($.length===0)return!1;let K=Number($);return!isNaN(K)&&isFinite(K)};return`if (!_refs[${Q.addRef(j)}](${z})) ${Q.fail("isNumberString")};`})}function Fb(b){let z=/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)$/;return J("isDecimal",(Q)=>z.test(Q),(Q,j)=>{return`if (!_re[${j.addRegex(z)}].test(${Q})) ${j.fail("isDecimal")};`})}var d=/[^\u0020-\u007E\uFF61-\uFF9F]/,Gb=J("isFullWidth",(b)=>b.length>0&&d.test(b),(b,z)=>{let Q=z.addRegex(d);return`if (${b}.length === 0 || !_re[${Q}].test(${b})) ${z.fail("isFullWidth")};`}),S=/[\u0020-\u007E\uFF61-\uFF9F]/,hb=J("isHalfWidth",(b)=>b.length>0&&S.test(b),(b,z)=>{let Q=z.addRegex(S);return`if (${b}.length === 0 || !_re[${Q}].test(${b})) ${z.fail("isHalfWidth")};`}),Xb=J("isVariableWidth",(b)=>b.length>0&&d.test(b)&&S.test(b),(b,z)=>{let Q=z.addRegex(d),j=z.addRegex(S);return`if (${b}.length === 0 || !_re[${Q}].test(${b}) || !_re[${j}].test(${b})) ${z.fail("isVariableWidth")};`}),_=/[^\x00-\xFF]/,Bb=J("isMultibyte",(b)=>b.length>0&&_.test(b),(b,z)=>{let Q=z.addRegex(_);return`if (${b}.length === 0 || !_re[${Q}].test(${b})) ${z.fail("isMultibyte")};`}),i=/[\uD800-\uDBFF][\uDC00-\uDFFF]/,Ub=J("isSurrogatePair",(b)=>b.length>0&&i.test(b),(b,z)=>{let Q=z.addRegex(i);return`if (${b}.length === 0 || !_re[${Q}].test(${b})) ${z.fail("isSurrogatePair")};`}),N=/^[0-9a-fA-F]+$/,Db=J("isHexadecimal",(b)=>N.test(b),(b,z)=>{return`if (!_re[${z.addRegex(N)}].test(${b})) ${z.fail("isHexadecimal")};`}),u=/^(0[oO])?[0-7]+$/,Hb=J("isOctal",(b)=>b.length>0&&u.test(b),(b,z)=>{let Q=z.addRegex(u);return`if (${b}.length === 0 || !_re[${Q}].test(${b})) ${z.fail("isOctal")};`}),x=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$/;function yb(b){return J("isEmail",(z)=>x.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(x)}].test(${z})) ${Q.fail("isEmail")};`},"string",{format:"email"})}var Pb=["http","https","ftp"];function Cb(b){let Q=(b?.protocols??Pb).map(($)=>$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),j=new RegExp(`^(?:${Q}):\\/\\/(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)(?::(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3}|0))?(?:\\/[^\\s]*)?$`),Z=($)=>{if(typeof $!=="string"||$.length===0)return!1;return j.test($)};return Z.emit=($,K)=>{return`if (!_re[${K.addRegex(j)}].test(${$})) ${K.fail("isURL")};`},Z.ruleName="isURL",Z.requiresType="string",Z.constraints={format:"uri"},Z}var f={all:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,1:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-1[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,2:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-2[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,3:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-3[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,4:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/,5:/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-5[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/};function Ob(b){let z=b!=null?f[b]??f.all:f.all;return J("isUUID",(Q)=>z.test(Q),(Q,j)=>{return`if (!_re[${j.addRegex(z)}].test(${Q})) ${j.fail("isUUID")};`},"string",{format:"uuid"})}var L=/^(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/,A=/^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}$|^(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}$|^(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}$|^[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}$|^::$|^::1$|^::(?:ffff(?::0{1,4})?:)?(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$|^(?:[0-9a-fA-F]{1,4}:){1,4}:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/;function kb(b){let z=(Q)=>{if(typeof Q!=="string")return!1;if(b===4)return L.test(Q);if(b===6)return A.test(Q);return L.test(Q)||A.test(Q)};return z.emit=(Q,j)=>{if(b===4)return`if (!_re[${j.addRegex(L)}].test(${Q})) ${j.fail("isIP")};`;if(b===6)return`if (!_re[${j.addRegex(A)}].test(${Q})) ${j.fail("isIP")};`;let Z=j.addRegex(L),$=j.addRegex(A);return`if (!_re[${Z}].test(${Q}) && !_re[${$}].test(${Q})) ${j.fail("isIP")};`},z.ruleName="isIP",z.requiresType="string",z.constraints={version:b},z}var m=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Ib=J("isHexColor",(b)=>m.test(b),(b,z)=>{return`if (!_re[${z.addRegex(m)}].test(${b})) ${z.fail("isHexColor")};`}),n=/^rgb\(\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*\)$/,r=/^rgba\(\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\s*,\s*(0|0?\.\d+|1(\.0+)?)\s*\)$/,l=/^rgba?\(\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%\s*,\s*(\d{1,2}|100)%(?:\s*,\s*(0|0?\.\d+|1(?:\.0+)?))?\s*\)$/;function gb(b=!1){let z=(Q)=>{if(typeof Q!=="string")return!1;if(b)return l.test(Q);return n.test(Q)||r.test(Q)};return z.emit=(Q,j)=>{if(b)return`if (!_re[${j.addRegex(l)}].test(${Q})) ${j.fail("isRgbColor")};`;let Z=j.addRegex(n),$=j.addRegex(r);return`if (!_re[${Z}].test(${Q}) && !_re[${$}].test(${Q})) ${j.fail("isRgbColor")};`},z.ruleName="isRgbColor",z.requiresType="string",z.constraints={},z}var c=/^hsla?\(\s*(360|3[0-5]\d|[12]\d{2}|[1-9]\d|\d)\s*,\s*(100|[1-9]\d|\d)%\s*,\s*(100|[1-9]\d|\d)%(?:\s*,\s*(0|0?\.\d+|1(?:\.0+)?))?\s*\)$/,Tb=J("isHSL",(b)=>c.test(b),(b,z)=>{return`if (!_re[${z.addRegex(c)}].test(${b})) ${z.fail("isHSL")};`}),t=/^[0-9a-fA-F]{2}(?::[0-9a-fA-F]{2}){5}$/,v=/^[0-9a-fA-F]{2}(?:-[0-9a-fA-F]{2}){5}$/,e=/^[0-9a-fA-F]{12}$/;function Lb(b){let z=(Q)=>{if(typeof Q!=="string")return!1;if(b?.no_separators)return e.test(Q);return t.test(Q)||v.test(Q)};return z.emit=(Q,j)=>{if(b?.no_separators)return`if (!_re[${j.addRegex(e)}].test(${Q})) ${j.fail("isMACAddress")};`;let Z=j.addRegex(t),$=j.addRegex(v);return`if (!_re[${Z}].test(${Q}) && !_re[${$}].test(${Q})) ${j.fail("isMACAddress")};`},z.ruleName="isMACAddress",z.requiresType="string",z.constraints={},z}function a(b){let z=b.replace(/[-\s]/g,"");if(!/^\d{9}[\dX]$/.test(z))return!1;let Q=0;for(let Z=0;Z<9;Z++)Q+=(10-Z)*(z.charCodeAt(Z)-48);let j=z[9]==="X"?10:z.charCodeAt(9)-48;return Q+=j,Q%11===0}function b6(b){let z=b.replace(/[-\s]/g,"");if(!/^\d{13}$/.test(z))return!1;let Q=0;for(let Z=0;Z<12;Z++)Q+=(z.charCodeAt(Z)-48)*(Z%2===0?1:3);return(10-Q%10)%10===z.charCodeAt(12)-48}function Ab(b){let z=(Q)=>{if(typeof Q!=="string")return!1;if(b===10)return a(Q);if(b===13)return b6(Q);return a(Q)||b6(Q)};return z.emit=(Q,j)=>{return`if (!_refs[${j.addRef(z)}](${Q})) ${j.fail("isISBN")};`},z.ruleName="isISBN",z.requiresType="string",z.constraints={},z}var db=/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/;function z6(b){if(!db.test(b))return!1;let z=b.split("").map((Z)=>{let $=Z.charCodeAt(0);return $>=65?String($-55):Z}).join(""),Q=0,j=!1;for(let Z=z.length-1;Z>=0;Z--){let $=parseInt(z[Z],10);if(j){if($*=2,$>9)$-=9}Q+=$,j=!j}return Q%10===0}var Sb=J("isISIN",z6,(b,z)=>{return`if (!_refs[${z.addRef(z6)}](${b})) ${z.fail("isISIN")};`}),s=/^\d{4}(?:-\d{2}(?:-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?)?)?$/;function pb(b){if(!s.test(b))return!1;let z=b.match(/^(\d{4})-(\d{2})-(\d{2})/);if(!z)return!0;let Q=Number(z[2]),j=Number(z[3]);if(Q<1||Q>12)return!1;let Z=new Date(Number(z[1]),Q,0).getDate();return j>=1&&j<=Z}function ob(b){if(b?.strict){let z=(Q)=>{if(typeof Q!=="string")return!1;return pb(Q)};return z.ruleName="isISO8601",z.emit=(Q,j)=>{return`if (!_refs[${j.addRef(z)}](${Q})) ${j.fail("isISO8601")};`},z.constraints={format:"date-time"},z}return J("isISO8601",(z)=>s.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(s)}].test(${z})) ${Q.fail("isISO8601")};`},"string",{format:"date-time"})}var Q6=/^[A-Z]{2}-[A-Z0-9]{3}-\d{2}-\d{5}$|^[A-Z]{2}[A-Z0-9]{3}\d{7}$/,Rb=J("isISRC",(b)=>Q6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(Q6)}].test(${b})) ${z.fail("isISRC")};`});function fb(b,z){let Q=z?.requireHyphen!==!1,j=Q?b:b.replace(/-/g,"");if(!(Q?/^\d{4}-\d{3}[\dX]$/:/^\d{7}[\dX]$/).test(j))return!1;let $=j.replace(/-/g,""),K=0;for(let q=0;q<7;q++)K+=(8-q)*($.charCodeAt(q)-48);let W=$[7]==="X"?10:$.charCodeAt(7)-48;return K+=W,K%11===0}function sb(b){let z=(Q)=>{if(typeof Q!=="string")return!1;return fb(Q,b)};return z.emit=(Q,j)=>{return`if (!_refs[${j.addRef(z)}](${Q})) ${j.fail("isISSN")};`},z.ruleName="isISSN",z.requiresType="string",z.constraints={},z}var j6=/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/,Eb=J("isJWT",(b)=>j6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(j6)}].test(${b})) ${z.fail("isJWT")};`}),Z6=/^[-+]?([1-8]?\d(?:\.\d+)?|90(?:\.0+)?),\s*[-+]?(180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$/;function _b(b){return J("isLatLong",(z)=>Z6.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(Z6)}].test(${z})) ${Q.fail("isLatLong")};`})}var $6=/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?(?:-[a-zA-Z\d]{5,8})*$/,ib=J("isLocale",(b)=>$6.test(b),(b,z)=>{return`if (!_re[${z.addRegex($6)}].test(${b})) ${z.fail("isLocale")};`}),K6=/^data:([a-zA-Z0-9!#$&\-^_]+\/[a-zA-Z0-9!#$&\-^_]+)(?:;[a-zA-Z0-9\-]+=[a-zA-Z0-9\-]+)*(?:;base64)?,[\s\S]*$/,Nb=J("isDataURI",(b)=>K6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(K6)}].test(${b})) ${z.fail("isDataURI")};`});function ub(b){let z=b?.require_tld!==!1,Q=(j)=>{if(typeof j!=="string")return!1;let Z=j;if(b?.allow_trailing_dot&&Z.endsWith("."))Z=Z.slice(0,-1);if(Z.length===0)return!1;let $=Z.split(".");if(z&&$.length<2)return!1;if(z){let K=$[$.length-1];if(!K||K.length<2||!/^[a-zA-Z]{2,}$/.test(K))return!1}return $.every((K)=>{if(K.length===0||K.length>63)return!1;if(b?.allow_underscores)return/^[a-zA-Z0-9_-]+$/.test(K);return/^[a-zA-Z0-9-]+$/.test(K)&&!K.startsWith("-")&&!K.endsWith("-")})};return Q.emit=(j,Z)=>{return`if (!_refs[${Z.addRef(Q)}](${j})) ${Z.fail("isFQDN")};`},Q.ruleName="isFQDN",Q.requiresType="string",Q.constraints={},Q}var J6=/^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{1,3}|\d)$/,xb=J("isPort",(b)=>J6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(J6)}].test(${b})) ${z.fail("isPort")};`});function q6(b){if(!/^\d{8}$/.test(b)&&!/^\d{13}$/.test(b))return!1;let z=b.split("").map(Number),Q=z.length,j=0;for(let $=0;$<Q-1;$++)j+=z[$]*(Q===8?$%2===0?3:1:$%2===0?1:3);return(10-j%10)%10===z[Q-1]}var mb=J("isEAN",q6,(b,z)=>{return`if (!_refs[${z.addRef(q6)}](${b})) ${z.fail("isEAN")};`}),g6=new Set(["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]),U=(b)=>{if(typeof b!=="string")return!1;return g6.has(b.toUpperCase())};U.emit=(b,z)=>{return`if (!_refs[${z.addRef(g6)}].has(${b}.toUpperCase())) ${z.fail("isISO31661Alpha2")};`};U.ruleName="isISO31661Alpha2";U.requiresType="string";U.constraints={};var nb=U,T6=new Set(["ABW","AFG","AGO","AIA","ALA","ALB","AND","ANT","ARE","ARG","ARM","ASM","ATA","ATF","ATG","AUS","AUT","AZE","BDI","BEL","BEN","BES","BFA","BGD","BGR","BHR","BHS","BIH","BLM","BLR","BLZ","BMU","BOL","BRA","BRB","BRN","BTN","BVT","BWA","CAF","CAN","CCK","CHE","CHL","CHN","CIV","CMR","COD","COG","COK","COL","COM","CPV","CRI","CUB","CUW","CXR","CYM","CYP","CZE","DEU","DJI","DMA","DNK","DOM","DZA","ECU","EGY","ERI","ESH","ESP","EST","ETH","FIN","FJI","FLK","FRA","FRO","FSM","GAB","GBR","GEO","GGY","GHA","GIB","GIN","GLP","GMB","GNB","GNQ","GRC","GRD","GRL","GTM","GUF","GUM","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN","IMN","IND","IOT","IRL","IRN","IRQ","ISL","ISR","ITA","JAM","JEY","JOR","JPN","KAZ","KEN","KGZ","KHM","KIR","KNA","KOR","KWT","LAO","LBN","LBR","LBY","LCA","LIE","LKA","LSO","LTU","LUX","LVA","MAC","MAF","MAR","MCO","MDA","MDG","MDV","MEX","MHL","MKD","MLI","MLT","MMR","MNE","MNG","MNP","MOZ","MRT","MSR","MTQ","MUS","MWI","MYS","MYT","NAM","NCL","NER","NFK","NGA","NIC","NIU","NLD","NOR","NPL","NRU","NZL","OMN","PAK","PAN","PCN","PER","PHL","PLW","PNG","POL","PRI","PRK","PRT","PRY","PSE","PYF","QAT","REU","ROU","RUS","RWA","SAU","SDN","SEN","SGP","SGS","SHN","SJM","SLB","SLE","SLV","SMR","SOM","SPM","SRB","SSD","STP","SUR","SVK","SVN","SWE","SWZ","SXM","SYC","SYR","TCA","TCD","TGO","THA","TJK","TKL","TKM","TLS","TON","TTO","TUN","TUR","TUV","TWN","TZA","UGA","UKR","UMI","URY","USA","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT","WLF","WSM","YEM","ZAF","ZMB","ZWE"]),D=(b)=>{if(typeof b!=="string")return!1;return T6.has(b.toUpperCase())};D.emit=(b,z)=>{return`if (!_refs[${z.addRef(T6)}].has(${b}.toUpperCase())) ${z.fail("isISO31661Alpha3")};`};D.ruleName="isISO31661Alpha3";D.requiresType="string";D.constraints={};var rb=D,W6=/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/,lb=J("isBIC",(b)=>W6.test(b.toUpperCase()),(b,z)=>{return`if (!_re[${z.addRegex(W6)}].test(${b}.toUpperCase())) ${z.fail("isBIC")};`}),w6=/^[a-zA-Z0-9_-]{20}$/,cb=J("isFirebasePushId",(b)=>w6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(w6)}].test(${b})) ${z.fail("isFirebasePushId")};`}),Y6=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,tb=J("isSemVer",(b)=>Y6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(Y6)}].test(${b})) ${z.fail("isSemVer")};`}),V6=/^[0-9a-fA-F]{24}$/,vb=J("isMongoId",(b)=>V6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(V6)}].test(${b})) ${z.fail("isMongoId")};`}),H=(b)=>{if(typeof b!=="string")return!1;try{return JSON.parse(b),!0}catch{return!1}};H.emit=(b,z)=>{return`if (!_refs[${z.addRef((j)=>{try{return JSON.parse(j),!0}catch{return!1}})}](${b})) ${z.fail("isJSON")};`};H.ruleName="isJSON";H.requiresType="string";H.constraints={};var eb=H,ab=/^[A-Z2-7]+=*$/i;function bz(b){let z=ab;return J("isBase32",(Q)=>{if(Q.length===0)return!1;if(Q.length%8!==0)return!1;return z.test(Q)},(Q,j)=>{let Z=j.addRegex(z);return`if (${Q}.length === 0 || ${Q}.length % 8 !== 0 || !_re[${Z}].test(${Q})) ${j.fail("isBase32")};`})}var M6=/^[1-9A-HJ-NP-Za-km-z]+$/,zz=J("isBase58",(b)=>M6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(M6)}].test(${b})) ${z.fail("isBase58")};`}),Qz=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/,jz=/^[A-Za-z0-9_-]+={0,2}$/;function Zz(b){let z=b?.urlSafe?jz:Qz;return J("isBase64",(Q)=>{if(Q.length===0)return!1;return z.test(Q)},(Q,j)=>{let Z=j.addRegex(z);return`if (${Q}.length === 0 || !_re[${Z}].test(${Q})) ${j.fail("isBase64")};`})}var F6=/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;function $z(b){return J("isDateString",(z)=>F6.test(z),(z,Q)=>{return`if (!_re[${Q.addRegex(F6)}].test(${z})) ${Q.fail("isDateString")};`})}var G6=/^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-^_.+]*(?:;.+)?$/,Kz=J("isMimeType",(b)=>G6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(G6)}].test(${b})) ${z.fail("isMimeType")};`}),h6=/^[-+]?(?:[,.\d]+)(?:[.,]\d{2})?$|^\$?-?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{1,2})?$/;function Jz(b){return J("isCurrency",(z)=>{if(z.length===0)return!1;return h6.test(z)},(z,Q)=>{let j=Q.addRegex(h6);return`if (${z}.length === 0 || !_re[${j}].test(${z})) ${Q.fail("isCurrency")};`})}var X6=/^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}/i,qz=J("isMagnetURI",(b)=>X6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(X6)}].test(${b})) ${z.fail("isMagnetURI")};`});function Wz(b){let z=b.replace(/[\s-]/g,"");if(z.length===0||!/^\d+$/.test(z))return!1;let Q=0,j=!1;for(let Z=z.length-1;Z>=0;Z--){let $=z.charCodeAt(Z)-48;if(j){if($*=2,$>9)$-=9}Q+=$,j=!j}return Q%10===0}var y=(b)=>{if(typeof b!=="string")return!1;return Wz(b)};y.emit=(b,z)=>`{
|
|
6
|
+
var _cs=${b}.replace(/[\\s-]/g,'');
|
|
7
|
+
if(_cs.length===0||!/^\\d+$/.test(_cs)){${z.fail("isCreditCard")}}
|
|
8
|
+
else{var _sum=0,_alt=false;
|
|
9
|
+
for(var _ci=_cs.length-1;_ci>=0;_ci--){var _cn=_cs.charCodeAt(_ci)-48;if(_alt){_cn*=2;if(_cn>9)_cn-=9;}_sum+=_cn;_alt=!_alt;}
|
|
10
|
+
if(_sum%10!==0)${z.fail("isCreditCard")};}
|
|
11
|
+
}`;y.ruleName="isCreditCard";y.requiresType="string";y.constraints={};var wz=y,Yz={AD:24,AE:23,AL:28,AT:20,AZ:28,BA:20,BE:16,BG:22,BH:22,BR:29,CH:21,CR:22,CY:28,CZ:24,DE:22,DK:18,DO:28,EE:20,ES:24,FI:18,FO:18,FR:27,GB:22,GE:22,GI:23,GL:18,GR:27,GT:28,HR:21,HU:28,IE:22,IL:23,IS:26,IT:27,JO:30,KW:30,KZ:20,LB:28,LC:32,LI:21,LT:20,LU:20,LV:21,MC:27,MD:24,ME:22,MK:19,MR:27,MT:31,MU:30,NL:18,NO:15,PK:24,PL:28,PS:29,PT:25,QA:29,RO:24,RS:22,SA:24,SC:31,SE:24,SI:19,SK:24,SM:27,ST:25,SV:28,TL:23,TN:24,TR:26,UA:29,VA:22,VG:24,XK:20};function Vz(b,z){let Q=z?.allowSpaces?b.replace(/\s/g,""):b;if(Q=Q.toUpperCase(),!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(Q))return!1;let j=Q.slice(0,2),Z=Yz[j];if(Z!==void 0&&Q.length!==Z)return!1;let K=(Q.slice(4)+Q.slice(0,4)).replace(/[A-Z]/g,(q)=>String(q.charCodeAt(0)-55)),W=0;for(let q=0;q<K.length;q+=7){let w=String(W)+K.slice(q,q+7);W=parseInt(w,10)%97}return W===1}function Mz(b){let z=(Q)=>{if(typeof Q!=="string")return!1;return Vz(Q,b)};return z.emit=(Q,j)=>{return`if (!_refs[${j.addRef(z)}](${Q})) ${j.fail("isIBAN")};`},z.ruleName="isIBAN",z.requiresType="string",z.constraints={},z}function Fz(b,z){let Q=(j)=>{if(typeof j!=="string")return!1;let Z=Buffer.byteLength(j,"utf8");if(Z<b)return!1;if(z!==void 0&&Z>z)return!1;return!0};return Q.emit=(j,Z)=>{let $=(W)=>{let q=Buffer.byteLength(W,"utf8");if(q<b)return!1;if(z!==void 0&&q>z)return!1;return!0};return`if (!_refs[${Z.addRef($)}](${j})) ${Z.fail("isByteLength")};`},Q.ruleName="isByteLength",Q.requiresType="string",Q.constraints={},Q}var Gz={md5:/^[a-f0-9]{32}$/i,md4:/^[a-f0-9]{32}$/i,md2:/^[a-f0-9]{32}$/i,sha1:/^[a-f0-9]{40}$/i,sha256:/^[a-f0-9]{64}$/i,sha384:/^[a-f0-9]{96}$/i,sha512:/^[a-f0-9]{128}$/i,ripemd128:/^[a-f0-9]{32}$/i,ripemd160:/^[a-f0-9]{40}$/i,"tiger128,3":/^[a-f0-9]{32}$/i,"tiger128,4":/^[a-f0-9]{32}$/i,"tiger160,3":/^[a-f0-9]{40}$/i,"tiger160,4":/^[a-f0-9]{40}$/i,"tiger192,3":/^[a-f0-9]{48}$/i,"tiger192,4":/^[a-f0-9]{48}$/i,crc32:/^[a-f0-9]{8}$/i,crc32b:/^[a-f0-9]{8}$/i};function hz(b){let z=Gz[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isHash")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isHash")};`},Q.ruleName="isHash",Q.requiresType="string",Q.constraints={},Q}var B6=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/i,Xz=J("isRFC3339",(b)=>B6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(B6)}].test(${b})) ${z.fail("isRFC3339")};`}),U6=/^([01]\d|2[0-3]):[0-5]\d$/,Bz=J("isMilitaryTime",(b)=>U6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(U6)}].test(${b})) ${z.fail("isMilitaryTime")};`});function L6(b){if(typeof b==="number")return b>=-90&&b<=90;if(typeof b==="string"){let z=parseFloat(b);if(isNaN(z))return!1;if(String(z)!==b&&b!==String(z)){if(!/^-?\d+(\.\d+)?$/.test(b))return!1}return z>=-90&&z<=90}return!1}var p=(b)=>L6(b);p.emit=(b,z)=>{return`if (!_refs[${z.addRef(L6)}](${b})) ${z.fail("isLatitude")};`};p.ruleName="isLatitude";p.constraints={};var Uz=p;function A6(b){if(typeof b==="number")return b>=-180&&b<=180;if(typeof b==="string"){let z=parseFloat(b);if(isNaN(z))return!1;if(!/^-?\d+(\.\d+)?$/.test(b))return!1;return z>=-180&&z<=180}return!1}var o=(b)=>A6(b);o.emit=(b,z)=>{return`if (!_refs[${z.addRef(A6)}](${b})) ${z.fail("isLongitude")};`};o.ruleName="isLongitude";o.constraints={};var Dz=o,D6=/^0x[0-9a-fA-F]{40}$/,Hz=J("isEthereumAddress",(b)=>D6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(D6)}].test(${b})) ${z.fail("isEthereumAddress")};`}),H6=/^1[a-km-zA-HJ-NP-Z1-9]{25,34}$/,y6=/^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/,P6=/^(bc1)[a-z0-9]{6,87}$/,yz=J("isBtcAddress",(b)=>H6.test(b)||y6.test(b)||P6.test(b),(b,z)=>{let Q=z.addRegex(H6),j=z.addRegex(y6),Z=z.addRegex(P6);return`if (!_re[${Q}].test(${b}) && !_re[${j}].test(${b}) && !_re[${Z}].test(${b})) ${z.fail("isBtcAddress")};`}),C6=new Set(["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","YER","ZAR","ZMW","ZWL"]),Pz=J("isISO4217CurrencyCode",(b)=>C6.has(b),(b,z)=>{return`if (!_refs[${z.addRef(C6)}].has(${b})) ${z.fail("isISO4217CurrencyCode")};`}),O6=/^\+[1-9]\d{6,14}$/,Cz=J("isPhoneNumber",(b)=>O6.test(b),(b,z)=>{return`if (!_re[${z.addRegex(O6)}].test(${b})) ${z.fail("isPhoneNumber")};`});function Oz(b){let z=b?.minLength??8,Q=b?.minLowercase??1,j=b?.minUppercase??1,Z=b?.minNumbers??1,$=b?.minSymbols??1,K=(q)=>{if(q.length<z)return!1;if(Q>0){if((q.match(/[a-z]/g)||[]).length<Q)return!1}if(j>0){if((q.match(/[A-Z]/g)||[]).length<j)return!1}if(Z>0){if((q.match(/[0-9]/g)||[]).length<Z)return!1}if($>0){if((q.match(/[^a-zA-Z0-9]/g)||[]).length<$)return!1}return!0},W=(q)=>{if(typeof q!=="string")return!1;return K(q)};return W.emit=(q,w)=>{return`if (!_refs[${w.addRef(K)}](${q})) ${w.fail("isStrongPassword")};`},W.ruleName="isStrongPassword",W.requiresType="string",W.constraints={},W}var kz={US:/^\d{2}-\d{7}$/,KR:/^\d{3}-\d{2}-\d{5}$/,DE:/^\d{11}$/,FR:/^[0-9]{13}$/,GB:/^\d{10}$/,IT:/^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i,ES:/^[0-9A-Z]\d{7}[0-9A-Z]$/i,AU:/^\d{11}$/,CA:/^\d{9}$/,IN:/^[A-Z]{5}\d{4}[A-Z]$/i};function Iz(b){let z=kz[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isTaxId")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isTaxId")};`},Q.ruleName="isTaxId",Q.requiresType="string",Q.constraints={},Q}function gz(b){let z=(Q)=>{if(!Array.isArray(Q))return!1;let j=new Set(Q);return b.every((Z)=>j.has(Z))};return z.emit=(Q,j)=>{return`if (!_refs[${j.addRef(b)}].every(function(v){return ${Q}.indexOf(v)!==-1;})) ${j.fail("arrayContains")};`},z.ruleName="arrayContains",z.constraints={values:b},z}function Tz(b){let z=(Q)=>{if(!Array.isArray(Q))return!1;return b.every((j)=>!Q.includes(j))};return z.emit=(Q,j)=>{return`if (_refs[${j.addRef(b)}].some(function(v){return ${Q}.indexOf(v)!==-1;})) ${j.fail("arrayNotContains")};`},z.ruleName="arrayNotContains",z.constraints={values:b},z}function Lz(b){let z=(Q)=>Array.isArray(Q)&&Q.length>=b;return z.emit=(Q,j)=>`if (${Q}.length < ${b}) ${j.fail("arrayMinSize")};`,z.ruleName="arrayMinSize",z.constraints={min:b},z}function Az(b){let z=(Q)=>Array.isArray(Q)&&Q.length<=b;return z.emit=(Q,j)=>`if (${Q}.length > ${b}) ${j.fail("arrayMaxSize")};`,z.ruleName="arrayMaxSize",z.constraints={max:b},z}function dz(b){let z=(Q)=>{if(!Array.isArray(Q))return!1;if(b){let j=Q.map(b);return new Set(j).size===j.length}return new Set(Q).size===Q.length};return z.emit=(Q,j)=>{if(b){let Z=j.addRef(b);return`{var _keys=${Q}.map(_refs[${Z}]);if(new Set(_keys).size!==_keys.length)${j.fail("arrayUnique")};}`}return`if(new Set(${Q}).size!==${Q}.length)${j.fail("arrayUnique")};`},z.ruleName="arrayUnique",z.constraints={},z}var R=(b)=>Array.isArray(b)&&b.length>0;R.emit=(b,z)=>`if (${b}.length === 0) ${z.fail("arrayNotEmpty")};`;R.ruleName="arrayNotEmpty";R.constraints={};var Sz=R;function pz(b){let z=(Q)=>{if(Q===null||typeof Q!=="object"||Array.isArray(Q))return!1;let j=Object.keys(Q);if(b?.nullable)return j.some((Z)=>Q[Z]!=null);return j.length>0};return z.emit=(Q,j)=>{if(b?.nullable)return`if (!_refs[${j.addRef(z)}](${Q})) ${j.fail("isNotEmptyObject")};`;return`if (Object.keys(${Q}).length === 0) ${j.fail("isNotEmptyObject")};`},z.ruleName="isNotEmptyObject",z.constraints={nullable:b?.nullable},z}function oz(b){let z=(Q)=>Q instanceof b;return z.emit=(Q,j)=>{let Z=j.addRef(b);return`if (!(${Q} instanceof _refs[${Z}])) ${j.fail("isInstance")};`},z.ruleName="isInstance",z.constraints={type:b.name},z}var Rz={"ko-KR":/^(\+?82|0)1[016789]\d{7,8}$/,"en-US":/^\+?1?[2-9]\d{2}[2-9]\d{6}$/,"zh-CN":/^(\+?86)?1[3-9]\d{9}$/,"zh-TW":/^(\+?886)?9\d{8}$/,"ja-JP":/^(\+?81)?0?[789]0[0-9]{8}$/,"de-DE":/^(\+?49)?1(5\d|6[0-9]|7[0-9])\d{8}$/,"fr-FR":/^(\+?33)?[67]\d{8}$/,"en-GB":/^(\+?44)?7[1-9]\d{8}$/,"ru-RU":/^(\+?7)?9\d{9}$/,"pt-BR":/^(\+?55)?[1-9]{2}9?\d{8}$/,"in-IN":/^(\+?91)?[6-9]\d{9}$/,"ar-SA":/^(\+?966)?5\d{8}$/,"ar-EG":/^(\+?20)?1[0125]\d{8}$/,"vi-VN":/^(\+?84)?[35789]\d{8}$/,"th-TH":/^(\+?66)?[689]\d{8}$/,"id-ID":/^(\+?62)?8\d{9,11}$/,"ms-MY":/^(\+?60)?1\d{8,9}$/,"nl-NL":/^(\+?31)?6\d{8}$/,"it-IT":/^(\+?39)?3\d{9}$/,"es-ES":/^(\+?34)?[67]\d{8}$/,"pl-PL":/^(\+?48)?[45789]\d{8}$/};function fz(b){let z=Rz[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isMobilePhone")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isMobilePhone")};`},Q.ruleName="isMobilePhone",Q.requiresType="string",Q.constraints={locale:b},Q}var sz={AD:/^AD\d{3}$/,AT:/^\d{4}$/,AU:/^\d{4}$/,AZ:/^\d{4}$/,BE:/^\d{4}$/,BG:/^\d{4}$/,BR:/^\d{5}-?\d{3}$/,BY:/^\d{6}$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d$/i,CH:/^\d{4}$/,CN:/^\d{6}$/,CZ:/^\d{3} ?\d{2}$/,DE:/^\d{5}$/,DK:/^\d{4}$/,EE:/^\d{5}$/,ES:/^\d{5}$/,FI:/^\d{5}$/,FR:/^\d{2} ?\d{3}$/,GB:/^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPSTUW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$/i,GR:/^\d{3} ?\d{2}$/,HR:/^\d{5}$/,HU:/^\d{4}$/,ID:/^\d{5}$/,IL:/^\d{5}(\d{2})?$/,IN:/^\d{6}$/,IS:/^\d{3}$/,IT:/^\d{5}$/,JP:/^\d{3}-?\d{4}$/,KR:/^\d{5}$/,LI:/^(948[5-9]|949[0-7])$/,LT:/^LT-\d{5}$/,LU:/^\d{4}$/,LV:/^LV-\d{4}$/,MX:/^\d{5}$/,MT:/^[A-Z]{3} ?\d{4}$/i,MZ:/^\d{4}$/,NL:/^\d{4} ?[A-Z]{2}$/i,NO:/^\d{4}$/,NP:/^\d{5}$/,NZ:/^\d{4}$/,PH:/^\d{4}$/,PK:/^\d{5}$/,PL:/^\d{2}-\d{3}$/,PR:/^009\d{2}([ -]\d{4})?$/,PT:/^\d{4}-\d{3}$/,RO:/^\d{6}$/,RU:/^\d{6}$/,SE:/^\d{3} ?\d{2}$/,SG:/^\d{6}$/,SI:/^\d{4}$/,SK:/^\d{3} ?\d{2}$/,TH:/^\d{5}$/,TN:/^\d{4}$/,TW:/^\d{3}(\d{2})?$/,UA:/^\d{5}$/,US:/^\d{5}(-\d{4})?$/,ZA:/^\d{4}$/,ZM:/^\d{5}$/};function Ez(b){let z=sz[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isPostalCode")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isPostalCode")};`},Q.ruleName="isPostalCode",Q.requiresType="string",Q.constraints={locale:b},Q}var _z={AF:/^\d{8}$/,AL:/^[A-Z]\d{8}[A-Z]$/i,AR:/^\d{7,8}$/,AZ:/^AZE\d{8}$/,BE:/^\d{11}$/,BG:/^\d{10}$/,BR:/^\d{9}$/,BY:/^[A-Z]{2}\d{7}$/i,CA:/^\d{9}$/,CH:/^756\d{10}$/,CN:/^\d{15}(\d{2}[0-9xX])?$/,CY:/^\d{7}[A-Z]$/i,CZ:/^\d{9,10}$/,DE:/^[LI TOUAEVBMNPRSZDFGHCK]{9}$/i,DK:/^\d{10}$/,EE:/^\d{11}$/,ES:/^[0-9X-Z]\d{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i,FI:/^\d{6}[+-A]\d{3}[0-9A-FHJ-NPR-Y]$/,FR:/^\d{8,9}[0-9\u00C1-\u00FF]{1}$/i,GB:/^[A-Z]{2}\d{6}[A-Z]$/i,GR:/^[A-Z]{2}\d{6}$/i,HR:/^\d{11}$/,HU:/^\d{8}[A-Z]{2}$/i,ID:/^\d{16}$/,IE:/^\d{7}[A-W][A-W]?$/,IL:/^\d{9}$/,IN:/^\d{12}$/,IR:/^\d{10}$/,IS:/^\d{10}$/,IT:/^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i,JP:/^\d{12}$/,KR:/^\d{6}-\d{7}$/,LT:/^\d{11}$/,LU:/^\d{13}$/,LV:/^\d{6}-\d{5}$/,MK:/^\d{13}$/,MX:/^[A-Z]{4}\d{6}[HM][A-Z]{2}[B-DF-HJ-NP-TV-Z]{3}[A-Z0-9]\d$/i,MT:/^\d{7}[A-Z]$/i,NL:/^\d{9}$/,NO:/^\d{11}$/,PL:/^\d{11}$/,PT:/^[1-9]\d{7}[0-9TV]$/i,RO:/^\d{13}$/,RS:/^\d{13}$/,RU:/^\d{10}$/,SE:/^\d{10,12}$/,SI:/^\d{13}$/,SK:/^\d{9,10}$/,TH:/^\d{13}$/,TR:/^\d{11}$/,TW:/^[A-Z]\d{9}$/i,UA:/^\d{9}$/,US:/^\d{3}-\d{2}-\d{4}$/,ZA:/^\d{13}$/};function iz(b){let z=_z[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isIdentityCard")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isIdentityCard")};`},Q.ruleName="isIdentityCard",Q.requiresType="string",Q.constraints={locale:b},Q}var Nz={AM:/^[A-Z]{2}\d{7}$/i,AR:/^[A-Z]{3}\d{6}$/i,AT:/^[A-Z]\d{7}$/i,AU:/^[A-Z]\d{7}$/i,AZ:/^[Aa]\d{8}$/,BE:/^[A-Z]{2}\d{6}$/i,BG:/^\d{9}$/,BH:/^[A-Z]{2}\d{6}$/i,BR:/^[A-Z]{2}\d{6}$/i,BY:/^[A-Z]{2}\d{7}$/i,CA:/^[A-Z]{2}\d{6}$/i,CH:/^[A-Z]\d{7}$/i,CN:/^G\d{8}$/,CY:/^[A-Z](\d{6}|\d{8})$/i,CZ:/^\d{8}$/,DE:/^[CFGHJKLMNPRTVWXYZ0-9]{9}$/i,DK:/^\d{9}$/,EE:/^([A-Z]\d{7}|[A-Z]{2}\d{7})$/i,ES:/^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/i,FI:/^[A-Z]{2}\d{7}$/i,FR:/[A-Z0-9]{9}/i,GB:/^\d{9}$/,GR:/^[A-Z]{2}\d{7}$/i,HR:/^\d{9}$/,HU:/^[A-Z]{2}(\d{6}|\d{7})$/i,ID:/^[A-C]\d{7}$/i,IE:/^[A-Z0-9]{2}\d{7}$/i,IL:/^\d{9}$/,IN:/^[A-Z]\d{7}$/i,IR:/^[A-Z]\d{8}$/i,IS:/^(A)\d{7}$/i,IT:/^[A-Z0-9]{9}$/i,JO:/^[A-Z]{2}\d{7}$/i,JP:/^[A-Z]{2}\d{7}$/i,KR:/^[A-Z][A-Z0-9]\d{7}$/i,KW:/^\d{8}$/,KZ:/^[A-Z]\d{8}$/i,LI:/^[A-Z]\d{6}X$/i,LT:/^[A-Z0-9]{8}$/i,LU:/^[A-Z0-9]{8}$/i,LV:/^[A-Z0-9]{2}\d{7}$/i,LY:/^[A-Z]{2}\d{7}$/i,MA:/^[A-Z0-9]{2}\d{7}$/i,MD:/^[A-Z]{2}\d{7}$/i,ME:/^[A-Z]{2}\d{7}$/i,MK:/^[A-Z]\d{7}$/i,MT:/^\d{7}$/,MX:/^[A-Z]\d{8}$/i,MY:/^[AHK]\d{8}[A-Z]$/i,NL:/^[A-NP-Z]{2}[A-NP-Z0-9]{6}\d$/i,NO:/^\d{9}$/,NZ:/^[A-Z]{2}\d{6}$/i,PH:/^[A-Z]\d{7}[A-Z]$/i,PK:/^[A-Z]{2}\d{7}$/i,PL:/^[A-Z]{2}\d{7}$/i,PT:/^[A-Z]\d{6}$/i,RO:/^\d{8}$/,RS:/^\d{9}$/,RU:/^\d{9}$/,SA:/^[A-Z]\d{8}$/i,SE:/^\d{8}$/,SL:/^(P)[A-Z]\d{7}$/i,SK:/^[0-9A-Z]\d{7}$/i,TH:/^[A-Z]{1,2}\d{6,7}$/i,TN:/^\d{8}$/,TR:/^[A-Z]\d{8}$/i,TW:/^[A-Z]\d{9}$/i,UA:/^[A-Z]{2}\d{6}$/i,US:/^\d{9}$/,ZA:/^[A-Z]\d{8}$/i};function uz(b){let z=Nz[b],Q=(j)=>{if(typeof j!=="string")return!1;if(!z)return!1;return z.test(j)};return Q.emit=(j,Z)=>{if(!z)return Z.fail("isPassportNumber")+";";return`if (!_re[${Z.addRegex(z)}].test(${j})) ${Z.fail("isPassportNumber")};`},Q.ruleName="isPassportNumber",Q.requiresType="string",Q.constraints={locale:b},Q}export{l6 as notEquals,jb as notContains,a6 as minLength,m6 as minDate,_6 as min,bb as maxLength,n6 as maxDate,i6 as max,Zb as matches,zb as length,Xb as isVariableWidth,Kb as isUppercase,Ob as isUUID,Cb as isURL,Iz as isTaxId,Ub as isSurrogatePair,Oz as isStrongPassword,d6 as isString,tb as isSemVer,gb as isRgbColor,Xz as isRFC3339,Ez as isPostalCode,N6 as isPositive,xb as isPort,Cz as isPhoneNumber,uz as isPassportNumber,Hb as isOctal,E6 as isObject,Mb as isNumberString,S6 as isNumber,e6 as isNotIn,pz as isNotEmptyObject,t6 as isNotEmpty,u6 as isNegative,Bb as isMultibyte,vb as isMongoId,fz as isMobilePhone,Kz as isMimeType,Bz as isMilitaryTime,qz as isMagnetURI,Lb as isMACAddress,$b as isLowercase,Dz as isLongitude,ib as isLocale,Uz as isLatitude,_b as isLatLong,Eb as isJWT,eb as isJSON,f6 as isInt,oz as isInstance,v6 as isIn,iz as isIdentityCard,sb as isISSN,Rb as isISRC,ob as isISO8601,Pz as isISO4217CurrencyCode,rb as isISO31661Alpha3,nb as isISO31661Alpha2,Sb as isISIN,Ab as isISBN,kb as isIP,Mz as isIBAN,Db as isHexadecimal,Ib as isHexColor,hz as isHash,hb as isHalfWidth,Tb as isHSL,Gb as isFullWidth,cb as isFirebasePushId,ub as isFQDN,Hz as isEthereumAddress,R6 as isEnum,c6 as isEmpty,yb as isEmail,mb as isEAN,x6 as isDivisibleBy,Fb as isDecimal,$z as isDateString,o6 as isDate,Nb as isDataURI,Jz as isCurrency,wz as isCreditCard,Fz as isByteLength,yz as isBtcAddress,Vb as isBooleanString,p6 as isBoolean,Zz as isBase64,zz as isBase58,bz as isBase32,lb as isBIC,Jb as isAscii,s6 as isArray,Yb as isAlphanumeric,Wb as isAlpha,r6 as equals,Qb as contains,dz as arrayUnique,xz as arrayOf,Sz as arrayNotEmpty,Tz as arrayNotContains,Lz as arrayMinSize,Az as arrayMaxSize,gz as arrayContains};
|
|
3
12
|
|
|
4
|
-
//# debugId=
|
|
13
|
+
//# debugId=5E6680DFECB2E48764756E2164756E21
|
|
5
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EmittableRule } from '../types';
|
|
2
2
|
export interface IsNotEmptyObjectOptions {
|
|
3
|
-
/**
|
|
3
|
+
/** Whether to ignore keys with null/undefined values (default: false — do not ignore) */
|
|
4
4
|
nullable?: boolean;
|
|
5
5
|
}
|
|
6
6
|
export declare function isNotEmptyObject(options?: IsNotEmptyObjectOptions): EmittableRule;
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import type { RawClassMeta } from '../types';
|
|
2
|
-
import type { SealOptions } from '../interfaces';
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
2
|
+
* Static analysis for circular references (§4.6)
|
|
5
3
|
*
|
|
6
|
-
*
|
|
7
|
-
* - enableCircularCheck: false → 항상 false
|
|
8
|
-
* - 'auto' (기본) → @Type 참조 그래프를 DFS로 탐색해 순환 감지
|
|
4
|
+
* Traverses the @Type reference graph via DFS to detect cycles.
|
|
9
5
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* Flat DTO without cycles → false (zero WeakSet overhead)
|
|
7
|
+
* DTO with cycles → true (WeakSet automatically inserted)
|
|
12
8
|
*/
|
|
13
|
-
export declare function analyzeCircular(Class: Function
|
|
9
|
+
export declare function analyzeCircular(Class: Function): boolean;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { RawClassMeta } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
* @Expose
|
|
3
|
+
* Static validation of @Expose stacks (§4.1, §3.3)
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
5
|
+
* Check 1: same @Expose entry has deserializeOnly: true + serializeOnly: true → excluded from both directions
|
|
6
|
+
* Check 2: if 2+ @Expose entries in the same direction have overlapping groups → SealError
|
|
7
|
+
* - both groups=[] (ungrouped) → overlap
|
|
8
|
+
* - both non-empty groups with intersection → overlap
|
|
9
|
+
* - one ungrouped + one grouped → no overlap (different scope)
|
|
10
10
|
*/
|
|
11
11
|
export declare function validateExposeStacks(merged: RawClassMeta, className?: string): void;
|
package/dist/src/seal/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { _autoSeal, _sealOnDemand, _resetForTesting, _sealedClasses, mergeInheritance } from './seal';
|
|
2
2
|
export { buildDeserializeCode } from './deserialize-builder';
|
|
3
3
|
export { buildSerializeCode } from './serialize-builder';
|
|
4
4
|
export { analyzeCircular } from './circular-analyzer';
|