@oxog/vld 1.4.0 → 1.5.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 +333 -333
- package/README.md +1130 -1130
- package/dist/cli/benchmark.d.ts +15 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +248 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +204 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +157 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +233 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +59 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/validate.d.ts +15 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +162 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/codecs/index.d.ts.map +1 -1
- package/dist/codecs/index.js +29 -10
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/boolean.d.ts.map +1 -1
- package/dist/coercion/boolean.js +23 -31
- package/dist/coercion/boolean.js.map +1 -1
- package/dist/coercion/date.js +1 -1
- package/dist/coercion/date.js.map +1 -1
- package/dist/compat/emitter.d.ts +73 -0
- package/dist/compat/emitter.d.ts.map +1 -0
- package/dist/compat/emitter.js +179 -0
- package/dist/compat/emitter.js.map +1 -0
- package/dist/compat/index.d.ts +15 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +14 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/result.d.ts +128 -0
- package/dist/compat/result.d.ts.map +1 -0
- package/dist/compat/result.js +169 -0
- package/dist/compat/result.js.map +1 -0
- package/dist/errors.d.ts +58 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -9
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +140 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/guards.d.ts +143 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +238 -0
- package/dist/guards.js.map +1 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +29 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +402 -0
- package/dist/kernel.js.map +1 -0
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/backup-en.js.map +1 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/locales.d.ts +54 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +732 -0
- package/dist/locales.js.map +1 -0
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +184 -0
- package/dist/logger.js.map +1 -0
- package/dist/pigment.d.ts +124 -0
- package/dist/pigment.d.ts.map +1 -0
- package/dist/pigment.js +177 -0
- package/dist/pigment.js.map +1 -0
- package/dist/plugins/codecs.d.ts +17 -0
- package/dist/plugins/codecs.d.ts.map +1 -0
- package/dist/plugins/codecs.js +29 -0
- package/dist/plugins/codecs.js.map +1 -0
- package/dist/plugins/coercion.d.ts +13 -0
- package/dist/plugins/coercion.d.ts.map +1 -0
- package/dist/plugins/coercion.js +34 -0
- package/dist/plugins/coercion.js.map +1 -0
- package/dist/plugins/core-validators.d.ts +13 -0
- package/dist/plugins/core-validators.d.ts.map +1 -0
- package/dist/plugins/core-validators.js +96 -0
- package/dist/plugins/core-validators.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/kernel.d.ts +29 -0
- package/dist/plugins/kernel.d.ts.map +1 -0
- package/dist/plugins/kernel.js +486 -0
- package/dist/plugins/kernel.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/style.d.ts +123 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +369 -0
- package/dist/style.js.map +1 -0
- package/dist/utils/codec-utils.d.ts.map +1 -1
- package/dist/utils/codec-utils.js +6 -0
- package/dist/utils/codec-utils.js.map +1 -1
- package/dist/utils/ip-validation.d.ts.map +1 -1
- package/dist/utils/ip-validation.js +34 -14
- package/dist/utils/ip-validation.js.map +1 -1
- package/dist/validators/base.d.ts +3 -0
- package/dist/validators/base.d.ts.map +1 -1
- package/dist/validators/base.js +8 -0
- package/dist/validators/base.js.map +1 -1
- package/dist/validators/bigint.js.map +1 -1
- package/dist/validators/custom.js.map +1 -1
- package/dist/validators/discriminated-union.js.map +1 -1
- package/dist/validators/file.js.map +1 -1
- package/dist/validators/function.js.map +1 -1
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/json.js.map +1 -1
- package/dist/validators/lazy.js.map +1 -1
- package/dist/validators/nan.js.map +1 -1
- package/dist/validators/null.js.map +1 -1
- package/dist/validators/object-optimized.d.ts +23 -0
- package/dist/validators/object-optimized.d.ts.map +1 -0
- package/dist/validators/object-optimized.js +179 -0
- package/dist/validators/object-optimized.js.map +1 -0
- package/dist/validators/object-ultra.d.ts +34 -0
- package/dist/validators/object-ultra.d.ts.map +1 -0
- package/dist/validators/object-ultra.js +175 -0
- package/dist/validators/object-ultra.js.map +1 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +1 -1
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/string-bool.js.map +1 -1
- package/dist/validators/string-formats.js.map +1 -1
- package/dist/validators/string-ultra.d.ts +49 -0
- package/dist/validators/string-ultra.d.ts.map +1 -0
- package/dist/validators/string-ultra.js +217 -0
- package/dist/validators/string-ultra.js.map +1 -0
- package/dist/validators/template-literal.d.ts.map +1 -1
- package/dist/validators/template-literal.js +13 -12
- package/dist/validators/template-literal.js.map +1 -1
- package/dist/validators/undefined.js.map +1 -1
- package/dist/validators/union-optimized.d.ts +15 -0
- package/dist/validators/union-optimized.d.ts.map +1 -0
- package/dist/validators/union-optimized.js +92 -0
- package/dist/validators/union-optimized.js.map +1 -0
- package/dist/validators/xor.js.map +1 -1
- package/package.json +95 -79
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-optimized.js","sourceRoot":"","sources":["../../src/validators/union-optimized.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Optimized union validator with better performance\n */\nexport class VldUnionOptimized<T extends readonly VldBase<any, any>[]> extends VldBase<\n unknown,\n T[number] extends VldBase<any, infer U> ? U : never\n> {\n private readonly validators: T;\n private readonly errorMessage?: string;\n \n // Cache for type checking optimization\n private readonly typeCheckers: Map<VldBase<any, any>, (value: unknown) => boolean>;\n \n private constructor(validators: T, errorMessage?: string) {\n super();\n this.validators = validators;\n this.errorMessage = errorMessage;\n this.typeCheckers = new Map();\n \n // Pre-compile type checkers for common types\n for (const validator of validators) {\n this.typeCheckers.set(validator, this.createTypeChecker(validator));\n }\n }\n \n private createTypeChecker(validator: VldBase<any, any>): (value: unknown) => boolean {\n // Quick type checks based on validator type\n const className = validator.constructor.name;\n \n switch (className) {\n case 'VldString':\n return (v) => typeof v === 'string';\n case 'VldNumber':\n return (v) => typeof v === 'number' && !isNaN(v as number);\n case 'VldBoolean':\n return (v) => typeof v === 'boolean';\n case 'VldDate':\n return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v as string)));\n case 'VldArray':\n return (v) => Array.isArray(v);\n case 'VldObject':\n return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n default:\n return () => true; // No quick check available\n }\n }\n \n static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnionOptimized<T> {\n return new VldUnionOptimized(validators);\n }\n \n parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never {\n // Fast path: try validators that are likely to match based on type\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n // Skip validators that definitely won't match\n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n // Use safeParse to avoid try-catch overhead\n const result = validator.safeParse(value);\n if (result.success) {\n return result.data;\n }\n }\n \n // Slow path: collect all errors\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n throw new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n );\n }\n \n safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never> {\n // Fast path with type checking\n for (const validator of this.validators) {\n const typeChecker = this.typeCheckers.get(validator);\n \n if (typeChecker && !typeChecker(value)) {\n continue;\n }\n \n const result = validator.safeParse(value);\n if (result.success) {\n return result;\n }\n }\n \n // All failed\n const errors: string[] = [];\n for (const validator of this.validators) {\n const result = validator.safeParse(value);\n if (!result.success) {\n errors.push(result.error.message);\n }\n }\n \n return {\n success: false,\n error: new Error(\n this.errorMessage || \n getMessages().unionNoMatch(errors)\n )\n };\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xor.js","sourceRoot":"","sources":["../../src/validators/xor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;;GAGG;AACH,MAAM,OAAO,MAA4C,SAAQ,OAA2E;IAC1I,YAA6B,QAAiB;QAC5C,KAAK,EAAE,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAAS;IAE9C,CAAC;IAED,MAAM,CAAC,MAAM,CACX,OAAgB;QAEhB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,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,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAA4B,IAAI,CAAC;QAEhD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,UAAU,EAAE,CAAC;gBACb,WAAW,GAAG,MAAM,CAAC;gBACrB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,oCAAoC;oBACpC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CAAC,gCAAgC,CAAC;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,iBAAiB,UAAU,oDAAoD,CAChF;aACF,CAAC;QACJ,CAAC;QAED,OAAO,WAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF","sourcesContent":["/**\n * VldXor - Exclusive union validator\n * Part of Zod 4 API parity implementation\n * Ensures exactly one schema in the union matches\n */\n\nimport { VldBase } from './base';\nimport type { ParseResult } from './base';\n\n/**\n * XOR validator - ensures exactly one option matches\n * Unlike regular union which allows multiple matches, XOR requires exactly one\n */\nexport class VldXor<Options extends VldBase<any, any>[]> extends VldBase<unknown, Options[number] extends VldBase<any, infer T> ? T : never> {\n constructor(private readonly _options: Options) {\n super();\n }\n\n static create<Options extends VldBase<any, any>[]>(\n options: Options\n ): VldXor<Options> {\n if (options.length < 2) {\n throw new Error('XOR requires at least 2 options');\n }\n return new VldXor(options);\n }\n\n parse(value: unknown): Options[number] extends VldBase<any, infer T> ? T : never {\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<Options[number] extends VldBase<any, infer T> ? T : never> {\n let matchCount = 0;\n let lastSuccess: ParseResult<any> | null = null;\n\n for (const option of this._options) {\n const result = option.safeParse(value);\n if (result.success) {\n matchCount++;\n lastSuccess = result;\n if (matchCount > 1) {\n // Early exit if more than one match\n break;\n }\n }\n }\n\n if (matchCount === 0) {\n return {\n success: false,\n error: new Error('No schema matched in XOR union')\n };\n }\n\n if (matchCount > 1) {\n return {\n success: false,\n error: new Error(\n `Input matches ${matchCount} schemas in XOR union, but exactly one is required`\n )\n };\n }\n\n return lastSuccess!;\n }\n\n /**\n * Get all options\n */\n getOptions(): Options {\n return this._options;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"xor.js","sourceRoot":"","sources":["../../src/validators/xor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;;GAGG;AACH,MAAM,OAAO,MAA4C,SAAQ,OAA2E;IAC1I,YAA6B,QAAiB;QAC5C,KAAK,EAAE,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAAS;IAE9C,CAAC;IAED,MAAM,CAAC,MAAM,CACX,OAAgB;QAEhB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,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,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAA4B,IAAI,CAAC;QAEhD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,UAAU,EAAE,CAAC;gBACb,WAAW,GAAG,MAAM,CAAC;gBACrB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,oCAAoC;oBACpC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CAAC,gCAAgC,CAAC;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,iBAAiB,UAAU,oDAAoD,CAChF;aACF,CAAC;QACJ,CAAC;QAED,OAAO,WAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF","sourcesContent":["/**\r\n * VldXor - Exclusive union validator\r\n * Part of Zod 4 API parity implementation\r\n * Ensures exactly one schema in the union matches\r\n */\r\n\r\nimport { VldBase } from './base';\r\nimport type { ParseResult } from './base';\r\n\r\n/**\r\n * XOR validator - ensures exactly one option matches\r\n * Unlike regular union which allows multiple matches, XOR requires exactly one\r\n */\r\nexport class VldXor<Options extends VldBase<any, any>[]> extends VldBase<unknown, Options[number] extends VldBase<any, infer T> ? T : never> {\r\n constructor(private readonly _options: Options) {\r\n super();\r\n }\r\n\r\n static create<Options extends VldBase<any, any>[]>(\r\n options: Options\r\n ): VldXor<Options> {\r\n if (options.length < 2) {\r\n throw new Error('XOR requires at least 2 options');\r\n }\r\n return new VldXor(options);\r\n }\r\n\r\n parse(value: unknown): Options[number] extends VldBase<any, infer T> ? T : never {\r\n const result = this.safeParse(value);\r\n if (!result.success) {\r\n throw result.error;\r\n }\r\n return result.data;\r\n }\r\n\r\n safeParse(value: unknown): ParseResult<Options[number] extends VldBase<any, infer T> ? T : never> {\r\n let matchCount = 0;\r\n let lastSuccess: ParseResult<any> | null = null;\r\n\r\n for (const option of this._options) {\r\n const result = option.safeParse(value);\r\n if (result.success) {\r\n matchCount++;\r\n lastSuccess = result;\r\n if (matchCount > 1) {\r\n // Early exit if more than one match\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (matchCount === 0) {\r\n return {\r\n success: false,\r\n error: new Error('No schema matched in XOR union')\r\n };\r\n }\r\n\r\n if (matchCount > 1) {\r\n return {\r\n success: false,\r\n error: new Error(\r\n `Input matches ${matchCount} schemas in XOR union, but exactly one is required`\r\n )\r\n };\r\n }\r\n\r\n return lastSuccess!;\r\n }\r\n\r\n /**\r\n * Get all options\r\n */\r\n getOptions(): Options {\r\n return this._options;\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,79 +1,95 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@oxog/vld",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Ultra-fast TypeScript-first schema validation with zero dependencies
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"module": "./dist/index.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@oxog/vld",
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Ultra-fast TypeScript-first schema validation with zero dependencies, 27+ language support, plugin system, and CLI tools",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"vld": "./dist/cli/bin.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"require": "./dist/index.js",
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./cli": {
|
|
19
|
+
"import": "./dist/cli/index.js",
|
|
20
|
+
"types": "./dist/cli/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./plugins": {
|
|
23
|
+
"import": "./dist/plugins/index.js",
|
|
24
|
+
"types": "./dist/plugins/index.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"sideEffects": false,
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc && node scripts/fix-imports.cjs",
|
|
30
|
+
"test": "jest --coverage",
|
|
31
|
+
"test:types": "tsc --noEmit",
|
|
32
|
+
"benchmark": "node benchmarks/quick-bench.cjs",
|
|
33
|
+
"benchmark:full": "node benchmarks/performance.cjs",
|
|
34
|
+
"benchmark:memory": "node --expose-gc benchmarks/memory.cjs",
|
|
35
|
+
"benchmark:startup": "node benchmarks/startup.cjs",
|
|
36
|
+
"benchmark:all": "npm run benchmark && npm run benchmark:memory && npm run benchmark:startup",
|
|
37
|
+
"lint": "eslint src --ext .ts",
|
|
38
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
39
|
+
"prepublishOnly": "npm run build && npm test"
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"validation",
|
|
43
|
+
"schema",
|
|
44
|
+
"typescript",
|
|
45
|
+
"zod",
|
|
46
|
+
"alternative",
|
|
47
|
+
"zero-dependency",
|
|
48
|
+
"fast",
|
|
49
|
+
"type-safe",
|
|
50
|
+
"runtime-validation",
|
|
51
|
+
"i18n",
|
|
52
|
+
"internationalization",
|
|
53
|
+
"multilingual",
|
|
54
|
+
"plugin-system",
|
|
55
|
+
"event-driven",
|
|
56
|
+
"cli",
|
|
57
|
+
"result-pattern",
|
|
58
|
+
"functional"
|
|
59
|
+
],
|
|
60
|
+
"files": [
|
|
61
|
+
"dist",
|
|
62
|
+
"README.md",
|
|
63
|
+
"LICENSE",
|
|
64
|
+
"CHANGELOG.md"
|
|
65
|
+
],
|
|
66
|
+
"author": "Ersin Koc",
|
|
67
|
+
"license": "MIT",
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "https://github.com/ersinkoc/vld.git"
|
|
71
|
+
},
|
|
72
|
+
"bugs": {
|
|
73
|
+
"url": "https://github.com/ersinkoc/vld/issues"
|
|
74
|
+
},
|
|
75
|
+
"homepage": "https://github.com/ersinkoc/vld#readme",
|
|
76
|
+
"devDependencies": {
|
|
77
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
78
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
79
|
+
"@types/jest": "^29.5.14",
|
|
80
|
+
"@types/node": "^20.10.5",
|
|
81
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
82
|
+
"@typescript-eslint/parser": "^6.15.0",
|
|
83
|
+
"benchmark": "^2.1.4",
|
|
84
|
+
"eslint": "^8.56.0",
|
|
85
|
+
"fast-glob": "^3.3.3",
|
|
86
|
+
"jest": "^29.7.0",
|
|
87
|
+
"jest-junit": "^16.0.0",
|
|
88
|
+
"prettier": "^3.1.1",
|
|
89
|
+
"rollup": "^4.46.2",
|
|
90
|
+
"rollup-plugin-typescript2": "^0.36.0",
|
|
91
|
+
"ts-jest": "^29.4.1",
|
|
92
|
+
"typescript": "^5.3.3",
|
|
93
|
+
"zod": "^4.0.17"
|
|
94
|
+
}
|
|
95
|
+
}
|