{"version":3,"file":"export-json-schema.cjs","names":["isEmpty"],"sources":["../../../src/common/schema/export-json-schema.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { isEmpty } from '../data'\n\nconst _primitiveMap: Record<string, string> = {\n  string: 'string',\n  number: 'number',\n  int: 'integer',\n  boolean: 'boolean',\n}\n\nfunction transformSchema(schema: Type<any>): Record<string, any> {\n  const out: Record<string, any> = {}\n\n  if (schema._enumValues) {\n    out.type = _primitiveMap[schema.type] ?? schema.type\n    out.enum = [...schema._enumValues]\n  }\n  else if (schema.type === 'literal') {\n    out.const = schema._default\n  }\n  else if (schema.type === 'union' && Array.isArray(schema._union)) {\n    out.anyOf = schema._union.map((s: Type<any>) => transformSchema(s))\n  }\n  else if (schema.type === 'object' && schema._object) {\n    out.type = 'object'\n    const properties: Record<string, any> = {}\n    const required: string[] = []\n    for (const key of Object.keys(schema._object)) {\n      const propSchema = schema._object[key] as Type<any>\n      properties[key] = transformSchema(propSchema)\n      if (propSchema._optional !== true)\n        required.push(key)\n    }\n    if (!isEmpty(properties))\n      out.properties = properties\n    out.additionalProperties = false\n    if (required.length > 0)\n      out.required = required\n  }\n  else if (schema.type === 'record' && schema._type) {\n    out.type = 'object'\n    out.additionalProperties = transformSchema(schema._type)\n  }\n  else if (schema.type === 'array' && schema._type) {\n    out.type = 'array'\n    out.items = transformSchema(schema._type)\n  }\n  else if (schema.type === 'tuple' && Array.isArray(schema._type)) {\n    out.type = 'array'\n    out.items = (schema._type as Type<any>[]).map(s => transformSchema(s))\n    out.minItems = schema._type.length\n    out.maxItems = schema._type.length\n  }\n  else if (schema.type === 'none') {\n    out.type = 'null'\n  }\n  else if (schema.type === 'any') {\n    // no constraint\n  }\n  else {\n    const t = _primitiveMap[schema.type]\n    if (t)\n      out.type = t\n  }\n\n  if (schema._default !== undefined && schema.type !== 'literal')\n    out.default = schema._default\n  if (schema._meta?.desc)\n    out.description = schema._meta.desc\n\n  return out\n}\n\nexport function schemaExportJsonSchema<T>(schema: Type<T>): Record<string, any> {\n  return {\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    ...transformSchema(schema),\n  }\n}\n\nexport function schemaExportJsonSchemaString<T>(schema: Type<T>): string {\n  const jsonSchema = schemaExportJsonSchema(schema)\n  return JSON.stringify(jsonSchema, null, 2)\n}\n"],"mappings":";;;;AAGA,MAAM,gBAAwC;CAC5C,QAAQ;CACR,QAAQ;CACR,KAAK;CACL,SAAS;CACV;AAED,SAAS,gBAAgB,QAAwC;CAC/D,MAAM,MAA2B,EAAE;AAEnC,KAAI,OAAO,aAAa;AACtB,MAAI,OAAO,cAAc,OAAO,SAAS,OAAO;AAChD,MAAI,OAAO,CAAC,GAAG,OAAO,YAAY;YAE3B,OAAO,SAAS,UACvB,KAAI,QAAQ,OAAO;UAEZ,OAAO,SAAS,WAAW,MAAM,QAAQ,OAAO,OAAO,CAC9D,KAAI,QAAQ,OAAO,OAAO,KAAK,MAAiB,gBAAgB,EAAE,CAAC;UAE5D,OAAO,SAAS,YAAY,OAAO,SAAS;AACnD,MAAI,OAAO;EACX,MAAM,aAAkC,EAAE;EAC1C,MAAM,WAAqB,EAAE;AAC7B,OAAK,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ,EAAE;GAC7C,MAAM,aAAa,OAAO,QAAQ;AAClC,cAAW,OAAO,gBAAgB,WAAW;AAC7C,OAAI,WAAW,cAAc,KAC3B,UAAS,KAAK,IAAI;;AAEtB,MAAI,CAACA,+BAAQ,WAAW,CACtB,KAAI,aAAa;AACnB,MAAI,uBAAuB;AAC3B,MAAI,SAAS,SAAS,EACpB,KAAI,WAAW;YAEV,OAAO,SAAS,YAAY,OAAO,OAAO;AACjD,MAAI,OAAO;AACX,MAAI,uBAAuB,gBAAgB,OAAO,MAAM;YAEjD,OAAO,SAAS,WAAW,OAAO,OAAO;AAChD,MAAI,OAAO;AACX,MAAI,QAAQ,gBAAgB,OAAO,MAAM;YAElC,OAAO,SAAS,WAAW,MAAM,QAAQ,OAAO,MAAM,EAAE;AAC/D,MAAI,OAAO;AACX,MAAI,QAAS,OAAO,MAAsB,KAAI,MAAK,gBAAgB,EAAE,CAAC;AACtE,MAAI,WAAW,OAAO,MAAM;AAC5B,MAAI,WAAW,OAAO,MAAM;YAErB,OAAO,SAAS,OACvB,KAAI,OAAO;UAEJ,OAAO,SAAS,OAAO,QAG3B;EACH,MAAM,IAAI,cAAc,OAAO;AAC/B,MAAI,EACF,KAAI,OAAO;;AAGf,KAAI,OAAO,aAAa,UAAa,OAAO,SAAS,UACnD,KAAI,UAAU,OAAO;AACvB,KAAI,OAAO,OAAO,KAChB,KAAI,cAAc,OAAO,MAAM;AAEjC,QAAO;;AAGT,SAAgB,uBAA0B,QAAsC;AAC9E,QAAO;EACL,SAAS;EACT,GAAG,gBAAgB,OAAO;EAC3B;;AAGH,SAAgB,6BAAgC,QAAyB;CACvE,MAAM,aAAa,uBAAuB,OAAO;AACjD,QAAO,KAAK,UAAU,YAAY,MAAM,EAAE"}