@hedystia/validations 2.0.11 → 2.0.12

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/dist/types.cjs CHANGED
@@ -136,6 +136,10 @@ var StringSchemaType = class StringSchemaType extends BaseSchema {
136
136
  "~standard" = {
137
137
  version: 1,
138
138
  vendor: "h-schema",
139
+ jsonSchema: {
140
+ input: () => this.jsonSchema,
141
+ output: () => this.jsonSchema
142
+ },
139
143
  validate: (value) => {
140
144
  if (this._coerce && typeof value !== "string") value = String(value);
141
145
  if (typeof value !== "string") return { issues: [{ message: `Expected string, received ${typeof value}` }] };
@@ -210,6 +214,10 @@ var NumberSchemaType = class NumberSchemaType extends BaseSchema {
210
214
  "~standard" = {
211
215
  version: 1,
212
216
  vendor: "h-schema",
217
+ jsonSchema: {
218
+ input: () => this.jsonSchema,
219
+ output: () => this.jsonSchema
220
+ },
213
221
  validate: (value) => {
214
222
  if (this._coerce && typeof value !== "number") {
215
223
  const coerced = Number(value);
@@ -238,6 +246,10 @@ var BooleanSchemaType = class extends BaseSchema {
238
246
  "~standard" = {
239
247
  version: 1,
240
248
  vendor: "h-schema",
249
+ jsonSchema: {
250
+ input: () => this.jsonSchema,
251
+ output: () => this.jsonSchema
252
+ },
241
253
  validate: (value) => {
242
254
  if (this._coerce && typeof value !== "boolean") {
243
255
  if (value === "true" || value === 1 || value === "1") value = true;
@@ -257,6 +269,10 @@ var AnySchemaType = class extends BaseSchema {
257
269
  "~standard" = {
258
270
  version: 1,
259
271
  vendor: "h-schema",
272
+ jsonSchema: {
273
+ input: () => ({}),
274
+ output: () => ({})
275
+ },
260
276
  validate: (value) => {
261
277
  return { value };
262
278
  },
@@ -279,6 +295,10 @@ var LiteralSchema = class extends BaseSchema {
279
295
  "~standard" = {
280
296
  version: 1,
281
297
  vendor: "h-schema",
298
+ jsonSchema: {
299
+ input: () => this.jsonSchema,
300
+ output: () => this.jsonSchema
301
+ },
282
302
  validate: (value) => {
283
303
  if (value !== this.value) return { issues: [{ message: `Expected literal value ${this.value}, received ${value}` }] };
284
304
  return { value };
@@ -299,6 +319,10 @@ var OptionalSchema = class extends BaseSchema {
299
319
  "~standard" = {
300
320
  version: 1,
301
321
  vendor: "h-schema",
322
+ jsonSchema: {
323
+ input: () => this.jsonSchema,
324
+ output: () => this.jsonSchema
325
+ },
302
326
  validate: (value) => {
303
327
  if (value === void 0 || value === null) return { value: void 0 };
304
328
  return this.innerSchema["~standard"].validate(value);
@@ -318,6 +342,10 @@ var NullSchemaType = class extends BaseSchema {
318
342
  "~standard" = {
319
343
  version: 1,
320
344
  vendor: "h-schema",
345
+ jsonSchema: {
346
+ input: () => this.jsonSchema,
347
+ output: () => this.jsonSchema
348
+ },
321
349
  validate: (value) => {
322
350
  if (value !== null) return { issues: [{ message: `Expected null, received ${value === void 0 ? "undefined" : typeof value}` }] };
323
351
  return { value: null };
@@ -338,6 +366,10 @@ var UnionSchema = class extends BaseSchema {
338
366
  "~standard" = {
339
367
  version: 1,
340
368
  vendor: "h-schema",
369
+ jsonSchema: {
370
+ input: () => this.jsonSchema,
371
+ output: () => this.jsonSchema
372
+ },
341
373
  validate: (value) => {
342
374
  const issuesAccum = [];
343
375
  for (const schema of this.schemas) {
@@ -366,6 +398,10 @@ var ArraySchema = class extends BaseSchema {
366
398
  "~standard" = {
367
399
  version: 1,
368
400
  vendor: "h-schema",
401
+ jsonSchema: {
402
+ input: () => this.jsonSchema,
403
+ output: () => this.jsonSchema
404
+ },
369
405
  validate: (value) => {
370
406
  if (!Array.isArray(value)) return { issues: [{ message: `Expected array, received ${typeof value}` }] };
371
407
  const results = value.map((item, index) => {
@@ -407,6 +443,10 @@ var InstanceOfSchema = class extends BaseSchema {
407
443
  "~standard" = {
408
444
  version: 1,
409
445
  vendor: "h-schema",
446
+ jsonSchema: {
447
+ input: () => this.jsonSchema,
448
+ output: () => this.jsonSchema
449
+ },
410
450
  validate: (value) => {
411
451
  if (!(value instanceof this.classConstructor)) return { issues: [{ message: `Expected instance of ${this.classConstructor.name}` }] };
412
452
  return this.innerSchema["~standard"].validate(value);
@@ -443,6 +483,10 @@ var ObjectSchemaType = class extends BaseSchema {
443
483
  "~standard" = {
444
484
  version: 1,
445
485
  vendor: "h-schema",
486
+ jsonSchema: {
487
+ input: () => this.jsonSchema,
488
+ output: () => this.jsonSchema
489
+ },
446
490
  validate: (value) => {
447
491
  if (typeof value !== "object" || value === null || Array.isArray(value)) return { issues: [{ message: "Expected object, received " + (value === null ? "null" : Array.isArray(value) ? "array" : typeof value) }] };
448
492
  const obj = value;
@@ -550,7 +594,10 @@ const h = {
550
594
  email: () => h.string().email(),
551
595
  phone: () => h.string().phone(),
552
596
  domain: (requireHttpOrHttps = true) => h.string().domain(requireHttpOrHttps),
553
- toStandard
597
+ toStandard,
598
+ getJsonSchema: (schema, options = {}) => {
599
+ return toStandard(schema)["~standard"].jsonSchema.output({ target: options.target ?? "draft-2020-12" });
600
+ }
554
601
  };
555
602
  //#endregion
556
603
  exports.AnySchemaType = AnySchemaType;
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\ntype SchemaPrimitive = \"string\" | \"number\" | \"boolean\" | \"any\";\n\ninterface SchemaLike {\n [key: string]: SchemaPrimitive | SchemaLike | BaseSchema<any, any>;\n}\n\ntype Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;\n\ntype RequiredKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? never : K;\n}[keyof S];\n\ntype OptionalKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? K : never;\n}[keyof S];\n\ntype SchemaPrimitiveMap = {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n};\n\ntype SchemaType<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends keyof SchemaPrimitiveMap\n ? SchemaPrimitiveMap[S]\n : S extends Record<string, any>\n ? InferSchema<S>\n : unknown;\n\ntype InferObject<S extends SchemaDefinition> = Simplify<\n {\n [K in RequiredKeys<S>]: SchemaType<S[K]>;\n } & {\n [K in OptionalKeys<S>]?: SchemaType<S[K]>;\n }\n>;\n\ntype InferSchema<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends \"string\"\n ? string\n : S extends \"number\"\n ? number\n : S extends \"boolean\"\n ? boolean\n : S extends { [key: string]: any }\n ? {\n [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<\n S[K]\n >;\n } & {\n [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<\n S[K]\n >;\n }\n : unknown;\n\ntype SchemaDefinition = SchemaLike;\n\ninterface Schema<I, O> extends StandardSchemaV1<I, O> {\n optional(): OptionalSchema<I, O | undefined>;\n null(): UnionSchema<I, O | null>;\n nullable(): UnionSchema<I, O | null>;\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]>;\n array(): ArraySchema<I, O[]>;\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>>;\n jsonSchema: any;\n readonly inferred: O;\n schema: Schema<I, O>;\n}\n\nexport abstract class BaseSchema<I, O> implements Schema<I, O> {\n abstract readonly \"~standard\": StandardSchemaV1.Props<I, O>;\n jsonSchema: any = {};\n get inferred(): O {\n return null as unknown as O;\n }\n schema: Schema<I, O> = this;\n protected _coerce = false;\n\n coerce(): this {\n this._coerce = true;\n return this;\n }\n\n optional(): OptionalSchema<I, O | undefined> {\n return new OptionalSchema<I, O>(this);\n }\n\n null(): UnionSchema<I, O | null> {\n return new UnionSchema<I, O | null>(this, new NullSchemaType() as any);\n }\n\n /**\n * Allows the value to be `null` (alias for {@link null})\n * @returns {UnionSchema<I, O | null>} Schema that also accepts null\n */\n nullable(): UnionSchema<I, O | null> {\n return this.null();\n }\n\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]> {\n const literalSchemas = values.map((value) => new LiteralSchema<I, V>(value));\n return new UnionSchema<I, Values[number]>(...literalSchemas);\n }\n\n array(): ArraySchema<I, O[]> {\n return new ArraySchema<I, O[]>(this);\n }\n\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>> {\n return new InstanceOfSchema<I, InstanceType<C>>(this, constructor);\n }\n}\n\nfunction validatePrimitive(schema: SchemaPrimitive, value: unknown): boolean {\n if (typeof value === \"string\" && schema === \"string\") {\n return true;\n }\n if (typeof value === \"number\" && schema === \"number\" && !Number.isNaN(value)) {\n return true;\n }\n if (typeof value === \"boolean\" && schema === \"boolean\") {\n return true;\n }\n return false;\n}\n\nexport class StringSchemaType extends BaseSchema<unknown, string> {\n readonly type: SchemaPrimitive = \"string\";\n private _validateDate = false;\n private _validateUUID = false;\n private _validateRegex = false;\n private _validateEmail = false;\n private _validatePhone = false;\n private _validateDomain = false;\n private _requireHttpOrHttps = false;\n private _minLength?: number;\n private _maxLength?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"string\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n minLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._minLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minLength: n,\n };\n return schema;\n }\n\n maxLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._maxLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maxLength: n,\n };\n return schema;\n }\n\n date(): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._validateDate = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"date\" };\n return schema;\n }\n\n uuid(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateUUID = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"uuid\" };\n return schema;\n }\n\n regex(regex: RegExp): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateRegex = true;\n schema.jsonSchema = { ...this.jsonSchema, pattern: regex.source };\n return schema;\n }\n\n email(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateEmail = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"email\" };\n return schema;\n }\n\n phone(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validatePhone = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"phone\" };\n return schema;\n }\n\n domain(requireHttpOrHttps = true): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateDomain = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"domain\" };\n schema._requireHttpOrHttps = requireHttpOrHttps;\n return schema;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, string> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"string\") {\n value = String(value);\n }\n\n if (typeof value !== \"string\") {\n return {\n issues: [{ message: `Expected string, received ${typeof value}` }],\n };\n }\n\n if (this._minLength !== undefined && value.length < this._minLength) {\n return { issues: [{ message: `String shorter than ${this._minLength}` }] };\n }\n\n if (this._maxLength !== undefined && value.length > this._maxLength) {\n return { issues: [{ message: `String longer than ${this._maxLength}` }] };\n }\n\n if (this._validateUUID && !this._isValidUUID(value)) {\n return {\n issues: [{ message: \"Invalid UUID format\" }],\n };\n }\n\n if (this._validateRegex && !this._isValidRegex(value)) {\n return {\n issues: [{ message: \"Invalid regex format\" }],\n };\n }\n\n if (this._validateEmail && !this._isValidEmail(value)) {\n return {\n issues: [{ message: \"Invalid email format\" }],\n };\n }\n\n if (this._validatePhone && !this._isValidPhone(value)) {\n return {\n issues: [{ message: \"Invalid phone number format\" }],\n };\n }\n\n if (this._validateDomain && !this._isValidDomain(value)) {\n return {\n issues: [{ message: \"Invalid domain format\" }],\n };\n }\n\n if (this._validateDate && !this._isValidDate(value)) {\n return { issues: [{ message: \"Invalid date format\" }] };\n }\n\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as string,\n },\n };\n\n private _isValidDate(value: string): boolean {\n const date = new Date(value);\n return !Number.isNaN(date.getTime());\n }\n\n private _isValidUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n }\n\n private _isValidRegex(value: string): boolean {\n return new RegExp(this.jsonSchema.pattern!).test(value);\n }\n\n private _isValidEmail(value: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n }\n\n private _isValidPhone(value: string): boolean {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n return phoneRegex.test(value);\n }\n\n private _isValidDomain(value: string): boolean {\n let domainRegex = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n if (this._requireHttpOrHttps) {\n domainRegex = /^https?:\\/\\/[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n }\n return domainRegex.test(value);\n }\n}\n\nexport class NumberSchemaType extends BaseSchema<unknown, number> {\n readonly type: SchemaPrimitive = \"number\";\n private _min?: number;\n private _max?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"number\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n min(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._min = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minimum: n,\n };\n return schema;\n }\n\n max(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._max = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maximum: n,\n };\n return schema;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, number> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"number\") {\n const coerced = Number(value);\n if (!Number.isNaN(coerced)) {\n value = coerced;\n }\n }\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n return {\n issues: [{ message: `Expected number, received ${typeof value}` }],\n };\n }\n if (this._min !== undefined && value < this._min) {\n return { issues: [{ message: `Number less than ${this._min}` }] };\n }\n if (this._max !== undefined && value > this._max) {\n return { issues: [{ message: `Number greater than ${this._max}` }] };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as number,\n },\n };\n}\n\nexport class BooleanSchemaType extends BaseSchema<unknown, boolean> {\n readonly type: SchemaPrimitive = \"boolean\";\n\n constructor() {\n super();\n this.jsonSchema = { type: \"boolean\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, boolean> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"boolean\") {\n if (value === \"true\" || value === 1 || value === \"1\") {\n value = true;\n } else if (value === \"false\" || value === 0 || value === \"0\") {\n value = false;\n }\n }\n if (typeof value !== \"boolean\") {\n return {\n issues: [{ message: `Expected boolean, received ${typeof value}` }],\n };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as boolean,\n },\n };\n}\n\nexport class AnySchemaType extends BaseSchema<unknown, any> {\n readonly type: SchemaPrimitive = \"any\";\n readonly \"~standard\": StandardSchemaV1.Props<unknown, any> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as any,\n },\n };\n}\n\nexport class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {\n private readonly value: T;\n\n constructor(value: T) {\n super();\n this.value = value;\n this.jsonSchema = {\n const: value,\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, T> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value !== this.value) {\n return {\n issues: [{ message: `Expected literal value ${this.value}, received ${value}` }],\n };\n }\n return { value: value as T };\n },\n types: {\n input: {} as I,\n output: {} as T,\n },\n };\n}\n\nexport class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {\n private readonly innerSchema: Schema<I, O>;\n\n constructor(schema: Schema<I, O>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { ...schema.jsonSchema };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O | undefined> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value === undefined || value === null) {\n return { value: undefined };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result;\n },\n types: {\n input: {} as I,\n output: {} as O | undefined,\n },\n };\n}\n\nexport class NullSchemaType extends BaseSchema<unknown, null> {\n readonly type = \"null\";\n constructor() {\n super();\n this.jsonSchema = { type: \"null\" };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, null> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value !== null) {\n return {\n issues: [\n {\n message: `Expected null, received ${value === undefined ? \"undefined\" : typeof value}`,\n },\n ],\n };\n }\n return { value: null };\n },\n types: {\n input: {} as unknown,\n output: {} as unknown as null,\n },\n };\n}\n\nexport class UnionSchema<I, O> extends BaseSchema<I, O> {\n private readonly schemas: Schema<I, any>[];\n constructor(...schemas: Schema<I, any>[]) {\n super();\n this.schemas = schemas;\n this.jsonSchema = { anyOf: schemas.map((s) => s.jsonSchema) };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n const issuesAccum: StandardSchemaV1.Issue[] = [];\n for (const schema of this.schemas) {\n const result = schema[\"~standard\"].validate(value) as StandardSchemaV1.Result<any>;\n if (!(\"issues\" in result)) {\n return { value: result.value };\n }\n issuesAccum.push(...result.issues!);\n }\n return { issues: issuesAccum };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, O[number]>;\n\n constructor(schema: Schema<I, O[number]>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { type: \"array\", items: schema.jsonSchema };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (!Array.isArray(value)) {\n return {\n issues: [{ message: `Expected array, received ${typeof value}` }],\n };\n }\n\n const results = value.map((item, index) => {\n const result = this.innerSchema[\"~standard\"].validate(item) as StandardSchemaV1.Result<\n O[number]\n >;\n if (\"issues\" in result) {\n return {\n index,\n issues: result.issues?.map((issue) => ({\n ...issue,\n path: issue.path ? [index, ...issue.path] : [index],\n })),\n };\n }\n return { index, value: result.value };\n });\n\n const errors = results.filter((r) => \"issues\" in r) as {\n index: number;\n issues: StandardSchemaV1.Issue[];\n }[];\n\n if (errors.length > 0) {\n return {\n issues: errors.flatMap((e) => e.issues),\n };\n }\n\n return { value: results.map((r) => (\"value\" in r ? r.value : null)) as O };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class InstanceOfSchema<I, O> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, any>;\n private readonly classConstructor: new (\n ...args: any[]\n ) => any;\n\n constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any) {\n super();\n this.innerSchema = schema;\n this.classConstructor = classConstructor;\n this.jsonSchema = { ...schema.jsonSchema, instanceOf: classConstructor.name };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (!(value instanceof this.classConstructor)) {\n return {\n issues: [\n {\n message: `Expected instance of ${this.classConstructor.name}`,\n },\n ],\n };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result as StandardSchemaV1.Result<O>;\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {\n readonly definition: SchemaDefinition;\n\n constructor(definition: SchemaDefinition) {\n super();\n this.definition = definition;\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const key in definition) {\n const schemaItem = definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!isOptional) {\n required.push(key);\n }\n\n if (typeof schemaItem === \"string\") {\n properties[key] = { type: schemaItem };\n } else if (schemaItem instanceof BaseSchema) {\n properties[key] = schemaItem.jsonSchema;\n } else if (typeof schemaItem === \"object\" && schemaItem !== null) {\n properties[key] = { type: \"object\", properties: {} };\n }\n }\n\n this.jsonSchema = {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, T> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {\n issues: [\n {\n message:\n \"Expected object, received \" +\n (value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value),\n },\n ],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const issues: StandardSchemaV1.Issue[] = [];\n\n for (const key in this.definition) {\n const schemaItem = this.definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!(key in obj) && !isOptional) {\n issues.push({\n message: `Missing required property: ${key}`,\n path: [key],\n });\n continue;\n }\n\n if (key in obj) {\n if (typeof schemaItem === \"string\" && schemaItem in [\"string\", \"number\", \"boolean\"]) {\n const schemaPrimitive = schemaItem as SchemaPrimitive;\n if (!validatePrimitive(schemaPrimitive, obj[key])) {\n issues.push({\n message: `Invalid type for property ${key}: expected ${schemaPrimitive}`,\n path: [key],\n });\n } else {\n result[key] = obj[key];\n }\n } else if (schemaItem instanceof BaseSchema) {\n const validationResult = schemaItem[\"~standard\"].validate(\n obj[key],\n ) as StandardSchemaV1.Result<any>;\n if (\"issues\" in validationResult) {\n if (validationResult.issues) {\n issues.push(\n ...validationResult.issues.map((issue) => ({\n ...issue,\n path: issue.path ? [key, ...issue.path] : [key],\n })),\n );\n }\n } else {\n result[key] = validationResult.value;\n }\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues };\n }\n\n return { value: result as T };\n },\n types: {\n input: {} as unknown,\n output: {} as T,\n },\n };\n}\n\nexport type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;\n\nfunction toStandard<T>(schema: AnySchema): Schema<unknown, T> {\n let standardSchema: Schema<unknown, T>;\n\n if (schema instanceof BaseSchema) {\n standardSchema = schema as Schema<unknown, T>;\n } else if (typeof schema === \"string\") {\n if (schema === \"string\") {\n standardSchema = new StringSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"number\") {\n standardSchema = new NumberSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"boolean\") {\n standardSchema = new BooleanSchemaType() as unknown as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n } else if (typeof schema === \"object\" && schema !== null && !Array.isArray(schema)) {\n standardSchema = new ObjectSchemaType<any>(schema as SchemaDefinition) as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n\n const z = {\n toJSONSchema: (schema: any) => schema.jsonSchema,\n };\n\n return {\n ...standardSchema,\n inferred: null as unknown as T,\n \"~standard\": standardSchema[\"~standard\"],\n jsonSchema: z.toJSONSchema(standardSchema),\n schema: standardSchema,\n optional: () => new OptionalSchema<unknown, T>(standardSchema),\n enum: standardSchema.enum.bind(standardSchema),\n array: standardSchema.array.bind(standardSchema),\n instanceOf: standardSchema.instanceOf.bind(standardSchema),\n };\n}\n\n/**\n * Create standard schema types\n * @returns {typeof h} Standard schema types\n */\nexport const h = {\n /**\n * Create string schema type\n * @returns {StringSchemaType} String schema type\n */\n string: (): StringSchemaType => new StringSchemaType(),\n /**\n * Create number schema type\n * @returns {NumberSchemaType} Number schema type\n */\n number: (): NumberSchemaType => new NumberSchemaType(),\n /**\n * Create boolean schema type\n * @returns {BooleanSchemaType} Boolean schema type\n */\n boolean: (): BooleanSchemaType => new BooleanSchemaType(),\n /**\n * Create null schema type\n * @returns {NullSchemaType} Null schema type\n */\n null: (): NullSchemaType => new NullSchemaType(),\n /**\n * Create null schema type (alias for {@link h.null})\n * @returns {NullSchemaType} Null schema type\n */\n nullable: (): NullSchemaType => new NullSchemaType(),\n\n /**\n * Create any schema type\n * @returns {AnySchemaType} Any schema type\n */\n any: (): AnySchemaType => new AnySchemaType(),\n\n /**\n * Create literal schema type\n * @param {T} value - Literal value\n * @returns {LiteralSchema<unknown, T>} Literal schema type\n */\n literal: <T extends string | number | boolean>(value: T): LiteralSchema<unknown, T> =>\n new LiteralSchema<unknown, T>(value),\n\n /**\n * Create object schema type\n * @param {S} [schemaDef] - Schema definition\n * @returns {ObjectSchemaType<InferObject<S>>} Object schema type\n */\n object: <S extends SchemaDefinition>(schemaDef?: S): ObjectSchemaType<InferObject<S>> => {\n return new ObjectSchemaType(schemaDef || {}) as ObjectSchemaType<InferObject<S>>;\n },\n\n /**\n * Create array schema type\n * @param {S} schema - Schema\n * @returns {ArraySchema<unknown, InferSchema<S>[]>} Array schema type\n */\n array: <S extends AnySchema>(schema: S): ArraySchema<unknown, SchemaType<S>[]> => {\n const base = toStandard<SchemaType<S>>(schema);\n return base.array() as ArraySchema<unknown, SchemaType<S>[]>;\n },\n\n /**\n * Create enum schema type from a list of string, number or boolean values.\n * @param {Values} values - An array of literal values.\n * @returns {UnionSchema<unknown, Values[number]>} A schema that validates against one of the provided literal values.\n */\n enum: <T extends string | number | boolean, Values extends readonly [T, ...T[]]>(\n values: Values,\n ): UnionSchema<unknown, Values[number]> => {\n if (!values || values.length === 0) {\n throw new Error(\"h.enum() requires a non-empty array of values.\");\n }\n const literalSchemas = values.map((val) => h.literal(val));\n return h.options(...literalSchemas) as UnionSchema<unknown, Values[number]>;\n },\n\n /**\n * Create optional schema type\n * @param {S} schema - Schema\n * @returns {OptionalSchema<unknown, InferSchema<S> | undefined>} Optional schema type\n */\n optional: <S extends AnySchema>(\n schema: S,\n ): OptionalSchema<unknown, InferSchema<S> | undefined> => {\n return toStandard<InferSchema<S>>(schema).optional();\n },\n\n /**\n * Create options schema type\n * @param {S} schemas - Schemas\n * @returns {UnionSchema<unknown, InferSchema<S[number]>>} Options schema type\n */\n options: <S extends AnySchema[]>(...schemas: S): UnionSchema<unknown, InferSchema<S[number]>> => {\n const stdSchemas = schemas.map((s) => toStandard<InferSchema<S[number]>>(s).schema);\n return new UnionSchema<unknown, InferSchema<S[number]>>(...stdSchemas);\n },\n\n /**\n * Create instance of schema type\n * @param {C} constructor - Constructor function\n * @returns {InstanceOfSchema<unknown, InstanceType<C>>} Instance of schema type\n */\n instanceOf: <C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<unknown, InstanceType<C>> => {\n const baseSchema = h.object({});\n return baseSchema.instanceOf(constructor);\n },\n\n /**\n * Create date schema type\n * @returns {StringSchemaType} Date schema type\n */\n date: (): StringSchemaType => h.string().date(),\n\n /**\n * Create UUID schema type\n * @returns {StringSchemaType} UUID schema type\n */\n uuid: (): StringSchemaType => h.string().uuid(),\n\n /**\n * Create regex schema type\n * @param {RegExp} regex - Regex\n * @returns {StringSchemaType} Regex schema type\n */\n regex: (regex: RegExp): StringSchemaType => h.string().regex(regex),\n\n /**\n * Create email schema type\n * @returns {StringSchemaType} Email schema type\n */\n email: (): StringSchemaType => h.string().email(),\n\n /**\n * Create phone schema type\n * @returns {StringSchemaType} Phone schema type\n */\n phone: (): StringSchemaType => h.string().phone(),\n\n /** Create domain schema type\n * @param {boolean} requireHttpOrHttps - Require http or https\n * @returns {StringSchemaType} Domain schema type\n */\n domain: (requireHttpOrHttps = true): StringSchemaType => h.string().domain(requireHttpOrHttps),\n\n /**\n * Convert schema to standard schema\n * @param {AnySchema} schema - Schema\n * @returns {Schema<unknown, any>} Standard schema\n */\n toStandard: toStandard,\n};\n"],"mappings":";AAiFA,IAAsB,aAAtB,MAA+D;CAE7D,aAAkB,EAAE;CACpB,IAAI,WAAc;AAChB,SAAO;;CAET,SAAuB;CACvB,UAAoB;CAEpB,SAAe;AACb,OAAK,UAAU;AACf,SAAO;;CAGT,WAA6C;AAC3C,SAAO,IAAI,eAAqB,KAAK;;CAGvC,OAAiC;AAC/B,SAAO,IAAI,YAAyB,MAAM,IAAI,gBAAgB,CAAQ;;;;;;CAOxE,WAAqC;AACnC,SAAO,KAAK,MAAM;;CAGpB,KACE,QACgC;AAEhC,SAAO,IAAI,YAA+B,GADnB,OAAO,KAAK,UAAU,IAAI,cAAoB,MAAM,CAAC,CAChB;;CAG9D,QAA6B;AAC3B,SAAO,IAAI,YAAoB,KAAK;;CAGtC,WACE,aACsC;AACtC,SAAO,IAAI,iBAAqC,MAAM,YAAY;;;AAItE,SAAS,kBAAkB,QAAyB,OAAyB;AAC3E,KAAI,OAAO,UAAU,YAAY,WAAW,SAC1C,QAAO;AAET,KAAI,OAAO,UAAU,YAAY,WAAW,YAAY,CAAC,OAAO,MAAM,MAAM,CAC1E,QAAO;AAET,KAAI,OAAO,UAAU,aAAa,WAAW,UAC3C,QAAO;AAET,QAAO;;AAGT,IAAa,mBAAb,MAAa,yBAAyB,WAA4B;CAChE,OAAiC;CACjC,gBAAwB;CACxB,gBAAwB;CACxB,iBAAyB;CACzB,iBAAyB;CACzB,iBAAyB;CACzB,kBAA0B;CAC1B,sBAA8B;CAC9B;CACA;CAEA,cAAc;AACZ,SAAO;AACP,OAAK,aAAa,EAAE,MAAM,UAAU;;CAGtC,YAA6B;AAC3B,SAAO,KAAK;;CAGd,UAAU,GAA6B;EACrC,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,OAAO,QAAQ,KAAK;AAC3B,SAAO,aAAa;AACpB,SAAO,aAAa;GAClB,GAAG,KAAK;GACR,WAAW;GACZ;AACD,SAAO;;CAGT,UAAU,GAA6B;EACrC,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,OAAO,QAAQ,KAAK;AAC3B,SAAO,aAAa;AACpB,SAAO,aAAa;GAClB,GAAG,KAAK;GACR,WAAW;GACZ;AACD,SAAO;;CAGT,OAAyB;EACvB,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,OAAO,QAAQ,KAAK;AAC3B,SAAO,gBAAgB;AACvB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,QAAQ;GAAQ;AAC1D,SAAO;;CAGT,OAAyB;EACvB,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,gBAAgB;AACvB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,QAAQ;GAAQ;AAC1D,SAAO;;CAGT,MAAM,OAAiC;EACrC,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,iBAAiB;AACxB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,SAAS,MAAM;GAAQ;AACjE,SAAO;;CAGT,QAA0B;EACxB,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,iBAAiB;AACxB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,QAAQ;GAAS;AAC3D,SAAO;;CAGT,QAA0B;EACxB,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,iBAAiB;AACxB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,QAAQ;GAAS;AAC3D,SAAO;;CAGT,OAAO,qBAAqB,MAAwB;EAClD,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,kBAAkB;AACzB,SAAO,aAAa;GAAE,GAAG,KAAK;GAAY,QAAQ;GAAU;AAC5D,SAAO,sBAAsB;AAC7B,SAAO;;CAGT,cAAgE;EAC9D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,KAAK,WAAW,OAAO,UAAU,SACnC,SAAQ,OAAO,MAAM;AAGvB,OAAI,OAAO,UAAU,SACnB,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,6BAA6B,OAAO,SAAS,CAAC,EACnE;AAGH,OAAI,KAAK,eAAe,KAAA,KAAa,MAAM,SAAS,KAAK,WACvD,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,uBAAuB,KAAK,cAAc,CAAC,EAAE;AAG5E,OAAI,KAAK,eAAe,KAAA,KAAa,MAAM,SAAS,KAAK,WACvD,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,sBAAsB,KAAK,cAAc,CAAC,EAAE;AAG3E,OAAI,KAAK,iBAAiB,CAAC,KAAK,aAAa,MAAM,CACjD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,uBAAuB,CAAC,EAC7C;AAGH,OAAI,KAAK,kBAAkB,CAAC,KAAK,cAAc,MAAM,CACnD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,wBAAwB,CAAC,EAC9C;AAGH,OAAI,KAAK,kBAAkB,CAAC,KAAK,cAAc,MAAM,CACnD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,wBAAwB,CAAC,EAC9C;AAGH,OAAI,KAAK,kBAAkB,CAAC,KAAK,cAAc,MAAM,CACnD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,+BAA+B,CAAC,EACrD;AAGH,OAAI,KAAK,mBAAmB,CAAC,KAAK,eAAe,MAAM,CACrD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,yBAAyB,CAAC,EAC/C;AAGH,OAAI,KAAK,iBAAiB,CAAC,KAAK,aAAa,MAAM,CACjD,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,uBAAuB,CAAC,EAAE;AAGzD,UAAO,EAAE,OAAO;;EAElB,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;CAED,aAAqB,OAAwB;EAC3C,MAAM,OAAO,IAAI,KAAK,MAAM;AAC5B,SAAO,CAAC,OAAO,MAAM,KAAK,SAAS,CAAC;;CAGtC,aAAqB,OAAwB;AAE3C,SADkB,wEACD,KAAK,MAAM;;CAG9B,cAAsB,OAAwB;AAC5C,SAAO,IAAI,OAAO,KAAK,WAAW,QAAS,CAAC,KAAK,MAAM;;CAGzD,cAAsB,OAAwB;AAE5C,SADmB,6BACD,KAAK,MAAM;;CAG/B,cAAsB,OAAwB;AAE5C,SADmB,mBACD,KAAK,MAAM;;CAG/B,eAAuB,OAAwB;EAC7C,IAAI,cAAc;AAClB,MAAI,KAAK,oBACP,eAAc;AAEhB,SAAO,YAAY,KAAK,MAAM;;;AAIlC,IAAa,mBAAb,MAAa,yBAAyB,WAA4B;CAChE,OAAiC;CACjC;CACA;CAEA,cAAc;AACZ,SAAO;AACP,OAAK,aAAa,EAAE,MAAM,UAAU;;CAGtC,YAA6B;AAC3B,SAAO,KAAK;;CAGd,IAAI,GAA6B;EAC/B,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,OAAO,QAAQ,KAAK;AAC3B,SAAO,OAAO;AACd,SAAO,aAAa;GAClB,GAAG,KAAK;GACR,SAAS;GACV;AACD,SAAO;;CAGT,IAAI,GAA6B;EAC/B,MAAM,SAAS,IAAI,kBAAkB;AACrC,SAAO,OAAO,QAAQ,KAAK;AAC3B,SAAO,OAAO;AACd,SAAO,aAAa;GAClB,GAAG,KAAK;GACR,SAAS;GACV;AACD,SAAO;;CAGT,cAAgE;EAC9D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,KAAK,WAAW,OAAO,UAAU,UAAU;IAC7C,MAAM,UAAU,OAAO,MAAM;AAC7B,QAAI,CAAC,OAAO,MAAM,QAAQ,CACxB,SAAQ;;AAGZ,OAAI,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,CAClD,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,6BAA6B,OAAO,SAAS,CAAC,EACnE;AAEH,OAAI,KAAK,SAAS,KAAA,KAAa,QAAQ,KAAK,KAC1C,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,oBAAoB,KAAK,QAAQ,CAAC,EAAE;AAEnE,OAAI,KAAK,SAAS,KAAA,KAAa,QAAQ,KAAK,KAC1C,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,uBAAuB,KAAK,QAAQ,CAAC,EAAE;AAEtE,UAAO,EAAE,OAAO;;EAElB,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,oBAAb,cAAuC,WAA6B;CAClE,OAAiC;CAEjC,cAAc;AACZ,SAAO;AACP,OAAK,aAAa,EAAE,MAAM,WAAW;;CAGvC,YAA6B;AAC3B,SAAO,KAAK;;CAGd,cAAiE;EAC/D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,KAAK,WAAW,OAAO,UAAU;QAC/B,UAAU,UAAU,UAAU,KAAK,UAAU,IAC/C,SAAQ;aACC,UAAU,WAAW,UAAU,KAAK,UAAU,IACvD,SAAQ;;AAGZ,OAAI,OAAO,UAAU,UACnB,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,8BAA8B,OAAO,SAAS,CAAC,EACpE;AAEH,UAAO,EAAE,OAAO;;EAElB,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,gBAAb,cAAmC,WAAyB;CAC1D,OAAiC;CACjC,cAA6D;EAC3D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,UAAO,EAAE,OAAO;;EAElB,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,gBAAb,cAA2E,WAAiB;CAC1F;CAEA,YAAY,OAAU;AACpB,SAAO;AACP,OAAK,QAAQ;AACb,OAAK,aAAa;GAChB,OAAO;GACP,MAAM,OAAO;GACd;;CAGH,cAAqD;EACnD,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,UAAU,KAAK,MACjB,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,0BAA0B,KAAK,MAAM,aAAa,SAAS,CAAC,EACjF;AAEH,UAAO,EAAS,OAAY;;EAE9B,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,iBAAb,cAA0C,WAA6B;CACrE;CAEA,YAAY,QAAsB;AAChC,SAAO;AACP,OAAK,cAAc;AACnB,OAAK,aAAa,EAAE,GAAG,OAAO,YAAY;;CAG5C,cAAiE;EAC/D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,UAAU,KAAA,KAAa,UAAU,KACnC,QAAO,EAAE,OAAO,KAAA,GAAW;AAI7B,UADe,KAAK,YAAY,aAAa,SAAS,MAAM;;EAG9D,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,iBAAb,cAAoC,WAA0B;CAC5D,OAAgB;CAChB,cAAc;AACZ,SAAO;AACP,OAAK,aAAa,EAAE,MAAM,QAAQ;;CAGpC,cAA8D;EAC5D,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,UAAU,KACZ,QAAO,EACL,QAAQ,CACN,EACE,SAAS,2BAA2B,UAAU,KAAA,IAAY,cAAc,OAAO,SAChF,CACF,EACF;AAEH,UAAO,EAAE,OAAO,MAAM;;EAExB,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,cAAb,cAAuC,WAAiB;CACtD;CACA,YAAY,GAAG,SAA2B;AACxC,SAAO;AACP,OAAK,UAAU;AACf,OAAK,aAAa,EAAE,OAAO,QAAQ,KAAK,MAAM,EAAE,WAAW,EAAE;;CAG/D,cAAqD;EACnD,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;GAC5B,MAAM,cAAwC,EAAE;AAChD,QAAK,MAAM,UAAU,KAAK,SAAS;IACjC,MAAM,SAAS,OAAO,aAAa,SAAS,MAAM;AAClD,QAAI,EAAE,YAAY,QAChB,QAAO,EAAE,OAAO,OAAO,OAAO;AAEhC,gBAAY,KAAK,GAAG,OAAO,OAAQ;;AAErC,UAAO,EAAE,QAAQ,aAAa;;EAEhC,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,cAAb,cAAqD,WAAiB;CACpE;CAEA,YAAY,QAA8B;AACxC,SAAO;AACP,OAAK,cAAc;AACnB,OAAK,aAAa;GAAE,MAAM;GAAS,OAAO,OAAO;GAAY;;CAG/D,cAAqD;EACnD,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAA4B,OAAO,SAAS,CAAC,EAClE;GAGH,MAAM,UAAU,MAAM,KAAK,MAAM,UAAU;IACzC,MAAM,SAAS,KAAK,YAAY,aAAa,SAAS,KAAK;AAG3D,QAAI,YAAY,OACd,QAAO;KACL;KACA,QAAQ,OAAO,QAAQ,KAAK,WAAW;MACrC,GAAG;MACH,MAAM,MAAM,OAAO,CAAC,OAAO,GAAG,MAAM,KAAK,GAAG,CAAC,MAAM;MACpD,EAAE;KACJ;AAEH,WAAO;KAAE;KAAO,OAAO,OAAO;KAAO;KACrC;GAEF,MAAM,SAAS,QAAQ,QAAQ,MAAM,YAAY,EAAE;AAKnD,OAAI,OAAO,SAAS,EAClB,QAAO,EACL,QAAQ,OAAO,SAAS,MAAM,EAAE,OAAO,EACxC;AAGH,UAAO,EAAE,OAAO,QAAQ,KAAK,MAAO,WAAW,IAAI,EAAE,QAAQ,KAAM,EAAO;;EAE5E,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,mBAAb,cAA4C,WAAiB;CAC3D;CACA;CAIA,YAAY,QAAwB,kBAA+C;AACjF,SAAO;AACP,OAAK,cAAc;AACnB,OAAK,mBAAmB;AACxB,OAAK,aAAa;GAAE,GAAG,OAAO;GAAY,YAAY,iBAAiB;GAAM;;CAG/E,cAAqD;EACnD,SAAS;EACT,QAAQ;EACR,WAAW,UAAmB;AAC5B,OAAI,EAAE,iBAAiB,KAAK,kBAC1B,QAAO,EACL,QAAQ,CACN,EACE,SAAS,wBAAwB,KAAK,iBAAiB,QACxD,CACF,EACF;AAIH,UADe,KAAK,YAAY,aAAa,SAAS,MAAM;;EAG9D,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAGH,IAAa,mBAAb,cAAyE,WAAuB;CAC9F;CAEA,YAAY,YAA8B;AACxC,SAAO;AACP,OAAK,aAAa;EAElB,MAAM,aAAkC,EAAE;EAC1C,MAAM,WAAqB,EAAE;AAE7B,OAAK,MAAM,OAAO,YAAY;GAC5B,MAAM,aAAa,WAAW;AAG9B,OAAI,EAFe,sBAAsB,gBAGvC,UAAS,KAAK,IAAI;AAGpB,OAAI,OAAO,eAAe,SACxB,YAAW,OAAO,EAAE,MAAM,YAAY;YAC7B,sBAAsB,WAC/B,YAAW,OAAO,WAAW;YACpB,OAAO,eAAe,YAAY,eAAe,KAC1D,YAAW,OAAO;IAAE,MAAM;IAAU,YAAY,EAAE;IAAE;;AAIxD,OAAK,aAAa;GAChB,MAAM;GACN;GACA,UAAU,SAAS,SAAS,IAAI,WAAW,KAAA;GAC5C;;CAGH,cAA2D;EACzD,SAAS;EACT,QAAQ;EACR,WAAW,UAA+C;AACxD,OAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,MAAM,CACrE,QAAO,EACL,QAAQ,CACN,EACE,SACE,gCACC,UAAU,OAAO,SAAS,MAAM,QAAQ,MAAM,GAAG,UAAU,OAAO,QACtE,CACF,EACF;GAGH,MAAM,MAAM;GACZ,MAAM,SAAkC,EAAE;GAC1C,MAAM,SAAmC,EAAE;AAE3C,QAAK,MAAM,OAAO,KAAK,YAAY;IACjC,MAAM,aAAa,KAAK,WAAW;IACnC,MAAM,aAAa,sBAAsB;AAEzC,QAAI,EAAE,OAAO,QAAQ,CAAC,YAAY;AAChC,YAAO,KAAK;MACV,SAAS,8BAA8B;MACvC,MAAM,CAAC,IAAI;MACZ,CAAC;AACF;;AAGF,QAAI,OAAO;SACL,OAAO,eAAe,YAAY,cAAc;MAAC;MAAU;MAAU;MAAU,EAAE;MACnF,MAAM,kBAAkB;AACxB,UAAI,CAAC,kBAAkB,iBAAiB,IAAI,KAAK,CAC/C,QAAO,KAAK;OACV,SAAS,6BAA6B,IAAI,aAAa;OACvD,MAAM,CAAC,IAAI;OACZ,CAAC;UAEF,QAAO,OAAO,IAAI;gBAEX,sBAAsB,YAAY;MAC3C,MAAM,mBAAmB,WAAW,aAAa,SAC/C,IAAI,KACL;AACD,UAAI,YAAY;WACV,iBAAiB,OACnB,QAAO,KACL,GAAG,iBAAiB,OAAO,KAAK,WAAW;QACzC,GAAG;QACH,MAAM,MAAM,OAAO,CAAC,KAAK,GAAG,MAAM,KAAK,GAAG,CAAC,IAAI;QAChD,EAAE,CACJ;YAGH,QAAO,OAAO,iBAAiB;;;;AAMvC,OAAI,OAAO,SAAS,EAClB,QAAO,EAAE,QAAQ;AAGnB,UAAO,EAAE,OAAO,QAAa;;EAE/B,OAAO;GACL,OAAO,EAAE;GACT,QAAQ,EAAE;GACX;EACF;;AAKH,SAAS,WAAc,QAAuC;CAC5D,IAAI;AAEJ,KAAI,kBAAkB,WACpB,kBAAiB;UACR,OAAO,WAAW,SAC3B,KAAI,WAAW,SACb,kBAAiB,IAAI,kBAAkB;UAC9B,WAAW,SACpB,kBAAiB,IAAI,kBAAkB;UAC9B,WAAW,UACpB,kBAAiB,IAAI,mBAAmB;KAExC,OAAM,IAAI,MAAM,6CAA6C;UAEtD,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,OAAO,CAChF,kBAAiB,IAAI,iBAAsB,OAA2B;KAEtE,OAAM,IAAI,MAAM,6CAA6C;CAG/D,MAAM,IAAI,EACR,eAAe,WAAgB,OAAO,YACvC;AAED,QAAO;EACL,GAAG;EACH,UAAU;EACV,aAAa,eAAe;EAC5B,YAAY,EAAE,aAAa,eAAe;EAC1C,QAAQ;EACR,gBAAgB,IAAI,eAA2B,eAAe;EAC9D,MAAM,eAAe,KAAK,KAAK,eAAe;EAC9C,OAAO,eAAe,MAAM,KAAK,eAAe;EAChD,YAAY,eAAe,WAAW,KAAK,eAAe;EAC3D;;;;;;AAOH,MAAa,IAAI;CAKf,cAAgC,IAAI,kBAAkB;CAKtD,cAAgC,IAAI,kBAAkB;CAKtD,eAAkC,IAAI,mBAAmB;CAKzD,YAA4B,IAAI,gBAAgB;CAKhD,gBAAgC,IAAI,gBAAgB;CAMpD,WAA0B,IAAI,eAAe;CAO7C,UAA+C,UAC7C,IAAI,cAA0B,MAAM;CAOtC,SAAqC,cAAoD;AACvF,SAAO,IAAI,iBAAiB,aAAa,EAAE,CAAC;;CAQ9C,QAA6B,WAAqD;AAEhF,SADa,WAA0B,OAAO,CAClC,OAAO;;CAQrB,OACE,WACyC;AACzC,MAAI,CAAC,UAAU,OAAO,WAAW,EAC/B,OAAM,IAAI,MAAM,iDAAiD;EAEnE,MAAM,iBAAiB,OAAO,KAAK,QAAQ,EAAE,QAAQ,IAAI,CAAC;AAC1D,SAAO,EAAE,QAAQ,GAAG,eAAe;;CAQrC,WACE,WACwD;AACxD,SAAO,WAA2B,OAAO,CAAC,UAAU;;CAQtD,UAAiC,GAAG,YAA6D;AAE/F,SAAO,IAAI,YAA6C,GADrC,QAAQ,KAAK,MAAM,WAAmC,EAAE,CAAC,OAAO,CACb;;CAQxE,aACE,gBAC+C;AAE/C,SADmB,EAAE,OAAO,EAAE,CAAC,CACb,WAAW,YAAY;;CAO3C,YAA8B,EAAE,QAAQ,CAAC,MAAM;CAM/C,YAA8B,EAAE,QAAQ,CAAC,MAAM;CAO/C,QAAQ,UAAoC,EAAE,QAAQ,CAAC,MAAM,MAAM;CAMnE,aAA+B,EAAE,QAAQ,CAAC,OAAO;CAMjD,aAA+B,EAAE,QAAQ,CAAC,OAAO;CAMjD,SAAS,qBAAqB,SAA2B,EAAE,QAAQ,CAAC,OAAO,mBAAmB;CAOlF;CACb"}
1
+ {"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\ntype SchemaPrimitive = \"string\" | \"number\" | \"boolean\" | \"any\";\n\ninterface SchemaLike {\n [key: string]: SchemaPrimitive | SchemaLike | BaseSchema<any, any>;\n}\n\ntype Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;\n\ntype RequiredKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? never : K;\n}[keyof S];\n\ntype OptionalKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? K : never;\n}[keyof S];\n\ntype SchemaPrimitiveMap = {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n};\n\ntype SchemaType<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends keyof SchemaPrimitiveMap\n ? SchemaPrimitiveMap[S]\n : S extends Record<string, any>\n ? InferSchema<S>\n : unknown;\n\ntype InferObject<S extends SchemaDefinition> = Simplify<\n {\n [K in RequiredKeys<S>]: SchemaType<S[K]>;\n } & {\n [K in OptionalKeys<S>]?: SchemaType<S[K]>;\n }\n>;\n\ntype InferSchema<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends \"string\"\n ? string\n : S extends \"number\"\n ? number\n : S extends \"boolean\"\n ? boolean\n : S extends { [key: string]: any }\n ? {\n [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<\n S[K]\n >;\n } & {\n [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<\n S[K]\n >;\n }\n : unknown;\n\ntype SchemaDefinition = SchemaLike;\n\ntype CombinedStandardProps<I, O> = StandardSchemaV1.Props<I, O> & {\n readonly jsonSchema: StandardJSONSchemaV1.Converter;\n};\n\ninterface Schema<I, O> {\n readonly \"~standard\": CombinedStandardProps<I, O>;\n optional(): OptionalSchema<I, O | undefined>;\n null(): UnionSchema<I, O | null>;\n nullable(): UnionSchema<I, O | null>;\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]>;\n array(): ArraySchema<I, O[]>;\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>>;\n jsonSchema: any;\n readonly inferred: O;\n schema: Schema<I, O>;\n}\n\nexport abstract class BaseSchema<I, O> implements Schema<I, O> {\n abstract readonly \"~standard\": CombinedStandardProps<I, O>;\n jsonSchema: any = {};\n get inferred(): O {\n return null as unknown as O;\n }\n schema: Schema<I, O> = this;\n protected _coerce = false;\n\n coerce(): this {\n this._coerce = true;\n return this;\n }\n\n optional(): OptionalSchema<I, O | undefined> {\n return new OptionalSchema<I, O>(this);\n }\n\n null(): UnionSchema<I, O | null> {\n return new UnionSchema<I, O | null>(this, new NullSchemaType() as any);\n }\n\n /**\n * Allows the value to be `null` (alias for {@link null})\n * @returns {UnionSchema<I, O | null>} Schema that also accepts null\n */\n nullable(): UnionSchema<I, O | null> {\n return this.null();\n }\n\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]> {\n const literalSchemas = values.map((value) => new LiteralSchema<I, V>(value));\n return new UnionSchema<I, Values[number]>(...literalSchemas);\n }\n\n array(): ArraySchema<I, O[]> {\n return new ArraySchema<I, O[]>(this);\n }\n\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>> {\n return new InstanceOfSchema<I, InstanceType<C>>(this, constructor);\n }\n}\n\nfunction validatePrimitive(schema: SchemaPrimitive, value: unknown): boolean {\n if (typeof value === \"string\" && schema === \"string\") {\n return true;\n }\n if (typeof value === \"number\" && schema === \"number\" && !Number.isNaN(value)) {\n return true;\n }\n if (typeof value === \"boolean\" && schema === \"boolean\") {\n return true;\n }\n return false;\n}\n\nexport class StringSchemaType extends BaseSchema<unknown, string> {\n readonly type: SchemaPrimitive = \"string\";\n private _validateDate = false;\n private _validateUUID = false;\n private _validateRegex = false;\n private _validateEmail = false;\n private _validatePhone = false;\n private _validateDomain = false;\n private _requireHttpOrHttps = false;\n private _minLength?: number;\n private _maxLength?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"string\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n minLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._minLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minLength: n,\n };\n return schema;\n }\n\n maxLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._maxLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maxLength: n,\n };\n return schema;\n }\n\n date(): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._validateDate = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"date\" };\n return schema;\n }\n\n uuid(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateUUID = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"uuid\" };\n return schema;\n }\n\n regex(regex: RegExp): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateRegex = true;\n schema.jsonSchema = { ...this.jsonSchema, pattern: regex.source };\n return schema;\n }\n\n email(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateEmail = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"email\" };\n return schema;\n }\n\n phone(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validatePhone = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"phone\" };\n return schema;\n }\n\n domain(requireHttpOrHttps = true): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateDomain = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"domain\" };\n schema._requireHttpOrHttps = requireHttpOrHttps;\n return schema;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, string> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"string\") {\n value = String(value);\n }\n\n if (typeof value !== \"string\") {\n return {\n issues: [{ message: `Expected string, received ${typeof value}` }],\n };\n }\n\n if (this._minLength !== undefined && value.length < this._minLength) {\n return { issues: [{ message: `String shorter than ${this._minLength}` }] };\n }\n\n if (this._maxLength !== undefined && value.length > this._maxLength) {\n return { issues: [{ message: `String longer than ${this._maxLength}` }] };\n }\n\n if (this._validateUUID && !this._isValidUUID(value)) {\n return {\n issues: [{ message: \"Invalid UUID format\" }],\n };\n }\n\n if (this._validateRegex && !this._isValidRegex(value)) {\n return {\n issues: [{ message: \"Invalid regex format\" }],\n };\n }\n\n if (this._validateEmail && !this._isValidEmail(value)) {\n return {\n issues: [{ message: \"Invalid email format\" }],\n };\n }\n\n if (this._validatePhone && !this._isValidPhone(value)) {\n return {\n issues: [{ message: \"Invalid phone number format\" }],\n };\n }\n\n if (this._validateDomain && !this._isValidDomain(value)) {\n return {\n issues: [{ message: \"Invalid domain format\" }],\n };\n }\n\n if (this._validateDate && !this._isValidDate(value)) {\n return { issues: [{ message: \"Invalid date format\" }] };\n }\n\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as string,\n },\n };\n\n private _isValidDate(value: string): boolean {\n const date = new Date(value);\n return !Number.isNaN(date.getTime());\n }\n\n private _isValidUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n }\n\n private _isValidRegex(value: string): boolean {\n return new RegExp(this.jsonSchema.pattern!).test(value);\n }\n\n private _isValidEmail(value: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n }\n\n private _isValidPhone(value: string): boolean {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n return phoneRegex.test(value);\n }\n\n private _isValidDomain(value: string): boolean {\n let domainRegex = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n if (this._requireHttpOrHttps) {\n domainRegex = /^https?:\\/\\/[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n }\n return domainRegex.test(value);\n }\n}\n\nexport class NumberSchemaType extends BaseSchema<unknown, number> {\n readonly type: SchemaPrimitive = \"number\";\n private _min?: number;\n private _max?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"number\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n min(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._min = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minimum: n,\n };\n return schema;\n }\n\n max(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._max = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maximum: n,\n };\n return schema;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, number> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"number\") {\n const coerced = Number(value);\n if (!Number.isNaN(coerced)) {\n value = coerced;\n }\n }\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n return {\n issues: [{ message: `Expected number, received ${typeof value}` }],\n };\n }\n if (this._min !== undefined && value < this._min) {\n return { issues: [{ message: `Number less than ${this._min}` }] };\n }\n if (this._max !== undefined && value > this._max) {\n return { issues: [{ message: `Number greater than ${this._max}` }] };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as number,\n },\n };\n}\n\nexport class BooleanSchemaType extends BaseSchema<unknown, boolean> {\n readonly type: SchemaPrimitive = \"boolean\";\n\n constructor() {\n super();\n this.jsonSchema = { type: \"boolean\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, boolean> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"boolean\") {\n if (value === \"true\" || value === 1 || value === \"1\") {\n value = true;\n } else if (value === \"false\" || value === 0 || value === \"0\") {\n value = false;\n }\n }\n if (typeof value !== \"boolean\") {\n return {\n issues: [{ message: `Expected boolean, received ${typeof value}` }],\n };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as boolean,\n },\n };\n}\n\nexport class AnySchemaType extends BaseSchema<unknown, any> {\n readonly type: SchemaPrimitive = \"any\";\n readonly \"~standard\": CombinedStandardProps<unknown, any> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => ({}),\n output: () => ({}),\n },\n validate: (value: unknown) => {\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as any,\n },\n };\n}\n\nexport class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {\n private readonly value: T;\n\n constructor(value: T) {\n super();\n this.value = value;\n this.jsonSchema = {\n const: value,\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, T> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value !== this.value) {\n return {\n issues: [{ message: `Expected literal value ${this.value}, received ${value}` }],\n };\n }\n return { value: value as T };\n },\n types: {\n input: {} as I,\n output: {} as T,\n },\n };\n}\n\nexport class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {\n private readonly innerSchema: Schema<I, O>;\n\n constructor(schema: Schema<I, O>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { ...schema.jsonSchema };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O | undefined> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value === undefined || value === null) {\n return { value: undefined };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result;\n },\n types: {\n input: {} as I,\n output: {} as O | undefined,\n },\n };\n}\n\nexport class NullSchemaType extends BaseSchema<unknown, null> {\n readonly type = \"null\";\n constructor() {\n super();\n this.jsonSchema = { type: \"null\" };\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, null> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value !== null) {\n return {\n issues: [\n {\n message: `Expected null, received ${value === undefined ? \"undefined\" : typeof value}`,\n },\n ],\n };\n }\n return { value: null };\n },\n types: {\n input: {} as unknown,\n output: {} as unknown as null,\n },\n };\n}\n\nexport class UnionSchema<I, O> extends BaseSchema<I, O> {\n private readonly schemas: Schema<I, any>[];\n constructor(...schemas: Schema<I, any>[]) {\n super();\n this.schemas = schemas;\n this.jsonSchema = { anyOf: schemas.map((s) => s.jsonSchema) };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n const issuesAccum: StandardSchemaV1.Issue[] = [];\n for (const schema of this.schemas) {\n const result = schema[\"~standard\"].validate(value) as StandardSchemaV1.Result<any>;\n if (!(\"issues\" in result)) {\n return { value: result.value };\n }\n issuesAccum.push(...result.issues!);\n }\n return { issues: issuesAccum };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, O[number]>;\n\n constructor(schema: Schema<I, O[number]>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { type: \"array\", items: schema.jsonSchema };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (!Array.isArray(value)) {\n return {\n issues: [{ message: `Expected array, received ${typeof value}` }],\n };\n }\n\n const results = value.map((item, index) => {\n const result = this.innerSchema[\"~standard\"].validate(item) as StandardSchemaV1.Result<\n O[number]\n >;\n if (\"issues\" in result) {\n return {\n index,\n issues: result.issues?.map((issue) => ({\n ...issue,\n path: issue.path ? [index, ...issue.path] : [index],\n })),\n };\n }\n return { index, value: result.value };\n });\n\n const errors = results.filter((r) => \"issues\" in r) as {\n index: number;\n issues: StandardSchemaV1.Issue[];\n }[];\n\n if (errors.length > 0) {\n return {\n issues: errors.flatMap((e) => e.issues),\n };\n }\n\n return { value: results.map((r) => (\"value\" in r ? r.value : null)) as O };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class InstanceOfSchema<I, O> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, any>;\n private readonly classConstructor: new (\n ...args: any[]\n ) => any;\n\n constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any) {\n super();\n this.innerSchema = schema;\n this.classConstructor = classConstructor;\n this.jsonSchema = { ...schema.jsonSchema, instanceOf: classConstructor.name };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (!(value instanceof this.classConstructor)) {\n return {\n issues: [\n {\n message: `Expected instance of ${this.classConstructor.name}`,\n },\n ],\n };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result as StandardSchemaV1.Result<O>;\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {\n readonly definition: SchemaDefinition;\n\n constructor(definition: SchemaDefinition) {\n super();\n this.definition = definition;\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const key in definition) {\n const schemaItem = definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!isOptional) {\n required.push(key);\n }\n\n if (typeof schemaItem === \"string\") {\n properties[key] = { type: schemaItem };\n } else if (schemaItem instanceof BaseSchema) {\n properties[key] = schemaItem.jsonSchema;\n } else if (typeof schemaItem === \"object\" && schemaItem !== null) {\n properties[key] = { type: \"object\", properties: {} };\n }\n }\n\n this.jsonSchema = {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n };\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, T> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {\n issues: [\n {\n message:\n \"Expected object, received \" +\n (value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value),\n },\n ],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const issues: StandardSchemaV1.Issue[] = [];\n\n for (const key in this.definition) {\n const schemaItem = this.definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!(key in obj) && !isOptional) {\n issues.push({\n message: `Missing required property: ${key}`,\n path: [key],\n });\n continue;\n }\n\n if (key in obj) {\n if (typeof schemaItem === \"string\" && schemaItem in [\"string\", \"number\", \"boolean\"]) {\n const schemaPrimitive = schemaItem as SchemaPrimitive;\n if (!validatePrimitive(schemaPrimitive, obj[key])) {\n issues.push({\n message: `Invalid type for property ${key}: expected ${schemaPrimitive}`,\n path: [key],\n });\n } else {\n result[key] = obj[key];\n }\n } else if (schemaItem instanceof BaseSchema) {\n const validationResult = schemaItem[\"~standard\"].validate(\n obj[key],\n ) as StandardSchemaV1.Result<any>;\n if (\"issues\" in validationResult) {\n if (validationResult.issues) {\n issues.push(\n ...validationResult.issues.map((issue) => ({\n ...issue,\n path: issue.path ? [key, ...issue.path] : [key],\n })),\n );\n }\n } else {\n result[key] = validationResult.value;\n }\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues };\n }\n\n return { value: result as T };\n },\n types: {\n input: {} as unknown,\n output: {} as T,\n },\n };\n}\n\nexport type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;\n\nfunction toStandard<T>(schema: AnySchema): Schema<unknown, T> {\n let standardSchema: Schema<unknown, T>;\n\n if (schema instanceof BaseSchema) {\n standardSchema = schema as Schema<unknown, T>;\n } else if (typeof schema === \"string\") {\n if (schema === \"string\") {\n standardSchema = new StringSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"number\") {\n standardSchema = new NumberSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"boolean\") {\n standardSchema = new BooleanSchemaType() as unknown as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n } else if (typeof schema === \"object\" && schema !== null && !Array.isArray(schema)) {\n standardSchema = new ObjectSchemaType<any>(schema as SchemaDefinition) as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n\n const z = {\n toJSONSchema: (schema: any) => schema.jsonSchema,\n };\n\n return {\n ...standardSchema,\n inferred: null as unknown as T,\n \"~standard\": standardSchema[\"~standard\"],\n jsonSchema: z.toJSONSchema(standardSchema),\n schema: standardSchema,\n optional: () => new OptionalSchema<unknown, T>(standardSchema),\n enum: standardSchema.enum.bind(standardSchema),\n array: standardSchema.array.bind(standardSchema),\n instanceOf: standardSchema.instanceOf.bind(standardSchema),\n };\n}\n\n/**\n * Create standard schema types\n * @returns {typeof h} Standard schema types\n */\nexport const h = {\n /**\n * Create string schema type\n * @returns {StringSchemaType} String schema type\n */\n string: (): StringSchemaType => new StringSchemaType(),\n /**\n * Create number schema type\n * @returns {NumberSchemaType} Number schema type\n */\n number: (): NumberSchemaType => new NumberSchemaType(),\n /**\n * Create boolean schema type\n * @returns {BooleanSchemaType} Boolean schema type\n */\n boolean: (): BooleanSchemaType => new BooleanSchemaType(),\n /**\n * Create null schema type\n * @returns {NullSchemaType} Null schema type\n */\n null: (): NullSchemaType => new NullSchemaType(),\n /**\n * Create null schema type (alias for {@link h.null})\n * @returns {NullSchemaType} Null schema type\n */\n nullable: (): NullSchemaType => new NullSchemaType(),\n\n /**\n * Create any schema type\n * @returns {AnySchemaType} Any schema type\n */\n any: (): AnySchemaType => new AnySchemaType(),\n\n /**\n * Create literal schema type\n * @param {T} value - Literal value\n * @returns {LiteralSchema<unknown, T>} Literal schema type\n */\n literal: <T extends string | number | boolean>(value: T): LiteralSchema<unknown, T> =>\n new LiteralSchema<unknown, T>(value),\n\n /**\n * Create object schema type\n * @param {S} [schemaDef] - Schema definition\n * @returns {ObjectSchemaType<InferObject<S>>} Object schema type\n */\n object: <S extends SchemaDefinition>(schemaDef?: S): ObjectSchemaType<InferObject<S>> => {\n return new ObjectSchemaType(schemaDef || {}) as ObjectSchemaType<InferObject<S>>;\n },\n\n /**\n * Create array schema type\n * @param {S} schema - Schema\n * @returns {ArraySchema<unknown, InferSchema<S>[]>} Array schema type\n */\n array: <S extends AnySchema>(schema: S): ArraySchema<unknown, SchemaType<S>[]> => {\n const base = toStandard<SchemaType<S>>(schema);\n return base.array() as ArraySchema<unknown, SchemaType<S>[]>;\n },\n\n /**\n * Create enum schema type from a list of string, number or boolean values.\n * @param {Values} values - An array of literal values.\n * @returns {UnionSchema<unknown, Values[number]>} A schema that validates against one of the provided literal values.\n */\n enum: <T extends string | number | boolean, Values extends readonly [T, ...T[]]>(\n values: Values,\n ): UnionSchema<unknown, Values[number]> => {\n if (!values || values.length === 0) {\n throw new Error(\"h.enum() requires a non-empty array of values.\");\n }\n const literalSchemas = values.map((val) => h.literal(val));\n return h.options(...literalSchemas) as UnionSchema<unknown, Values[number]>;\n },\n\n /**\n * Create optional schema type\n * @param {S} schema - Schema\n * @returns {OptionalSchema<unknown, InferSchema<S> | undefined>} Optional schema type\n */\n optional: <S extends AnySchema>(\n schema: S,\n ): OptionalSchema<unknown, InferSchema<S> | undefined> => {\n return toStandard<InferSchema<S>>(schema).optional();\n },\n\n /**\n * Create options schema type\n * @param {S} schemas - Schemas\n * @returns {UnionSchema<unknown, InferSchema<S[number]>>} Options schema type\n */\n options: <S extends AnySchema[]>(...schemas: S): UnionSchema<unknown, InferSchema<S[number]>> => {\n const stdSchemas = schemas.map((s) => toStandard<InferSchema<S[number]>>(s).schema);\n return new UnionSchema<unknown, InferSchema<S[number]>>(...stdSchemas);\n },\n\n /**\n * Create instance of schema type\n * @param {C} constructor - Constructor function\n * @returns {InstanceOfSchema<unknown, InstanceType<C>>} Instance of schema type\n */\n instanceOf: <C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<unknown, InstanceType<C>> => {\n const baseSchema = h.object({});\n return baseSchema.instanceOf(constructor);\n },\n\n /**\n * Create date schema type\n * @returns {StringSchemaType} Date schema type\n */\n date: (): StringSchemaType => h.string().date(),\n\n /**\n * Create UUID schema type\n * @returns {StringSchemaType} UUID schema type\n */\n uuid: (): StringSchemaType => h.string().uuid(),\n\n /**\n * Create regex schema type\n * @param {RegExp} regex - Regex\n * @returns {StringSchemaType} Regex schema type\n */\n regex: (regex: RegExp): StringSchemaType => h.string().regex(regex),\n\n /**\n * Create email schema type\n * @returns {StringSchemaType} Email schema type\n */\n email: (): StringSchemaType => h.string().email(),\n\n /**\n * Create phone schema type\n * @returns {StringSchemaType} Phone schema type\n */\n phone: (): StringSchemaType => h.string().phone(),\n\n /** Create domain schema type\n * @param {boolean} requireHttpOrHttps - Require http or https\n * @returns {StringSchemaType} Domain schema type\n */\n domain: (requireHttpOrHttps = true): StringSchemaType => h.string().domain(requireHttpOrHttps),\n\n /**\n * Convert schema to standard schema\n * @param {AnySchema} schema - Schema\n * @returns {Schema<unknown, any>} Standard schema\n */\n toStandard: toStandard,\n\n /**\n * Get JSON Schema from a validation schema\n * @param {AnySchema} schema - Schema to convert\n * @param {Object} [options] - JSON Schema options\n * @param {string} [options.target] - Target JSON Schema draft version\n * @returns {Record<string, unknown>} JSON Schema object\n */\n getJsonSchema: (\n schema: AnySchema,\n options: { target?: string } = {},\n ): Record<string, unknown> => {\n const std = toStandard(schema);\n return std[\"~standard\"].jsonSchema.output({\n target: (options.target ?? \"draft-2020-12\") as StandardJSONSchemaV1.Target,\n });\n },\n};\n"],"mappings":"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"}
package/dist/types.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { StandardSchemaV1 } from "./node_modules/.bun/@standard-schema_spec@1.1.0/node_modules/@standard-schema/spec/dist/index.cjs";
1
+ import { StandardJSONSchemaV1, StandardSchemaV1 } from "./node_modules/.bun/@standard-schema_spec@1.1.0/node_modules/@standard-schema/spec/dist/index.cjs";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  type SchemaPrimitive = "string" | "number" | "boolean" | "any";
@@ -20,7 +20,11 @@ type InferSchema<S> = S extends BaseSchema<any, infer O> ? O : S extends "string
20
20
  [key: string]: any;
21
21
  } ? { [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<S[K]> } & { [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<S[K]> } : unknown;
22
22
  type SchemaDefinition = SchemaLike;
23
- interface Schema<I, O> extends StandardSchemaV1<I, O> {
23
+ type CombinedStandardProps<I, O> = StandardSchemaV1.Props<I, O> & {
24
+ readonly jsonSchema: StandardJSONSchemaV1.Converter;
25
+ };
26
+ interface Schema<I, O> {
27
+ readonly "~standard": CombinedStandardProps<I, O>;
24
28
  optional(): OptionalSchema<I, O | undefined>;
25
29
  null(): UnionSchema<I, O | null>;
26
30
  nullable(): UnionSchema<I, O | null>;
@@ -32,7 +36,7 @@ interface Schema<I, O> extends StandardSchemaV1<I, O> {
32
36
  schema: Schema<I, O>;
33
37
  }
34
38
  declare abstract class BaseSchema<I, O> implements Schema<I, O> {
35
- abstract readonly "~standard": StandardSchemaV1.Props<I, O>;
39
+ abstract readonly "~standard": CombinedStandardProps<I, O>;
36
40
  jsonSchema: any;
37
41
  get inferred(): O;
38
42
  schema: Schema<I, O>;
@@ -70,7 +74,7 @@ declare class StringSchemaType extends BaseSchema<unknown, string> {
70
74
  email(): StringSchemaType;
71
75
  phone(): StringSchemaType;
72
76
  domain(requireHttpOrHttps?: boolean): StringSchemaType;
73
- readonly "~standard": StandardSchemaV1.Props<unknown, string>;
77
+ readonly "~standard": CombinedStandardProps<unknown, string>;
74
78
  private _isValidDate;
75
79
  private _isValidUUID;
76
80
  private _isValidRegex;
@@ -86,53 +90,53 @@ declare class NumberSchemaType extends BaseSchema<unknown, number> {
86
90
  primitive(): SchemaPrimitive;
87
91
  min(n: number): NumberSchemaType;
88
92
  max(n: number): NumberSchemaType;
89
- readonly "~standard": StandardSchemaV1.Props<unknown, number>;
93
+ readonly "~standard": CombinedStandardProps<unknown, number>;
90
94
  }
91
95
  declare class BooleanSchemaType extends BaseSchema<unknown, boolean> {
92
96
  readonly type: SchemaPrimitive;
93
97
  constructor();
94
98
  primitive(): SchemaPrimitive;
95
- readonly "~standard": StandardSchemaV1.Props<unknown, boolean>;
99
+ readonly "~standard": CombinedStandardProps<unknown, boolean>;
96
100
  }
97
101
  declare class AnySchemaType extends BaseSchema<unknown, any> {
98
102
  readonly type: SchemaPrimitive;
99
- readonly "~standard": StandardSchemaV1.Props<unknown, any>;
103
+ readonly "~standard": CombinedStandardProps<unknown, any>;
100
104
  }
101
105
  declare class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {
102
106
  private readonly value;
103
107
  constructor(value: T);
104
- readonly "~standard": StandardSchemaV1.Props<I, T>;
108
+ readonly "~standard": CombinedStandardProps<I, T>;
105
109
  }
106
110
  declare class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {
107
111
  private readonly innerSchema;
108
112
  constructor(schema: Schema<I, O>);
109
- readonly "~standard": StandardSchemaV1.Props<I, O | undefined>;
113
+ readonly "~standard": CombinedStandardProps<I, O | undefined>;
110
114
  }
111
115
  declare class NullSchemaType extends BaseSchema<unknown, null> {
112
116
  readonly type = "null";
113
117
  constructor();
114
- readonly "~standard": StandardSchemaV1.Props<unknown, null>;
118
+ readonly "~standard": CombinedStandardProps<unknown, null>;
115
119
  }
116
120
  declare class UnionSchema<I, O> extends BaseSchema<I, O> {
117
121
  private readonly schemas;
118
122
  constructor(...schemas: Schema<I, any>[]);
119
- readonly "~standard": StandardSchemaV1.Props<I, O>;
123
+ readonly "~standard": CombinedStandardProps<I, O>;
120
124
  }
121
125
  declare class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {
122
126
  private readonly innerSchema;
123
127
  constructor(schema: Schema<I, O[number]>);
124
- readonly "~standard": StandardSchemaV1.Props<I, O>;
128
+ readonly "~standard": CombinedStandardProps<I, O>;
125
129
  }
126
130
  declare class InstanceOfSchema<I, O> extends BaseSchema<I, O> {
127
131
  private readonly innerSchema;
128
132
  private readonly classConstructor;
129
133
  constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any);
130
- readonly "~standard": StandardSchemaV1.Props<I, O>;
134
+ readonly "~standard": CombinedStandardProps<I, O>;
131
135
  }
132
136
  declare class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {
133
137
  readonly definition: SchemaDefinition;
134
138
  constructor(definition: SchemaDefinition);
135
- readonly "~standard": StandardSchemaV1.Props<unknown, T>;
139
+ readonly "~standard": CombinedStandardProps<unknown, T>;
136
140
  }
137
141
  type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;
138
142
  declare function toStandard<T>(schema: AnySchema): Schema<unknown, T>;
@@ -250,6 +254,16 @@ declare const h: {
250
254
  * @returns {Schema<unknown, any>} Standard schema
251
255
  */
252
256
  toStandard: typeof toStandard;
257
+ /**
258
+ * Get JSON Schema from a validation schema
259
+ * @param {AnySchema} schema - Schema to convert
260
+ * @param {Object} [options] - JSON Schema options
261
+ * @param {string} [options.target] - Target JSON Schema draft version
262
+ * @returns {Record<string, unknown>} JSON Schema object
263
+ */
264
+ getJsonSchema: (schema: AnySchema, options?: {
265
+ target?: string;
266
+ }) => Record<string, unknown>;
253
267
  };
254
268
  //#endregion
255
269
  export { AnySchema, AnySchemaType, ArraySchema, BaseSchema, BooleanSchemaType, InstanceOfSchema, LiteralSchema, NullSchemaType, NumberSchemaType, ObjectSchemaType, OptionalSchema, StringSchemaType, UnionSchema, h };
package/dist/types.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { StandardSchemaV1 } from "./node_modules/.bun/@standard-schema_spec@1.1.0/node_modules/@standard-schema/spec/dist/index.mjs";
1
+ import { StandardJSONSchemaV1, StandardSchemaV1 } from "./node_modules/.bun/@standard-schema_spec@1.1.0/node_modules/@standard-schema/spec/dist/index.mjs";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  type SchemaPrimitive = "string" | "number" | "boolean" | "any";
@@ -20,7 +20,11 @@ type InferSchema<S> = S extends BaseSchema<any, infer O> ? O : S extends "string
20
20
  [key: string]: any;
21
21
  } ? { [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<S[K]> } & { [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<S[K]> } : unknown;
22
22
  type SchemaDefinition = SchemaLike;
23
- interface Schema<I, O> extends StandardSchemaV1<I, O> {
23
+ type CombinedStandardProps<I, O> = StandardSchemaV1.Props<I, O> & {
24
+ readonly jsonSchema: StandardJSONSchemaV1.Converter;
25
+ };
26
+ interface Schema<I, O> {
27
+ readonly "~standard": CombinedStandardProps<I, O>;
24
28
  optional(): OptionalSchema<I, O | undefined>;
25
29
  null(): UnionSchema<I, O | null>;
26
30
  nullable(): UnionSchema<I, O | null>;
@@ -32,7 +36,7 @@ interface Schema<I, O> extends StandardSchemaV1<I, O> {
32
36
  schema: Schema<I, O>;
33
37
  }
34
38
  declare abstract class BaseSchema<I, O> implements Schema<I, O> {
35
- abstract readonly "~standard": StandardSchemaV1.Props<I, O>;
39
+ abstract readonly "~standard": CombinedStandardProps<I, O>;
36
40
  jsonSchema: any;
37
41
  get inferred(): O;
38
42
  schema: Schema<I, O>;
@@ -70,7 +74,7 @@ declare class StringSchemaType extends BaseSchema<unknown, string> {
70
74
  email(): StringSchemaType;
71
75
  phone(): StringSchemaType;
72
76
  domain(requireHttpOrHttps?: boolean): StringSchemaType;
73
- readonly "~standard": StandardSchemaV1.Props<unknown, string>;
77
+ readonly "~standard": CombinedStandardProps<unknown, string>;
74
78
  private _isValidDate;
75
79
  private _isValidUUID;
76
80
  private _isValidRegex;
@@ -86,53 +90,53 @@ declare class NumberSchemaType extends BaseSchema<unknown, number> {
86
90
  primitive(): SchemaPrimitive;
87
91
  min(n: number): NumberSchemaType;
88
92
  max(n: number): NumberSchemaType;
89
- readonly "~standard": StandardSchemaV1.Props<unknown, number>;
93
+ readonly "~standard": CombinedStandardProps<unknown, number>;
90
94
  }
91
95
  declare class BooleanSchemaType extends BaseSchema<unknown, boolean> {
92
96
  readonly type: SchemaPrimitive;
93
97
  constructor();
94
98
  primitive(): SchemaPrimitive;
95
- readonly "~standard": StandardSchemaV1.Props<unknown, boolean>;
99
+ readonly "~standard": CombinedStandardProps<unknown, boolean>;
96
100
  }
97
101
  declare class AnySchemaType extends BaseSchema<unknown, any> {
98
102
  readonly type: SchemaPrimitive;
99
- readonly "~standard": StandardSchemaV1.Props<unknown, any>;
103
+ readonly "~standard": CombinedStandardProps<unknown, any>;
100
104
  }
101
105
  declare class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {
102
106
  private readonly value;
103
107
  constructor(value: T);
104
- readonly "~standard": StandardSchemaV1.Props<I, T>;
108
+ readonly "~standard": CombinedStandardProps<I, T>;
105
109
  }
106
110
  declare class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {
107
111
  private readonly innerSchema;
108
112
  constructor(schema: Schema<I, O>);
109
- readonly "~standard": StandardSchemaV1.Props<I, O | undefined>;
113
+ readonly "~standard": CombinedStandardProps<I, O | undefined>;
110
114
  }
111
115
  declare class NullSchemaType extends BaseSchema<unknown, null> {
112
116
  readonly type = "null";
113
117
  constructor();
114
- readonly "~standard": StandardSchemaV1.Props<unknown, null>;
118
+ readonly "~standard": CombinedStandardProps<unknown, null>;
115
119
  }
116
120
  declare class UnionSchema<I, O> extends BaseSchema<I, O> {
117
121
  private readonly schemas;
118
122
  constructor(...schemas: Schema<I, any>[]);
119
- readonly "~standard": StandardSchemaV1.Props<I, O>;
123
+ readonly "~standard": CombinedStandardProps<I, O>;
120
124
  }
121
125
  declare class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {
122
126
  private readonly innerSchema;
123
127
  constructor(schema: Schema<I, O[number]>);
124
- readonly "~standard": StandardSchemaV1.Props<I, O>;
128
+ readonly "~standard": CombinedStandardProps<I, O>;
125
129
  }
126
130
  declare class InstanceOfSchema<I, O> extends BaseSchema<I, O> {
127
131
  private readonly innerSchema;
128
132
  private readonly classConstructor;
129
133
  constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any);
130
- readonly "~standard": StandardSchemaV1.Props<I, O>;
134
+ readonly "~standard": CombinedStandardProps<I, O>;
131
135
  }
132
136
  declare class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {
133
137
  readonly definition: SchemaDefinition;
134
138
  constructor(definition: SchemaDefinition);
135
- readonly "~standard": StandardSchemaV1.Props<unknown, T>;
139
+ readonly "~standard": CombinedStandardProps<unknown, T>;
136
140
  }
137
141
  type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;
138
142
  declare function toStandard<T>(schema: AnySchema): Schema<unknown, T>;
@@ -250,6 +254,16 @@ declare const h: {
250
254
  * @returns {Schema<unknown, any>} Standard schema
251
255
  */
252
256
  toStandard: typeof toStandard;
257
+ /**
258
+ * Get JSON Schema from a validation schema
259
+ * @param {AnySchema} schema - Schema to convert
260
+ * @param {Object} [options] - JSON Schema options
261
+ * @param {string} [options.target] - Target JSON Schema draft version
262
+ * @returns {Record<string, unknown>} JSON Schema object
263
+ */
264
+ getJsonSchema: (schema: AnySchema, options?: {
265
+ target?: string;
266
+ }) => Record<string, unknown>;
253
267
  };
254
268
  //#endregion
255
269
  export { AnySchema, AnySchemaType, ArraySchema, BaseSchema, BooleanSchemaType, InstanceOfSchema, LiteralSchema, NullSchemaType, NumberSchemaType, ObjectSchemaType, OptionalSchema, StringSchemaType, UnionSchema, h };
package/dist/types.mjs CHANGED
@@ -136,6 +136,10 @@ var StringSchemaType = class StringSchemaType extends BaseSchema {
136
136
  "~standard" = {
137
137
  version: 1,
138
138
  vendor: "h-schema",
139
+ jsonSchema: {
140
+ input: () => this.jsonSchema,
141
+ output: () => this.jsonSchema
142
+ },
139
143
  validate: (value) => {
140
144
  if (this._coerce && typeof value !== "string") value = String(value);
141
145
  if (typeof value !== "string") return { issues: [{ message: `Expected string, received ${typeof value}` }] };
@@ -210,6 +214,10 @@ var NumberSchemaType = class NumberSchemaType extends BaseSchema {
210
214
  "~standard" = {
211
215
  version: 1,
212
216
  vendor: "h-schema",
217
+ jsonSchema: {
218
+ input: () => this.jsonSchema,
219
+ output: () => this.jsonSchema
220
+ },
213
221
  validate: (value) => {
214
222
  if (this._coerce && typeof value !== "number") {
215
223
  const coerced = Number(value);
@@ -238,6 +246,10 @@ var BooleanSchemaType = class extends BaseSchema {
238
246
  "~standard" = {
239
247
  version: 1,
240
248
  vendor: "h-schema",
249
+ jsonSchema: {
250
+ input: () => this.jsonSchema,
251
+ output: () => this.jsonSchema
252
+ },
241
253
  validate: (value) => {
242
254
  if (this._coerce && typeof value !== "boolean") {
243
255
  if (value === "true" || value === 1 || value === "1") value = true;
@@ -257,6 +269,10 @@ var AnySchemaType = class extends BaseSchema {
257
269
  "~standard" = {
258
270
  version: 1,
259
271
  vendor: "h-schema",
272
+ jsonSchema: {
273
+ input: () => ({}),
274
+ output: () => ({})
275
+ },
260
276
  validate: (value) => {
261
277
  return { value };
262
278
  },
@@ -279,6 +295,10 @@ var LiteralSchema = class extends BaseSchema {
279
295
  "~standard" = {
280
296
  version: 1,
281
297
  vendor: "h-schema",
298
+ jsonSchema: {
299
+ input: () => this.jsonSchema,
300
+ output: () => this.jsonSchema
301
+ },
282
302
  validate: (value) => {
283
303
  if (value !== this.value) return { issues: [{ message: `Expected literal value ${this.value}, received ${value}` }] };
284
304
  return { value };
@@ -299,6 +319,10 @@ var OptionalSchema = class extends BaseSchema {
299
319
  "~standard" = {
300
320
  version: 1,
301
321
  vendor: "h-schema",
322
+ jsonSchema: {
323
+ input: () => this.jsonSchema,
324
+ output: () => this.jsonSchema
325
+ },
302
326
  validate: (value) => {
303
327
  if (value === void 0 || value === null) return { value: void 0 };
304
328
  return this.innerSchema["~standard"].validate(value);
@@ -318,6 +342,10 @@ var NullSchemaType = class extends BaseSchema {
318
342
  "~standard" = {
319
343
  version: 1,
320
344
  vendor: "h-schema",
345
+ jsonSchema: {
346
+ input: () => this.jsonSchema,
347
+ output: () => this.jsonSchema
348
+ },
321
349
  validate: (value) => {
322
350
  if (value !== null) return { issues: [{ message: `Expected null, received ${value === void 0 ? "undefined" : typeof value}` }] };
323
351
  return { value: null };
@@ -338,6 +366,10 @@ var UnionSchema = class extends BaseSchema {
338
366
  "~standard" = {
339
367
  version: 1,
340
368
  vendor: "h-schema",
369
+ jsonSchema: {
370
+ input: () => this.jsonSchema,
371
+ output: () => this.jsonSchema
372
+ },
341
373
  validate: (value) => {
342
374
  const issuesAccum = [];
343
375
  for (const schema of this.schemas) {
@@ -366,6 +398,10 @@ var ArraySchema = class extends BaseSchema {
366
398
  "~standard" = {
367
399
  version: 1,
368
400
  vendor: "h-schema",
401
+ jsonSchema: {
402
+ input: () => this.jsonSchema,
403
+ output: () => this.jsonSchema
404
+ },
369
405
  validate: (value) => {
370
406
  if (!Array.isArray(value)) return { issues: [{ message: `Expected array, received ${typeof value}` }] };
371
407
  const results = value.map((item, index) => {
@@ -407,6 +443,10 @@ var InstanceOfSchema = class extends BaseSchema {
407
443
  "~standard" = {
408
444
  version: 1,
409
445
  vendor: "h-schema",
446
+ jsonSchema: {
447
+ input: () => this.jsonSchema,
448
+ output: () => this.jsonSchema
449
+ },
410
450
  validate: (value) => {
411
451
  if (!(value instanceof this.classConstructor)) return { issues: [{ message: `Expected instance of ${this.classConstructor.name}` }] };
412
452
  return this.innerSchema["~standard"].validate(value);
@@ -443,6 +483,10 @@ var ObjectSchemaType = class extends BaseSchema {
443
483
  "~standard" = {
444
484
  version: 1,
445
485
  vendor: "h-schema",
486
+ jsonSchema: {
487
+ input: () => this.jsonSchema,
488
+ output: () => this.jsonSchema
489
+ },
446
490
  validate: (value) => {
447
491
  if (typeof value !== "object" || value === null || Array.isArray(value)) return { issues: [{ message: "Expected object, received " + (value === null ? "null" : Array.isArray(value) ? "array" : typeof value) }] };
448
492
  const obj = value;
@@ -550,7 +594,10 @@ const h = {
550
594
  email: () => h.string().email(),
551
595
  phone: () => h.string().phone(),
552
596
  domain: (requireHttpOrHttps = true) => h.string().domain(requireHttpOrHttps),
553
- toStandard
597
+ toStandard,
598
+ getJsonSchema: (schema, options = {}) => {
599
+ return toStandard(schema)["~standard"].jsonSchema.output({ target: options.target ?? "draft-2020-12" });
600
+ }
554
601
  };
555
602
  //#endregion
556
603
  export { AnySchemaType, ArraySchema, BaseSchema, BooleanSchemaType, InstanceOfSchema, LiteralSchema, NullSchemaType, NumberSchemaType, ObjectSchemaType, OptionalSchema, StringSchemaType, UnionSchema, h };
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\ntype SchemaPrimitive = \"string\" | \"number\" | \"boolean\" | \"any\";\n\ninterface SchemaLike {\n [key: string]: SchemaPrimitive | SchemaLike | BaseSchema<any, any>;\n}\n\ntype Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;\n\ntype RequiredKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? never : K;\n}[keyof S];\n\ntype OptionalKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? K : never;\n}[keyof S];\n\ntype SchemaPrimitiveMap = {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n};\n\ntype SchemaType<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends keyof SchemaPrimitiveMap\n ? SchemaPrimitiveMap[S]\n : S extends Record<string, any>\n ? InferSchema<S>\n : unknown;\n\ntype InferObject<S extends SchemaDefinition> = Simplify<\n {\n [K in RequiredKeys<S>]: SchemaType<S[K]>;\n } & {\n [K in OptionalKeys<S>]?: SchemaType<S[K]>;\n }\n>;\n\ntype InferSchema<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends \"string\"\n ? string\n : S extends \"number\"\n ? number\n : S extends \"boolean\"\n ? boolean\n : S extends { [key: string]: any }\n ? {\n [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<\n S[K]\n >;\n } & {\n [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<\n S[K]\n >;\n }\n : unknown;\n\ntype SchemaDefinition = SchemaLike;\n\ninterface Schema<I, O> extends StandardSchemaV1<I, O> {\n optional(): OptionalSchema<I, O | undefined>;\n null(): UnionSchema<I, O | null>;\n nullable(): UnionSchema<I, O | null>;\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]>;\n array(): ArraySchema<I, O[]>;\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>>;\n jsonSchema: any;\n readonly inferred: O;\n schema: Schema<I, O>;\n}\n\nexport abstract class BaseSchema<I, O> implements Schema<I, O> {\n abstract readonly \"~standard\": StandardSchemaV1.Props<I, O>;\n jsonSchema: any = {};\n get inferred(): O {\n return null as unknown as O;\n }\n schema: Schema<I, O> = this;\n protected _coerce = false;\n\n coerce(): this {\n this._coerce = true;\n return this;\n }\n\n optional(): OptionalSchema<I, O | undefined> {\n return new OptionalSchema<I, O>(this);\n }\n\n null(): UnionSchema<I, O | null> {\n return new UnionSchema<I, O | null>(this, new NullSchemaType() as any);\n }\n\n /**\n * Allows the value to be `null` (alias for {@link null})\n * @returns {UnionSchema<I, O | null>} Schema that also accepts null\n */\n nullable(): UnionSchema<I, O | null> {\n return this.null();\n }\n\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]> {\n const literalSchemas = values.map((value) => new LiteralSchema<I, V>(value));\n return new UnionSchema<I, Values[number]>(...literalSchemas);\n }\n\n array(): ArraySchema<I, O[]> {\n return new ArraySchema<I, O[]>(this);\n }\n\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>> {\n return new InstanceOfSchema<I, InstanceType<C>>(this, constructor);\n }\n}\n\nfunction validatePrimitive(schema: SchemaPrimitive, value: unknown): boolean {\n if (typeof value === \"string\" && schema === \"string\") {\n return true;\n }\n if (typeof value === \"number\" && schema === \"number\" && !Number.isNaN(value)) {\n return true;\n }\n if (typeof value === \"boolean\" && schema === \"boolean\") {\n return true;\n }\n return false;\n}\n\nexport class StringSchemaType extends BaseSchema<unknown, string> {\n readonly type: SchemaPrimitive = \"string\";\n private _validateDate = false;\n private _validateUUID = false;\n private _validateRegex = false;\n private _validateEmail = false;\n private _validatePhone = false;\n private _validateDomain = false;\n private _requireHttpOrHttps = false;\n private _minLength?: number;\n private _maxLength?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"string\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n minLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._minLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minLength: n,\n };\n return schema;\n }\n\n maxLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._maxLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maxLength: n,\n };\n return schema;\n }\n\n date(): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._validateDate = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"date\" };\n return schema;\n }\n\n uuid(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateUUID = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"uuid\" };\n return schema;\n }\n\n regex(regex: RegExp): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateRegex = true;\n schema.jsonSchema = { ...this.jsonSchema, pattern: regex.source };\n return schema;\n }\n\n email(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateEmail = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"email\" };\n return schema;\n }\n\n phone(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validatePhone = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"phone\" };\n return schema;\n }\n\n domain(requireHttpOrHttps = true): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateDomain = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"domain\" };\n schema._requireHttpOrHttps = requireHttpOrHttps;\n return schema;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, string> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"string\") {\n value = String(value);\n }\n\n if (typeof value !== \"string\") {\n return {\n issues: [{ message: `Expected string, received ${typeof value}` }],\n };\n }\n\n if (this._minLength !== undefined && value.length < this._minLength) {\n return { issues: [{ message: `String shorter than ${this._minLength}` }] };\n }\n\n if (this._maxLength !== undefined && value.length > this._maxLength) {\n return { issues: [{ message: `String longer than ${this._maxLength}` }] };\n }\n\n if (this._validateUUID && !this._isValidUUID(value)) {\n return {\n issues: [{ message: \"Invalid UUID format\" }],\n };\n }\n\n if (this._validateRegex && !this._isValidRegex(value)) {\n return {\n issues: [{ message: \"Invalid regex format\" }],\n };\n }\n\n if (this._validateEmail && !this._isValidEmail(value)) {\n return {\n issues: [{ message: \"Invalid email format\" }],\n };\n }\n\n if (this._validatePhone && !this._isValidPhone(value)) {\n return {\n issues: [{ message: \"Invalid phone number format\" }],\n };\n }\n\n if (this._validateDomain && !this._isValidDomain(value)) {\n return {\n issues: [{ message: \"Invalid domain format\" }],\n };\n }\n\n if (this._validateDate && !this._isValidDate(value)) {\n return { issues: [{ message: \"Invalid date format\" }] };\n }\n\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as string,\n },\n };\n\n private _isValidDate(value: string): boolean {\n const date = new Date(value);\n return !Number.isNaN(date.getTime());\n }\n\n private _isValidUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n }\n\n private _isValidRegex(value: string): boolean {\n return new RegExp(this.jsonSchema.pattern!).test(value);\n }\n\n private _isValidEmail(value: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n }\n\n private _isValidPhone(value: string): boolean {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n return phoneRegex.test(value);\n }\n\n private _isValidDomain(value: string): boolean {\n let domainRegex = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n if (this._requireHttpOrHttps) {\n domainRegex = /^https?:\\/\\/[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n }\n return domainRegex.test(value);\n }\n}\n\nexport class NumberSchemaType extends BaseSchema<unknown, number> {\n readonly type: SchemaPrimitive = \"number\";\n private _min?: number;\n private _max?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"number\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n min(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._min = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minimum: n,\n };\n return schema;\n }\n\n max(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._max = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maximum: n,\n };\n return schema;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, number> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"number\") {\n const coerced = Number(value);\n if (!Number.isNaN(coerced)) {\n value = coerced;\n }\n }\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n return {\n issues: [{ message: `Expected number, received ${typeof value}` }],\n };\n }\n if (this._min !== undefined && value < this._min) {\n return { issues: [{ message: `Number less than ${this._min}` }] };\n }\n if (this._max !== undefined && value > this._max) {\n return { issues: [{ message: `Number greater than ${this._max}` }] };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as number,\n },\n };\n}\n\nexport class BooleanSchemaType extends BaseSchema<unknown, boolean> {\n readonly type: SchemaPrimitive = \"boolean\";\n\n constructor() {\n super();\n this.jsonSchema = { type: \"boolean\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, boolean> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"boolean\") {\n if (value === \"true\" || value === 1 || value === \"1\") {\n value = true;\n } else if (value === \"false\" || value === 0 || value === \"0\") {\n value = false;\n }\n }\n if (typeof value !== \"boolean\") {\n return {\n issues: [{ message: `Expected boolean, received ${typeof value}` }],\n };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as boolean,\n },\n };\n}\n\nexport class AnySchemaType extends BaseSchema<unknown, any> {\n readonly type: SchemaPrimitive = \"any\";\n readonly \"~standard\": StandardSchemaV1.Props<unknown, any> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as any,\n },\n };\n}\n\nexport class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {\n private readonly value: T;\n\n constructor(value: T) {\n super();\n this.value = value;\n this.jsonSchema = {\n const: value,\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, T> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value !== this.value) {\n return {\n issues: [{ message: `Expected literal value ${this.value}, received ${value}` }],\n };\n }\n return { value: value as T };\n },\n types: {\n input: {} as I,\n output: {} as T,\n },\n };\n}\n\nexport class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {\n private readonly innerSchema: Schema<I, O>;\n\n constructor(schema: Schema<I, O>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { ...schema.jsonSchema };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O | undefined> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value === undefined || value === null) {\n return { value: undefined };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result;\n },\n types: {\n input: {} as I,\n output: {} as O | undefined,\n },\n };\n}\n\nexport class NullSchemaType extends BaseSchema<unknown, null> {\n readonly type = \"null\";\n constructor() {\n super();\n this.jsonSchema = { type: \"null\" };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, null> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (value !== null) {\n return {\n issues: [\n {\n message: `Expected null, received ${value === undefined ? \"undefined\" : typeof value}`,\n },\n ],\n };\n }\n return { value: null };\n },\n types: {\n input: {} as unknown,\n output: {} as unknown as null,\n },\n };\n}\n\nexport class UnionSchema<I, O> extends BaseSchema<I, O> {\n private readonly schemas: Schema<I, any>[];\n constructor(...schemas: Schema<I, any>[]) {\n super();\n this.schemas = schemas;\n this.jsonSchema = { anyOf: schemas.map((s) => s.jsonSchema) };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n const issuesAccum: StandardSchemaV1.Issue[] = [];\n for (const schema of this.schemas) {\n const result = schema[\"~standard\"].validate(value) as StandardSchemaV1.Result<any>;\n if (!(\"issues\" in result)) {\n return { value: result.value };\n }\n issuesAccum.push(...result.issues!);\n }\n return { issues: issuesAccum };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, O[number]>;\n\n constructor(schema: Schema<I, O[number]>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { type: \"array\", items: schema.jsonSchema };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (!Array.isArray(value)) {\n return {\n issues: [{ message: `Expected array, received ${typeof value}` }],\n };\n }\n\n const results = value.map((item, index) => {\n const result = this.innerSchema[\"~standard\"].validate(item) as StandardSchemaV1.Result<\n O[number]\n >;\n if (\"issues\" in result) {\n return {\n index,\n issues: result.issues?.map((issue) => ({\n ...issue,\n path: issue.path ? [index, ...issue.path] : [index],\n })),\n };\n }\n return { index, value: result.value };\n });\n\n const errors = results.filter((r) => \"issues\" in r) as {\n index: number;\n issues: StandardSchemaV1.Issue[];\n }[];\n\n if (errors.length > 0) {\n return {\n issues: errors.flatMap((e) => e.issues),\n };\n }\n\n return { value: results.map((r) => (\"value\" in r ? r.value : null)) as O };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class InstanceOfSchema<I, O> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, any>;\n private readonly classConstructor: new (\n ...args: any[]\n ) => any;\n\n constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any) {\n super();\n this.innerSchema = schema;\n this.classConstructor = classConstructor;\n this.jsonSchema = { ...schema.jsonSchema, instanceOf: classConstructor.name };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown) => {\n if (!(value instanceof this.classConstructor)) {\n return {\n issues: [\n {\n message: `Expected instance of ${this.classConstructor.name}`,\n },\n ],\n };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result as StandardSchemaV1.Result<O>;\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {\n readonly definition: SchemaDefinition;\n\n constructor(definition: SchemaDefinition) {\n super();\n this.definition = definition;\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const key in definition) {\n const schemaItem = definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!isOptional) {\n required.push(key);\n }\n\n if (typeof schemaItem === \"string\") {\n properties[key] = { type: schemaItem };\n } else if (schemaItem instanceof BaseSchema) {\n properties[key] = schemaItem.jsonSchema;\n } else if (typeof schemaItem === \"object\" && schemaItem !== null) {\n properties[key] = { type: \"object\", properties: {} };\n }\n }\n\n this.jsonSchema = {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n };\n }\n\n readonly \"~standard\": StandardSchemaV1.Props<unknown, T> = {\n version: 1,\n vendor: \"h-schema\",\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {\n issues: [\n {\n message:\n \"Expected object, received \" +\n (value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value),\n },\n ],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const issues: StandardSchemaV1.Issue[] = [];\n\n for (const key in this.definition) {\n const schemaItem = this.definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!(key in obj) && !isOptional) {\n issues.push({\n message: `Missing required property: ${key}`,\n path: [key],\n });\n continue;\n }\n\n if (key in obj) {\n if (typeof schemaItem === \"string\" && schemaItem in [\"string\", \"number\", \"boolean\"]) {\n const schemaPrimitive = schemaItem as SchemaPrimitive;\n if (!validatePrimitive(schemaPrimitive, obj[key])) {\n issues.push({\n message: `Invalid type for property ${key}: expected ${schemaPrimitive}`,\n path: [key],\n });\n } else {\n result[key] = obj[key];\n }\n } else if (schemaItem instanceof BaseSchema) {\n const validationResult = schemaItem[\"~standard\"].validate(\n obj[key],\n ) as StandardSchemaV1.Result<any>;\n if (\"issues\" in validationResult) {\n if (validationResult.issues) {\n issues.push(\n ...validationResult.issues.map((issue) => ({\n ...issue,\n path: issue.path ? [key, ...issue.path] : [key],\n })),\n );\n }\n } else {\n result[key] = validationResult.value;\n }\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues };\n }\n\n return { value: result as T };\n },\n types: {\n input: {} as unknown,\n output: {} as T,\n },\n };\n}\n\nexport type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;\n\nfunction toStandard<T>(schema: AnySchema): Schema<unknown, T> {\n let standardSchema: Schema<unknown, T>;\n\n if (schema instanceof BaseSchema) {\n standardSchema = schema as Schema<unknown, T>;\n } else if (typeof schema === \"string\") {\n if (schema === \"string\") {\n standardSchema = new StringSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"number\") {\n standardSchema = new NumberSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"boolean\") {\n standardSchema = new BooleanSchemaType() as unknown as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n } else if (typeof schema === \"object\" && schema !== null && !Array.isArray(schema)) {\n standardSchema = new ObjectSchemaType<any>(schema as SchemaDefinition) as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n\n const z = {\n toJSONSchema: (schema: any) => schema.jsonSchema,\n };\n\n return {\n ...standardSchema,\n inferred: null as unknown as T,\n \"~standard\": standardSchema[\"~standard\"],\n jsonSchema: z.toJSONSchema(standardSchema),\n schema: standardSchema,\n optional: () => new OptionalSchema<unknown, T>(standardSchema),\n enum: standardSchema.enum.bind(standardSchema),\n array: standardSchema.array.bind(standardSchema),\n instanceOf: standardSchema.instanceOf.bind(standardSchema),\n };\n}\n\n/**\n * Create standard schema types\n * @returns {typeof h} Standard schema types\n */\nexport const h = {\n /**\n * Create string schema type\n * @returns {StringSchemaType} String schema type\n */\n string: (): StringSchemaType => new StringSchemaType(),\n /**\n * Create number schema type\n * @returns {NumberSchemaType} Number schema type\n */\n number: (): NumberSchemaType => new NumberSchemaType(),\n /**\n * Create boolean schema type\n * @returns {BooleanSchemaType} Boolean schema type\n */\n boolean: (): BooleanSchemaType => new BooleanSchemaType(),\n /**\n * Create null schema type\n * @returns {NullSchemaType} Null schema type\n */\n null: (): NullSchemaType => new NullSchemaType(),\n /**\n * Create null schema type (alias for {@link h.null})\n * @returns {NullSchemaType} Null schema type\n */\n nullable: (): NullSchemaType => new NullSchemaType(),\n\n /**\n * Create any schema type\n * @returns {AnySchemaType} Any schema type\n */\n any: (): AnySchemaType => new AnySchemaType(),\n\n /**\n * Create literal schema type\n * @param {T} value - Literal value\n * @returns {LiteralSchema<unknown, T>} Literal schema type\n */\n literal: <T extends string | number | boolean>(value: T): LiteralSchema<unknown, T> =>\n new LiteralSchema<unknown, T>(value),\n\n /**\n * Create object schema type\n * @param {S} [schemaDef] - Schema definition\n * @returns {ObjectSchemaType<InferObject<S>>} Object schema type\n */\n object: <S extends SchemaDefinition>(schemaDef?: S): ObjectSchemaType<InferObject<S>> => {\n return new ObjectSchemaType(schemaDef || {}) as ObjectSchemaType<InferObject<S>>;\n },\n\n /**\n * Create array schema type\n * @param {S} schema - Schema\n * @returns {ArraySchema<unknown, InferSchema<S>[]>} Array schema type\n */\n array: <S extends AnySchema>(schema: S): ArraySchema<unknown, SchemaType<S>[]> => {\n const base = toStandard<SchemaType<S>>(schema);\n return base.array() as ArraySchema<unknown, SchemaType<S>[]>;\n },\n\n /**\n * Create enum schema type from a list of string, number or boolean values.\n * @param {Values} values - An array of literal values.\n * @returns {UnionSchema<unknown, Values[number]>} A schema that validates against one of the provided literal values.\n */\n enum: <T extends string | number | boolean, Values extends readonly [T, ...T[]]>(\n values: Values,\n ): UnionSchema<unknown, Values[number]> => {\n if (!values || values.length === 0) {\n throw new Error(\"h.enum() requires a non-empty array of values.\");\n }\n const literalSchemas = values.map((val) => h.literal(val));\n return h.options(...literalSchemas) as UnionSchema<unknown, Values[number]>;\n },\n\n /**\n * Create optional schema type\n * @param {S} schema - Schema\n * @returns {OptionalSchema<unknown, InferSchema<S> | undefined>} Optional schema type\n */\n optional: <S extends AnySchema>(\n schema: S,\n ): OptionalSchema<unknown, InferSchema<S> | undefined> => {\n return toStandard<InferSchema<S>>(schema).optional();\n },\n\n /**\n * Create options schema type\n * @param {S} schemas - Schemas\n * @returns {UnionSchema<unknown, InferSchema<S[number]>>} Options schema type\n */\n options: <S extends AnySchema[]>(...schemas: S): UnionSchema<unknown, InferSchema<S[number]>> => {\n const stdSchemas = schemas.map((s) => toStandard<InferSchema<S[number]>>(s).schema);\n return new UnionSchema<unknown, InferSchema<S[number]>>(...stdSchemas);\n },\n\n /**\n * Create instance of schema type\n * @param {C} constructor - Constructor function\n * @returns {InstanceOfSchema<unknown, InstanceType<C>>} Instance of schema type\n */\n instanceOf: <C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<unknown, InstanceType<C>> => {\n const baseSchema = h.object({});\n return baseSchema.instanceOf(constructor);\n },\n\n /**\n * Create date schema type\n * @returns {StringSchemaType} Date schema type\n */\n date: (): StringSchemaType => h.string().date(),\n\n /**\n * Create UUID schema type\n * @returns {StringSchemaType} UUID schema type\n */\n uuid: (): StringSchemaType => h.string().uuid(),\n\n /**\n * Create regex schema type\n * @param {RegExp} regex - Regex\n * @returns {StringSchemaType} Regex schema type\n */\n regex: (regex: RegExp): StringSchemaType => h.string().regex(regex),\n\n /**\n * Create email schema type\n * @returns {StringSchemaType} Email schema type\n */\n email: (): StringSchemaType => h.string().email(),\n\n /**\n * Create phone schema type\n * @returns {StringSchemaType} Phone schema type\n */\n phone: (): StringSchemaType => h.string().phone(),\n\n /** Create domain schema type\n * @param {boolean} requireHttpOrHttps - Require http or https\n * @returns {StringSchemaType} Domain schema type\n */\n domain: (requireHttpOrHttps = true): StringSchemaType => h.string().domain(requireHttpOrHttps),\n\n /**\n * Convert schema to standard schema\n * @param {AnySchema} schema - Schema\n * @returns {Schema<unknown, any>} Standard schema\n */\n toStandard: toStandard,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"types.mjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\";\n\ntype SchemaPrimitive = \"string\" | \"number\" | \"boolean\" | \"any\";\n\ninterface SchemaLike {\n [key: string]: SchemaPrimitive | SchemaLike | BaseSchema<any, any>;\n}\n\ntype Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;\n\ntype RequiredKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? never : K;\n}[keyof S];\n\ntype OptionalKeys<S> = {\n [K in keyof S]: S[K] extends OptionalSchema<any, any> ? K : never;\n}[keyof S];\n\ntype SchemaPrimitiveMap = {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n};\n\ntype SchemaType<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends keyof SchemaPrimitiveMap\n ? SchemaPrimitiveMap[S]\n : S extends Record<string, any>\n ? InferSchema<S>\n : unknown;\n\ntype InferObject<S extends SchemaDefinition> = Simplify<\n {\n [K in RequiredKeys<S>]: SchemaType<S[K]>;\n } & {\n [K in OptionalKeys<S>]?: SchemaType<S[K]>;\n }\n>;\n\ntype InferSchema<S> =\n S extends BaseSchema<any, infer O>\n ? O\n : S extends \"string\"\n ? string\n : S extends \"number\"\n ? number\n : S extends \"boolean\"\n ? boolean\n : S extends { [key: string]: any }\n ? {\n [K in keyof S as undefined extends InferSchema<S[K]> ? K : never]?: InferSchema<\n S[K]\n >;\n } & {\n [K in keyof S as undefined extends InferSchema<S[K]> ? never : K]: InferSchema<\n S[K]\n >;\n }\n : unknown;\n\ntype SchemaDefinition = SchemaLike;\n\ntype CombinedStandardProps<I, O> = StandardSchemaV1.Props<I, O> & {\n readonly jsonSchema: StandardJSONSchemaV1.Converter;\n};\n\ninterface Schema<I, O> {\n readonly \"~standard\": CombinedStandardProps<I, O>;\n optional(): OptionalSchema<I, O | undefined>;\n null(): UnionSchema<I, O | null>;\n nullable(): UnionSchema<I, O | null>;\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]>;\n array(): ArraySchema<I, O[]>;\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>>;\n jsonSchema: any;\n readonly inferred: O;\n schema: Schema<I, O>;\n}\n\nexport abstract class BaseSchema<I, O> implements Schema<I, O> {\n abstract readonly \"~standard\": CombinedStandardProps<I, O>;\n jsonSchema: any = {};\n get inferred(): O {\n return null as unknown as O;\n }\n schema: Schema<I, O> = this;\n protected _coerce = false;\n\n coerce(): this {\n this._coerce = true;\n return this;\n }\n\n optional(): OptionalSchema<I, O | undefined> {\n return new OptionalSchema<I, O>(this);\n }\n\n null(): UnionSchema<I, O | null> {\n return new UnionSchema<I, O | null>(this, new NullSchemaType() as any);\n }\n\n /**\n * Allows the value to be `null` (alias for {@link null})\n * @returns {UnionSchema<I, O | null>} Schema that also accepts null\n */\n nullable(): UnionSchema<I, O | null> {\n return this.null();\n }\n\n enum<V extends O & (string | number | boolean), Values extends readonly [V, ...V[]]>(\n values: Values,\n ): UnionSchema<I, Values[number]> {\n const literalSchemas = values.map((value) => new LiteralSchema<I, V>(value));\n return new UnionSchema<I, Values[number]>(...literalSchemas);\n }\n\n array(): ArraySchema<I, O[]> {\n return new ArraySchema<I, O[]>(this);\n }\n\n instanceOf<C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<I, InstanceType<C>> {\n return new InstanceOfSchema<I, InstanceType<C>>(this, constructor);\n }\n}\n\nfunction validatePrimitive(schema: SchemaPrimitive, value: unknown): boolean {\n if (typeof value === \"string\" && schema === \"string\") {\n return true;\n }\n if (typeof value === \"number\" && schema === \"number\" && !Number.isNaN(value)) {\n return true;\n }\n if (typeof value === \"boolean\" && schema === \"boolean\") {\n return true;\n }\n return false;\n}\n\nexport class StringSchemaType extends BaseSchema<unknown, string> {\n readonly type: SchemaPrimitive = \"string\";\n private _validateDate = false;\n private _validateUUID = false;\n private _validateRegex = false;\n private _validateEmail = false;\n private _validatePhone = false;\n private _validateDomain = false;\n private _requireHttpOrHttps = false;\n private _minLength?: number;\n private _maxLength?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"string\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n minLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._minLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minLength: n,\n };\n return schema;\n }\n\n maxLength(n: number): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._maxLength = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maxLength: n,\n };\n return schema;\n }\n\n date(): StringSchemaType {\n const schema = new StringSchemaType();\n Object.assign(schema, this);\n schema._validateDate = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"date\" };\n return schema;\n }\n\n uuid(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateUUID = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"uuid\" };\n return schema;\n }\n\n regex(regex: RegExp): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateRegex = true;\n schema.jsonSchema = { ...this.jsonSchema, pattern: regex.source };\n return schema;\n }\n\n email(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateEmail = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"email\" };\n return schema;\n }\n\n phone(): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validatePhone = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"phone\" };\n return schema;\n }\n\n domain(requireHttpOrHttps = true): StringSchemaType {\n const schema = new StringSchemaType();\n schema._validateDomain = true;\n schema.jsonSchema = { ...this.jsonSchema, format: \"domain\" };\n schema._requireHttpOrHttps = requireHttpOrHttps;\n return schema;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, string> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"string\") {\n value = String(value);\n }\n\n if (typeof value !== \"string\") {\n return {\n issues: [{ message: `Expected string, received ${typeof value}` }],\n };\n }\n\n if (this._minLength !== undefined && value.length < this._minLength) {\n return { issues: [{ message: `String shorter than ${this._minLength}` }] };\n }\n\n if (this._maxLength !== undefined && value.length > this._maxLength) {\n return { issues: [{ message: `String longer than ${this._maxLength}` }] };\n }\n\n if (this._validateUUID && !this._isValidUUID(value)) {\n return {\n issues: [{ message: \"Invalid UUID format\" }],\n };\n }\n\n if (this._validateRegex && !this._isValidRegex(value)) {\n return {\n issues: [{ message: \"Invalid regex format\" }],\n };\n }\n\n if (this._validateEmail && !this._isValidEmail(value)) {\n return {\n issues: [{ message: \"Invalid email format\" }],\n };\n }\n\n if (this._validatePhone && !this._isValidPhone(value)) {\n return {\n issues: [{ message: \"Invalid phone number format\" }],\n };\n }\n\n if (this._validateDomain && !this._isValidDomain(value)) {\n return {\n issues: [{ message: \"Invalid domain format\" }],\n };\n }\n\n if (this._validateDate && !this._isValidDate(value)) {\n return { issues: [{ message: \"Invalid date format\" }] };\n }\n\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as string,\n },\n };\n\n private _isValidDate(value: string): boolean {\n const date = new Date(value);\n return !Number.isNaN(date.getTime());\n }\n\n private _isValidUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n }\n\n private _isValidRegex(value: string): boolean {\n return new RegExp(this.jsonSchema.pattern!).test(value);\n }\n\n private _isValidEmail(value: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n }\n\n private _isValidPhone(value: string): boolean {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n return phoneRegex.test(value);\n }\n\n private _isValidDomain(value: string): boolean {\n let domainRegex = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n if (this._requireHttpOrHttps) {\n domainRegex = /^https?:\\/\\/[a-z0-9]+([-.]{1}[a-z0-9]+)*\\.[a-z]{2,6}$/;\n }\n return domainRegex.test(value);\n }\n}\n\nexport class NumberSchemaType extends BaseSchema<unknown, number> {\n readonly type: SchemaPrimitive = \"number\";\n private _min?: number;\n private _max?: number;\n\n constructor() {\n super();\n this.jsonSchema = { type: \"number\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n min(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._min = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n minimum: n,\n };\n return schema;\n }\n\n max(n: number): NumberSchemaType {\n const schema = new NumberSchemaType();\n Object.assign(schema, this);\n schema._max = n;\n schema.jsonSchema = {\n ...this.jsonSchema,\n maximum: n,\n };\n return schema;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, number> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"number\") {\n const coerced = Number(value);\n if (!Number.isNaN(coerced)) {\n value = coerced;\n }\n }\n if (typeof value !== \"number\" || Number.isNaN(value)) {\n return {\n issues: [{ message: `Expected number, received ${typeof value}` }],\n };\n }\n if (this._min !== undefined && value < this._min) {\n return { issues: [{ message: `Number less than ${this._min}` }] };\n }\n if (this._max !== undefined && value > this._max) {\n return { issues: [{ message: `Number greater than ${this._max}` }] };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as number,\n },\n };\n}\n\nexport class BooleanSchemaType extends BaseSchema<unknown, boolean> {\n readonly type: SchemaPrimitive = \"boolean\";\n\n constructor() {\n super();\n this.jsonSchema = { type: \"boolean\" };\n }\n\n primitive(): SchemaPrimitive {\n return this.type;\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, boolean> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (this._coerce && typeof value !== \"boolean\") {\n if (value === \"true\" || value === 1 || value === \"1\") {\n value = true;\n } else if (value === \"false\" || value === 0 || value === \"0\") {\n value = false;\n }\n }\n if (typeof value !== \"boolean\") {\n return {\n issues: [{ message: `Expected boolean, received ${typeof value}` }],\n };\n }\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as boolean,\n },\n };\n}\n\nexport class AnySchemaType extends BaseSchema<unknown, any> {\n readonly type: SchemaPrimitive = \"any\";\n readonly \"~standard\": CombinedStandardProps<unknown, any> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => ({}),\n output: () => ({}),\n },\n validate: (value: unknown) => {\n return { value };\n },\n types: {\n input: {} as unknown,\n output: {} as any,\n },\n };\n}\n\nexport class LiteralSchema<I, T extends string | number | boolean> extends BaseSchema<I, T> {\n private readonly value: T;\n\n constructor(value: T) {\n super();\n this.value = value;\n this.jsonSchema = {\n const: value,\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, T> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value !== this.value) {\n return {\n issues: [{ message: `Expected literal value ${this.value}, received ${value}` }],\n };\n }\n return { value: value as T };\n },\n types: {\n input: {} as I,\n output: {} as T,\n },\n };\n}\n\nexport class OptionalSchema<I, O> extends BaseSchema<I, O | undefined> {\n private readonly innerSchema: Schema<I, O>;\n\n constructor(schema: Schema<I, O>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { ...schema.jsonSchema };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O | undefined> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value === undefined || value === null) {\n return { value: undefined };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result;\n },\n types: {\n input: {} as I,\n output: {} as O | undefined,\n },\n };\n}\n\nexport class NullSchemaType extends BaseSchema<unknown, null> {\n readonly type = \"null\";\n constructor() {\n super();\n this.jsonSchema = { type: \"null\" };\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, null> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (value !== null) {\n return {\n issues: [\n {\n message: `Expected null, received ${value === undefined ? \"undefined\" : typeof value}`,\n },\n ],\n };\n }\n return { value: null };\n },\n types: {\n input: {} as unknown,\n output: {} as unknown as null,\n },\n };\n}\n\nexport class UnionSchema<I, O> extends BaseSchema<I, O> {\n private readonly schemas: Schema<I, any>[];\n constructor(...schemas: Schema<I, any>[]) {\n super();\n this.schemas = schemas;\n this.jsonSchema = { anyOf: schemas.map((s) => s.jsonSchema) };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n const issuesAccum: StandardSchemaV1.Issue[] = [];\n for (const schema of this.schemas) {\n const result = schema[\"~standard\"].validate(value) as StandardSchemaV1.Result<any>;\n if (!(\"issues\" in result)) {\n return { value: result.value };\n }\n issuesAccum.push(...result.issues!);\n }\n return { issues: issuesAccum };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ArraySchema<I, O extends any[]> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, O[number]>;\n\n constructor(schema: Schema<I, O[number]>) {\n super();\n this.innerSchema = schema;\n this.jsonSchema = { type: \"array\", items: schema.jsonSchema };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (!Array.isArray(value)) {\n return {\n issues: [{ message: `Expected array, received ${typeof value}` }],\n };\n }\n\n const results = value.map((item, index) => {\n const result = this.innerSchema[\"~standard\"].validate(item) as StandardSchemaV1.Result<\n O[number]\n >;\n if (\"issues\" in result) {\n return {\n index,\n issues: result.issues?.map((issue) => ({\n ...issue,\n path: issue.path ? [index, ...issue.path] : [index],\n })),\n };\n }\n return { index, value: result.value };\n });\n\n const errors = results.filter((r) => \"issues\" in r) as {\n index: number;\n issues: StandardSchemaV1.Issue[];\n }[];\n\n if (errors.length > 0) {\n return {\n issues: errors.flatMap((e) => e.issues),\n };\n }\n\n return { value: results.map((r) => (\"value\" in r ? r.value : null)) as O };\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class InstanceOfSchema<I, O> extends BaseSchema<I, O> {\n private readonly innerSchema: Schema<I, any>;\n private readonly classConstructor: new (\n ...args: any[]\n ) => any;\n\n constructor(schema: Schema<I, any>, classConstructor: new (...args: any[]) => any) {\n super();\n this.innerSchema = schema;\n this.classConstructor = classConstructor;\n this.jsonSchema = { ...schema.jsonSchema, instanceOf: classConstructor.name };\n }\n\n readonly \"~standard\": CombinedStandardProps<I, O> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown) => {\n if (!(value instanceof this.classConstructor)) {\n return {\n issues: [\n {\n message: `Expected instance of ${this.classConstructor.name}`,\n },\n ],\n };\n }\n\n const result = this.innerSchema[\"~standard\"].validate(value);\n return result as StandardSchemaV1.Result<O>;\n },\n types: {\n input: {} as I,\n output: {} as O,\n },\n };\n}\n\nexport class ObjectSchemaType<T extends Record<string, unknown>> extends BaseSchema<unknown, T> {\n readonly definition: SchemaDefinition;\n\n constructor(definition: SchemaDefinition) {\n super();\n this.definition = definition;\n\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const key in definition) {\n const schemaItem = definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!isOptional) {\n required.push(key);\n }\n\n if (typeof schemaItem === \"string\") {\n properties[key] = { type: schemaItem };\n } else if (schemaItem instanceof BaseSchema) {\n properties[key] = schemaItem.jsonSchema;\n } else if (typeof schemaItem === \"object\" && schemaItem !== null) {\n properties[key] = { type: \"object\", properties: {} };\n }\n }\n\n this.jsonSchema = {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n };\n }\n\n readonly \"~standard\": CombinedStandardProps<unknown, T> = {\n version: 1,\n vendor: \"h-schema\",\n jsonSchema: {\n input: () => this.jsonSchema,\n output: () => this.jsonSchema,\n },\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {\n issues: [\n {\n message:\n \"Expected object, received \" +\n (value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value),\n },\n ],\n };\n }\n\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const issues: StandardSchemaV1.Issue[] = [];\n\n for (const key in this.definition) {\n const schemaItem = this.definition[key];\n const isOptional = schemaItem instanceof OptionalSchema;\n\n if (!(key in obj) && !isOptional) {\n issues.push({\n message: `Missing required property: ${key}`,\n path: [key],\n });\n continue;\n }\n\n if (key in obj) {\n if (typeof schemaItem === \"string\" && schemaItem in [\"string\", \"number\", \"boolean\"]) {\n const schemaPrimitive = schemaItem as SchemaPrimitive;\n if (!validatePrimitive(schemaPrimitive, obj[key])) {\n issues.push({\n message: `Invalid type for property ${key}: expected ${schemaPrimitive}`,\n path: [key],\n });\n } else {\n result[key] = obj[key];\n }\n } else if (schemaItem instanceof BaseSchema) {\n const validationResult = schemaItem[\"~standard\"].validate(\n obj[key],\n ) as StandardSchemaV1.Result<any>;\n if (\"issues\" in validationResult) {\n if (validationResult.issues) {\n issues.push(\n ...validationResult.issues.map((issue) => ({\n ...issue,\n path: issue.path ? [key, ...issue.path] : [key],\n })),\n );\n }\n } else {\n result[key] = validationResult.value;\n }\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues };\n }\n\n return { value: result as T };\n },\n types: {\n input: {} as unknown,\n output: {} as T,\n },\n };\n}\n\nexport type AnySchema = SchemaPrimitive | BaseSchema<any, any> | SchemaDefinition;\n\nfunction toStandard<T>(schema: AnySchema): Schema<unknown, T> {\n let standardSchema: Schema<unknown, T>;\n\n if (schema instanceof BaseSchema) {\n standardSchema = schema as Schema<unknown, T>;\n } else if (typeof schema === \"string\") {\n if (schema === \"string\") {\n standardSchema = new StringSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"number\") {\n standardSchema = new NumberSchemaType() as unknown as Schema<unknown, T>;\n } else if (schema === \"boolean\") {\n standardSchema = new BooleanSchemaType() as unknown as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n } else if (typeof schema === \"object\" && schema !== null && !Array.isArray(schema)) {\n standardSchema = new ObjectSchemaType<any>(schema as SchemaDefinition) as Schema<unknown, T>;\n } else {\n throw new Error(\"Invalid schema type provided to toStandard\");\n }\n\n const z = {\n toJSONSchema: (schema: any) => schema.jsonSchema,\n };\n\n return {\n ...standardSchema,\n inferred: null as unknown as T,\n \"~standard\": standardSchema[\"~standard\"],\n jsonSchema: z.toJSONSchema(standardSchema),\n schema: standardSchema,\n optional: () => new OptionalSchema<unknown, T>(standardSchema),\n enum: standardSchema.enum.bind(standardSchema),\n array: standardSchema.array.bind(standardSchema),\n instanceOf: standardSchema.instanceOf.bind(standardSchema),\n };\n}\n\n/**\n * Create standard schema types\n * @returns {typeof h} Standard schema types\n */\nexport const h = {\n /**\n * Create string schema type\n * @returns {StringSchemaType} String schema type\n */\n string: (): StringSchemaType => new StringSchemaType(),\n /**\n * Create number schema type\n * @returns {NumberSchemaType} Number schema type\n */\n number: (): NumberSchemaType => new NumberSchemaType(),\n /**\n * Create boolean schema type\n * @returns {BooleanSchemaType} Boolean schema type\n */\n boolean: (): BooleanSchemaType => new BooleanSchemaType(),\n /**\n * Create null schema type\n * @returns {NullSchemaType} Null schema type\n */\n null: (): NullSchemaType => new NullSchemaType(),\n /**\n * Create null schema type (alias for {@link h.null})\n * @returns {NullSchemaType} Null schema type\n */\n nullable: (): NullSchemaType => new NullSchemaType(),\n\n /**\n * Create any schema type\n * @returns {AnySchemaType} Any schema type\n */\n any: (): AnySchemaType => new AnySchemaType(),\n\n /**\n * Create literal schema type\n * @param {T} value - Literal value\n * @returns {LiteralSchema<unknown, T>} Literal schema type\n */\n literal: <T extends string | number | boolean>(value: T): LiteralSchema<unknown, T> =>\n new LiteralSchema<unknown, T>(value),\n\n /**\n * Create object schema type\n * @param {S} [schemaDef] - Schema definition\n * @returns {ObjectSchemaType<InferObject<S>>} Object schema type\n */\n object: <S extends SchemaDefinition>(schemaDef?: S): ObjectSchemaType<InferObject<S>> => {\n return new ObjectSchemaType(schemaDef || {}) as ObjectSchemaType<InferObject<S>>;\n },\n\n /**\n * Create array schema type\n * @param {S} schema - Schema\n * @returns {ArraySchema<unknown, InferSchema<S>[]>} Array schema type\n */\n array: <S extends AnySchema>(schema: S): ArraySchema<unknown, SchemaType<S>[]> => {\n const base = toStandard<SchemaType<S>>(schema);\n return base.array() as ArraySchema<unknown, SchemaType<S>[]>;\n },\n\n /**\n * Create enum schema type from a list of string, number or boolean values.\n * @param {Values} values - An array of literal values.\n * @returns {UnionSchema<unknown, Values[number]>} A schema that validates against one of the provided literal values.\n */\n enum: <T extends string | number | boolean, Values extends readonly [T, ...T[]]>(\n values: Values,\n ): UnionSchema<unknown, Values[number]> => {\n if (!values || values.length === 0) {\n throw new Error(\"h.enum() requires a non-empty array of values.\");\n }\n const literalSchemas = values.map((val) => h.literal(val));\n return h.options(...literalSchemas) as UnionSchema<unknown, Values[number]>;\n },\n\n /**\n * Create optional schema type\n * @param {S} schema - Schema\n * @returns {OptionalSchema<unknown, InferSchema<S> | undefined>} Optional schema type\n */\n optional: <S extends AnySchema>(\n schema: S,\n ): OptionalSchema<unknown, InferSchema<S> | undefined> => {\n return toStandard<InferSchema<S>>(schema).optional();\n },\n\n /**\n * Create options schema type\n * @param {S} schemas - Schemas\n * @returns {UnionSchema<unknown, InferSchema<S[number]>>} Options schema type\n */\n options: <S extends AnySchema[]>(...schemas: S): UnionSchema<unknown, InferSchema<S[number]>> => {\n const stdSchemas = schemas.map((s) => toStandard<InferSchema<S[number]>>(s).schema);\n return new UnionSchema<unknown, InferSchema<S[number]>>(...stdSchemas);\n },\n\n /**\n * Create instance of schema type\n * @param {C} constructor - Constructor function\n * @returns {InstanceOfSchema<unknown, InstanceType<C>>} Instance of schema type\n */\n instanceOf: <C extends new (...args: any[]) => any>(\n constructor: C,\n ): InstanceOfSchema<unknown, InstanceType<C>> => {\n const baseSchema = h.object({});\n return baseSchema.instanceOf(constructor);\n },\n\n /**\n * Create date schema type\n * @returns {StringSchemaType} Date schema type\n */\n date: (): StringSchemaType => h.string().date(),\n\n /**\n * Create UUID schema type\n * @returns {StringSchemaType} UUID schema type\n */\n uuid: (): StringSchemaType => h.string().uuid(),\n\n /**\n * Create regex schema type\n * @param {RegExp} regex - Regex\n * @returns {StringSchemaType} Regex schema type\n */\n regex: (regex: RegExp): StringSchemaType => h.string().regex(regex),\n\n /**\n * Create email schema type\n * @returns {StringSchemaType} Email schema type\n */\n email: (): StringSchemaType => h.string().email(),\n\n /**\n * Create phone schema type\n * @returns {StringSchemaType} Phone schema type\n */\n phone: (): StringSchemaType => h.string().phone(),\n\n /** Create domain schema type\n * @param {boolean} requireHttpOrHttps - Require http or https\n * @returns {StringSchemaType} Domain schema type\n */\n domain: (requireHttpOrHttps = true): StringSchemaType => h.string().domain(requireHttpOrHttps),\n\n /**\n * Convert schema to standard schema\n * @param {AnySchema} schema - Schema\n * @returns {Schema<unknown, any>} Standard schema\n */\n toStandard: toStandard,\n\n /**\n * Get JSON Schema from a validation schema\n * @param {AnySchema} schema - Schema to convert\n * @param {Object} [options] - JSON Schema options\n * @param {string} [options.target] - Target JSON Schema draft version\n * @returns {Record<string, unknown>} JSON Schema object\n */\n getJsonSchema: (\n schema: AnySchema,\n options: { target?: string } = {},\n ): Record<string, unknown> => {\n const std = toStandard(schema);\n return std[\"~standard\"].jsonSchema.output({\n target: (options.target ?? \"draft-2020-12\") as StandardJSONSchemaV1.Target,\n });\n },\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@hedystia/validations",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "Next-gen TypeScript framework for building type-safe APIs at lightspeed",
5
5
  "homepage": "https://docs.hedystia.com/validations/start",
6
6
  "devDependencies": {
7
- "@standard-schema/spec": "^1.0.0",
7
+ "@standard-schema/spec": "1.1.0",
8
8
  "@types/bun": "^1.3.3"
9
9
  },
10
10
  "peerDependencies": {