@mochabug/adapt-sdk 0.2.5 → 0.2.7
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/cel/index.d.ts.map +1 -1
- package/dist/cjs/cel.cjs +2 -2
- package/dist/cjs/cel.cjs.map +3 -3
- package/dist/cjs/signals.cjs +1 -1
- package/dist/cjs/signals.cjs.map +2 -2
- package/dist/esm/cel.mjs +3 -3
- package/dist/esm/cel.mjs.map +3 -3
- package/dist/esm/signals.mjs +1 -1
- package/dist/esm/signals.mjs.map +2 -2
- package/dist/signals/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/esm/signals.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isSchema as T,isValidSchema as y,validate as D}from"jtd";var h=10;function u(e,r,t=0){if(t>h)return null;if(e.ref){let i=r?.[e.ref];return i?u(i,r,t+1):null}if(e.type)switch(e.type){case"string":return"Lorem ipsum";case"timestamp":return"2024-01-15T10:30:00Z";case"float32":case"float64":return 42.5;case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return 42;case"boolean":return!0;default:return null}if(e.enum)return e.enum[0]??null;if(e.elements)return[u(e.elements,r,t+1),u(e.elements,r,t+1)];if(e.values)return{key1:u(e.values,r,t+1)};if(e.properties||e.optionalProperties){let i={};if(e.properties)for(let[o,n]of Object.entries(e.properties))i[o]=u(n,r,t+1);if(e.optionalProperties)for(let[o,n]of Object.entries(e.optionalProperties))i[o]=u(n,r,t+1);return i}if(e.discriminator&&e.mapping){let i=Object.keys(e.mapping)[0];if(i){let o=e.mapping[i],n=u(o,r,t+1);return n[e.discriminator]=i,n}return null}return null}var $=new Set(["int8","uint8","int16","uint16","int32","uint32"]);function P(e){return e.length===0?"/":e.map(r=>/^\d+$/.test(r)?`[${r}]`:`.${r}`).join("")}function g(e,r){let t=e;for(let i=0;i<r.length-1&&(t&&typeof t=="object"&&r[i]in t);i++)t=t[r[i]];return t}function k(e,r){let t=e;for(let i of r)if(t&&typeof t=="object")t=t[i];else return;return t}function w(e,r,t){let{instancePath:i,schemaPath:o}=e,n=P(i),s=o[o.length-1];if(s==="type"){let p=g(r,o)?.type;return p==="boolean"?`${n}: expected boolean`:p==="string"?`${n}: expected string`:p==="timestamp"?`${n}: expected timestamp string`:$.has(p)?`${n}: expected integer`:`${n}: expected number`}if(s==="enum"){let p=g(r,o)?.enum;return`${n}: expected one of [${p.join(", ")}]`}if(o.length>=2&&o[o.length-2]==="properties"&&s)return`${n==="/"?"":n}.${s}: missing required property`;if(s==="elements")return`${n}: expected array`;if(s==="properties"||s==="optionalProperties"||s==="values")return`${n}: expected object`;if(s==="discriminator")return`${n}: expected string discriminator`;if(s==="mapping"){let a=k(t,i);return`${n}: unknown variant "${a}"`}return o.length===0?`${n}: unexpected property`:`${n}: validation error at /${o.join("/")}`}function d(e,r,t){let i=t??e.definitions,o=i?{...e,definitions:i}:e;return y(o)?D(o,r,{maxDepth:R,maxErrors:A}).map(s=>w(s,o,r)):e.ref?[`/: unknown ref "${e.ref}"`]:["/: invalid schema"]}function U(e,r){if("formats"in e&&Array.isArray(e.formats)){let i=e.formats.filter(o=>o.jtdSchema);if(i.length===0)return["/: no JTD formats in signal descriptor"];for(let o of i)if(d(o.jtdSchema,r).length===0)return[];return d(i[i.length-1].jtdSchema,r)}let t=e;return t.jtdSchema?d(t.jtdSchema,r):["/: signal format has no jtdSchema"]}function c(e,r,t=!0){if(!e||typeof e!="object")return{};let i=e.nullable,o=r||e.definitions,n={};if(t&&(n.$schema="http://json-schema.org/draft-07/schema#"),e.ref){let s=e.ref;if(o&&o[s]){let a=c(o[s],o,!1);if(i)if(a.type)a.type=Array.isArray(a.type)?[...a.type,"null"]:[a.type,"null"];else return{...a,anyOf:[a,{type:"null"}],...t?{$schema:"http://json-schema.org/draft-07/schema#"}:{}};return t?{...a,$schema:"http://json-schema.org/draft-07/schema#"}:a}return t?n:{}}if(e.type){let s={boolean:"boolean",string:"string",timestamp:"string",float32:"number",float64:"number",int8:"integer",uint8:"integer",int16:"integer",uint16:"integer",int32:"integer",uint32:"integer"},a=e.type,p=s[a]||"string";return n.type=i?[p,"null"]:p,p==="string"&&a==="timestamp"&&(n.format="date-time"),n}if(e.enum)return n.type=i?["string","null"]:"string",n.enum=i?[...e.enum,null]:e.enum,n;if(e.elements)return n.type=i?["array","null"]:"array",n.items=c(e.elements,o,!1),n;if(e.properties||e.optionalProperties){if(n.type=i?["object","null"]:"object",n.properties={},n.required=[],e.properties)for(let[s,a]of Object.entries(e.properties))n.properties[s]=c(a,o,!1),n.required.push(s);if(e.optionalProperties)for(let[s,a]of Object.entries(e.optionalProperties))n.properties[s]=c(a,o,!1);return e.additionalProperties!==!0&&(n.additionalProperties=!1),n}if(e.values)return n.type=i?["object","null"]:"object",n.additionalProperties=c(e.values,o,!1),n;if(e.discriminator&&e.mapping){let s=[],a=e.discriminator;for(let[p,b]of Object.entries(e.mapping)){let l=c(b,o,!1);l.type?l.type!=="object"&&!Array.isArray(l.type)&&(l.type="object"):l.type="object",l.properties=l.properties||{},l.properties[a]={const:p},l.required=l.required||[],l.required.includes(a)||l.required.unshift(a),l.additionalProperties===void 0&&(l.additionalProperties=!1),s.push(l)}return i&&s.push({type:"null"}),n.oneOf=s,n}return n}function f(e,r=""){if(!e||typeof e!="object")return null;if("discriminator"in e||"mapping"in e)return`Discriminator unions are not supported${r?` (at ${r})`:""}. Use a simpler object structure instead.`;if("ref"in e)return`Schema references (ref) are not supported${r?` (at ${r})`:""}. Inline the schema definition instead.`;if("definitions"in e)return`Schema definitions are not supported${r?` (at ${r})`:""}. Inline the schema definition instead.`;if("values"in e)return`Dictionary/map schemas (values form) are not supported${r?` (at ${r})`:""}. OpenAI requires additionalProperties: false on all objects. Use explicit properties instead.`;if("elements"in e&&e.elements){let t=f(e.elements,`${r}/elements`);if(t)return t}if("properties"in e&&e.properties)for(let[t,i]of Object.entries(e.properties)){let o=f(i,`${r}/properties/${t}`);if(o)return o}if("optionalProperties"in e&&e.optionalProperties)for(let[t,i]of Object.entries(e.optionalProperties)){let o=f(i,`${r}/optionalProperties/${t}`);if(o)return o}return null}function m(e){if(!e||typeof e!="object")return{};let r="nullable"in e&&e.nullable===!0,t={},i=e.metadata;if(i&&(typeof i.title=="string"&&i.title.trim()&&(t.title=i.title.trim()),typeof i.description=="string"&&i.description.trim()&&(t.description=i.description.trim())),"type"in e&&e.type){let o={boolean:"boolean",string:"string",timestamp:"string",float32:"number",float64:"number",int8:"integer",uint8:"integer",int16:"integer",uint16:"integer",int32:"integer",uint32:"integer"},n=e.type,s=o[n]||"string";return t.type=r?[s,"null"]:s,n==="timestamp"&&(t.format="date-time"),t}if("enum"in e&&e.enum){let o=e.enum;return t.type=r?["string","null"]:"string",t.enum=r?[...o,null]:o,t}if("elements"in e&&e.elements)return t.type=r?["array","null"]:"array",t.items=m(e.elements),t;if("properties"in e||"optionalProperties"in e){if(t.type=r?["object","null"]:"object",t.properties={},t.required=[],t.additionalProperties=!1,"properties"in e&&e.properties)for(let[o,n]of Object.entries(e.properties))t.properties[o]=m(n),t.required.push(o);if("optionalProperties"in e&&e.optionalProperties)for(let[o,n]of Object.entries(e.optionalProperties))t.properties[o]=m(n);return t}return t}function O(e){let r=f(e);if(r)return{success:!1,error:r};try{return{success:!0,schema:m(e)}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Unknown conversion error"}}}function x(e){let r=f(e);return r?{compatible:!1,error:r}:{compatible:!0}}var R=32,A=100;function v(e){return T(e)?y(e)?{valid:!0,schema:e}:{valid:!1,error:"Invalid JTD schema: Schema has semantic errors (e.g., circular references, conflicting forms)"}:{valid:!1,error:"Invalid JTD schema: Schema does not match JTD structure"}}function S(e){let r=v(e);if(!r.valid)return r;let t=r.schema;if(!("type"in t)&&!("enum"in t)&&!("elements"in t)&&!("properties"in t)&&!("optionalProperties"in t))return{valid:!1,error:"Schema must define structure (properties, type, enum, or elements). Empty schemas are not supported."};let i=x(r.schema);return i.compatible?{valid:!0,schema:r.schema}:{valid:!1,error:i.error}}function J(e){try{return{valid:!0,data:JSON.parse(e)}}catch(r){return{valid:!1,error:`Invalid JSON: ${r instanceof Error?r.message:"Parse error"}`}}}function C(e){let r=J(e);return r.valid?v(r.data):{valid:!1,error:r.error}}function I(e){let r=J(e);return r.valid?S(r.data):{valid:!1,error:r.error}}var V={uri:"https://mochabug.com/schemas/universal-jtd-schema.json",fileMatch:["inmemory://jtd-schema/*.json"],schema:{$schema:"http://json-schema.org/draft-07/schema#",title:"Universal JTD Schema",description:"JSON Type Definition schema compatible with Anthropic Claude, Google Gemini, and OpenAI structured outputs. Note: discriminator unions, refs, and dictionary/map schemas (values) are NOT supported.",type:"object",properties:{type:{description:"Type form - defines a primitive type",enum:["boolean","string","timestamp","float32","float64","int8","uint8","int16","uint16","int32","uint32"]},enum:{description:"Enum form - defines a set of string values for classification",type:"array",items:{type:"string"},minItems:1},elements:{description:"Elements form - defines an array with typed elements",$ref:"#"},properties:{description:"Properties form - defines an object with required properties",type:"object",additionalProperties:{$ref:"#"}},optionalProperties:{description:"Optional properties - defines optional object properties (can be omitted)",type:"object",additionalProperties:{$ref:"#"}},nullable:{description:"Allow null values in addition to the defined type",type:"boolean"},metadata:{description:'Custom metadata - use "title" and "description" to guide the AI model',type:"object",properties:{title:{type:"string",description:"Short title/label for this field"},description:{type:"string",description:"Detailed description of what this field should contain"}},additionalProperties:!1}}}},N={uri:"https://jsontypedef.com/schemas/jtd-schema.json",fileMatch:["inmemory://jtd-schema/*.json"],schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{type:{description:"Type form - defines a primitive type",enum:["boolean","string","timestamp","float32","float64","int8","uint8","int16","uint16","int32","uint32"]},enum:{description:"Enum form - defines a set of string values",type:"array",items:{type:"string"}},elements:{description:"Elements form - defines an array with typed elements",$ref:"#"},properties:{description:"Properties form - defines an object with required properties",type:"object",additionalProperties:{$ref:"#"}},optionalProperties:{description:"Optional properties - defines optional object properties",type:"object",additionalProperties:{$ref:"#"}},values:{description:"Values form - defines a map/dictionary with typed values",$ref:"#"},discriminator:{description:"Discriminator form - defines a tagged union",type:"string"},mapping:{description:"Mapping for discriminator form",type:"object",additionalProperties:{$ref:"#"}},ref:{description:"Ref form - references a definition",type:"string"},definitions:{description:"Top-level definitions for reusable schemas",type:"object",additionalProperties:{$ref:"#"}},nullable:{description:"Allow null values",type:"boolean"},metadata:{description:"Custom metadata for documentation",type:"object"},additionalProperties:{description:"Allow additional properties (properties form only)",type:"boolean"}}}};export{N as JTD_SCHEMA_CONFIG,R as MAX_VALIDATION_DEPTH,A as MAX_VALIDATION_ERRORS,V as UNIVERSAL_JTD_SCHEMA_CONFIG,u as fuzzJTD,c as jtdToJsonSchema,O as jtdToUniversalJsonSchema,J as validateJSON,v as validateJTDSchema,C as validateJTDSchemaString,S as validateUniversalJTD,I as validateUniversalJTDSchemaString,d as validateValueAgainstJTD,U as validateValueAgainstSignal};
|
|
1
|
+
import{isSchema as T,isValidSchema as y,validate as D}from"jtd";var h=10;function u(e,r,t=0){if(t>h)return null;if(e.ref){let i=r?.[e.ref];return i?u(i,r,t+1):null}if(e.type)switch(e.type){case"string":return"Lorem ipsum";case"timestamp":return"2024-01-15T10:30:00Z";case"float32":case"float64":return 42.5;case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return BigInt(42);case"boolean":return!0;default:return null}if(e.enum)return e.enum[0]??null;if(e.elements)return[u(e.elements,r,t+1),u(e.elements,r,t+1)];if(e.values)return{key1:u(e.values,r,t+1)};if(e.properties||e.optionalProperties){let i={};if(e.properties)for(let[o,n]of Object.entries(e.properties))i[o]=u(n,r,t+1);if(e.optionalProperties)for(let[o,n]of Object.entries(e.optionalProperties))i[o]=u(n,r,t+1);return i}if(e.discriminator&&e.mapping){let i=Object.keys(e.mapping)[0];if(i){let o=e.mapping[i],n=u(o,r,t+1);return n[e.discriminator]=i,n}return null}return null}var $=new Set(["int8","uint8","int16","uint16","int32","uint32"]);function P(e){return e.length===0?"/":e.map(r=>/^\d+$/.test(r)?`[${r}]`:`.${r}`).join("")}function g(e,r){let t=e;for(let i=0;i<r.length-1&&(t&&typeof t=="object"&&r[i]in t);i++)t=t[r[i]];return t}function k(e,r){let t=e;for(let i of r)if(t&&typeof t=="object")t=t[i];else return;return t}function w(e,r,t){let{instancePath:i,schemaPath:o}=e,n=P(i),s=o[o.length-1];if(s==="type"){let p=g(r,o)?.type;return p==="boolean"?`${n}: expected boolean`:p==="string"?`${n}: expected string`:p==="timestamp"?`${n}: expected timestamp string`:$.has(p)?`${n}: expected integer`:`${n}: expected number`}if(s==="enum"){let p=g(r,o)?.enum;return`${n}: expected one of [${p.join(", ")}]`}if(o.length>=2&&o[o.length-2]==="properties"&&s)return`${n==="/"?"":n}.${s}: missing required property`;if(s==="elements")return`${n}: expected array`;if(s==="properties"||s==="optionalProperties"||s==="values")return`${n}: expected object`;if(s==="discriminator")return`${n}: expected string discriminator`;if(s==="mapping"){let a=k(t,i);return`${n}: unknown variant "${a}"`}return o.length===0?`${n}: unexpected property`:`${n}: validation error at /${o.join("/")}`}function d(e,r,t){let i=t??e.definitions,o=i?{...e,definitions:i}:e;return y(o)?D(o,r,{maxDepth:R,maxErrors:A}).map(s=>w(s,o,r)):e.ref?[`/: unknown ref "${e.ref}"`]:["/: invalid schema"]}function U(e,r){if("formats"in e&&Array.isArray(e.formats)){let i=e.formats.filter(o=>o.jtdSchema);if(i.length===0)return["/: no JTD formats in signal descriptor"];for(let o of i)if(d(o.jtdSchema,r).length===0)return[];return d(i[i.length-1].jtdSchema,r)}let t=e;return t.jtdSchema?d(t.jtdSchema,r):["/: signal format has no jtdSchema"]}function c(e,r,t=!0){if(!e||typeof e!="object")return{};let i=e.nullable,o=r||e.definitions,n={};if(t&&(n.$schema="http://json-schema.org/draft-07/schema#"),e.ref){let s=e.ref;if(o&&o[s]){let a=c(o[s],o,!1);if(i)if(a.type)a.type=Array.isArray(a.type)?[...a.type,"null"]:[a.type,"null"];else return{...a,anyOf:[a,{type:"null"}],...t?{$schema:"http://json-schema.org/draft-07/schema#"}:{}};return t?{...a,$schema:"http://json-schema.org/draft-07/schema#"}:a}return t?n:{}}if(e.type){let s={boolean:"boolean",string:"string",timestamp:"string",float32:"number",float64:"number",int8:"integer",uint8:"integer",int16:"integer",uint16:"integer",int32:"integer",uint32:"integer"},a=e.type,p=s[a]||"string";return n.type=i?[p,"null"]:p,p==="string"&&a==="timestamp"&&(n.format="date-time"),n}if(e.enum)return n.type=i?["string","null"]:"string",n.enum=i?[...e.enum,null]:e.enum,n;if(e.elements)return n.type=i?["array","null"]:"array",n.items=c(e.elements,o,!1),n;if(e.properties||e.optionalProperties){if(n.type=i?["object","null"]:"object",n.properties={},n.required=[],e.properties)for(let[s,a]of Object.entries(e.properties))n.properties[s]=c(a,o,!1),n.required.push(s);if(e.optionalProperties)for(let[s,a]of Object.entries(e.optionalProperties))n.properties[s]=c(a,o,!1);return e.additionalProperties!==!0&&(n.additionalProperties=!1),n}if(e.values)return n.type=i?["object","null"]:"object",n.additionalProperties=c(e.values,o,!1),n;if(e.discriminator&&e.mapping){let s=[],a=e.discriminator;for(let[p,b]of Object.entries(e.mapping)){let l=c(b,o,!1);l.type?l.type!=="object"&&!Array.isArray(l.type)&&(l.type="object"):l.type="object",l.properties=l.properties||{},l.properties[a]={const:p},l.required=l.required||[],l.required.includes(a)||l.required.unshift(a),l.additionalProperties===void 0&&(l.additionalProperties=!1),s.push(l)}return i&&s.push({type:"null"}),n.oneOf=s,n}return n}function f(e,r=""){if(!e||typeof e!="object")return null;if("discriminator"in e||"mapping"in e)return`Discriminator unions are not supported${r?` (at ${r})`:""}. Use a simpler object structure instead.`;if("ref"in e)return`Schema references (ref) are not supported${r?` (at ${r})`:""}. Inline the schema definition instead.`;if("definitions"in e)return`Schema definitions are not supported${r?` (at ${r})`:""}. Inline the schema definition instead.`;if("values"in e)return`Dictionary/map schemas (values form) are not supported${r?` (at ${r})`:""}. OpenAI requires additionalProperties: false on all objects. Use explicit properties instead.`;if("elements"in e&&e.elements){let t=f(e.elements,`${r}/elements`);if(t)return t}if("properties"in e&&e.properties)for(let[t,i]of Object.entries(e.properties)){let o=f(i,`${r}/properties/${t}`);if(o)return o}if("optionalProperties"in e&&e.optionalProperties)for(let[t,i]of Object.entries(e.optionalProperties)){let o=f(i,`${r}/optionalProperties/${t}`);if(o)return o}return null}function m(e){if(!e||typeof e!="object")return{};let r="nullable"in e&&e.nullable===!0,t={},i=e.metadata;if(i&&(typeof i.title=="string"&&i.title.trim()&&(t.title=i.title.trim()),typeof i.description=="string"&&i.description.trim()&&(t.description=i.description.trim())),"type"in e&&e.type){let o={boolean:"boolean",string:"string",timestamp:"string",float32:"number",float64:"number",int8:"integer",uint8:"integer",int16:"integer",uint16:"integer",int32:"integer",uint32:"integer"},n=e.type,s=o[n]||"string";return t.type=r?[s,"null"]:s,n==="timestamp"&&(t.format="date-time"),t}if("enum"in e&&e.enum){let o=e.enum;return t.type=r?["string","null"]:"string",t.enum=r?[...o,null]:o,t}if("elements"in e&&e.elements)return t.type=r?["array","null"]:"array",t.items=m(e.elements),t;if("properties"in e||"optionalProperties"in e){if(t.type=r?["object","null"]:"object",t.properties={},t.required=[],t.additionalProperties=!1,"properties"in e&&e.properties)for(let[o,n]of Object.entries(e.properties))t.properties[o]=m(n),t.required.push(o);if("optionalProperties"in e&&e.optionalProperties)for(let[o,n]of Object.entries(e.optionalProperties))t.properties[o]=m(n);return t}return t}function O(e){let r=f(e);if(r)return{success:!1,error:r};try{return{success:!0,schema:m(e)}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Unknown conversion error"}}}function x(e){let r=f(e);return r?{compatible:!1,error:r}:{compatible:!0}}var R=32,A=100;function v(e){return T(e)?y(e)?{valid:!0,schema:e}:{valid:!1,error:"Invalid JTD schema: Schema has semantic errors (e.g., circular references, conflicting forms)"}:{valid:!1,error:"Invalid JTD schema: Schema does not match JTD structure"}}function S(e){let r=v(e);if(!r.valid)return r;let t=r.schema;if(!("type"in t)&&!("enum"in t)&&!("elements"in t)&&!("properties"in t)&&!("optionalProperties"in t))return{valid:!1,error:"Schema must define structure (properties, type, enum, or elements). Empty schemas are not supported."};let i=x(r.schema);return i.compatible?{valid:!0,schema:r.schema}:{valid:!1,error:i.error}}function J(e){try{return{valid:!0,data:JSON.parse(e)}}catch(r){return{valid:!1,error:`Invalid JSON: ${r instanceof Error?r.message:"Parse error"}`}}}function C(e){let r=J(e);return r.valid?v(r.data):{valid:!1,error:r.error}}function I(e){let r=J(e);return r.valid?S(r.data):{valid:!1,error:r.error}}var V={uri:"https://mochabug.com/schemas/universal-jtd-schema.json",fileMatch:["inmemory://jtd-schema/*.json"],schema:{$schema:"http://json-schema.org/draft-07/schema#",title:"Universal JTD Schema",description:"JSON Type Definition schema compatible with Anthropic Claude, Google Gemini, and OpenAI structured outputs. Note: discriminator unions, refs, and dictionary/map schemas (values) are NOT supported.",type:"object",properties:{type:{description:"Type form - defines a primitive type",enum:["boolean","string","timestamp","float32","float64","int8","uint8","int16","uint16","int32","uint32"]},enum:{description:"Enum form - defines a set of string values for classification",type:"array",items:{type:"string"},minItems:1},elements:{description:"Elements form - defines an array with typed elements",$ref:"#"},properties:{description:"Properties form - defines an object with required properties",type:"object",additionalProperties:{$ref:"#"}},optionalProperties:{description:"Optional properties - defines optional object properties (can be omitted)",type:"object",additionalProperties:{$ref:"#"}},nullable:{description:"Allow null values in addition to the defined type",type:"boolean"},metadata:{description:'Custom metadata - use "title" and "description" to guide the AI model',type:"object",properties:{title:{type:"string",description:"Short title/label for this field"},description:{type:"string",description:"Detailed description of what this field should contain"}},additionalProperties:!1}}}},N={uri:"https://jsontypedef.com/schemas/jtd-schema.json",fileMatch:["inmemory://jtd-schema/*.json"],schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{type:{description:"Type form - defines a primitive type",enum:["boolean","string","timestamp","float32","float64","int8","uint8","int16","uint16","int32","uint32"]},enum:{description:"Enum form - defines a set of string values",type:"array",items:{type:"string"}},elements:{description:"Elements form - defines an array with typed elements",$ref:"#"},properties:{description:"Properties form - defines an object with required properties",type:"object",additionalProperties:{$ref:"#"}},optionalProperties:{description:"Optional properties - defines optional object properties",type:"object",additionalProperties:{$ref:"#"}},values:{description:"Values form - defines a map/dictionary with typed values",$ref:"#"},discriminator:{description:"Discriminator form - defines a tagged union",type:"string"},mapping:{description:"Mapping for discriminator form",type:"object",additionalProperties:{$ref:"#"}},ref:{description:"Ref form - references a definition",type:"string"},definitions:{description:"Top-level definitions for reusable schemas",type:"object",additionalProperties:{$ref:"#"}},nullable:{description:"Allow null values",type:"boolean"},metadata:{description:"Custom metadata for documentation",type:"object"},additionalProperties:{description:"Allow additional properties (properties form only)",type:"boolean"}}}};export{N as JTD_SCHEMA_CONFIG,R as MAX_VALIDATION_DEPTH,A as MAX_VALIDATION_ERRORS,V as UNIVERSAL_JTD_SCHEMA_CONFIG,u as fuzzJTD,c as jtdToJsonSchema,O as jtdToUniversalJsonSchema,J as validateJSON,v as validateJTDSchema,C as validateJTDSchemaString,S as validateUniversalJTD,I as validateUniversalJTDSchemaString,d as validateValueAgainstJTD,U as validateValueAgainstSignal};
|
|
2
2
|
//# sourceMappingURL=signals.mjs.map
|
package/dist/esm/signals.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/signals/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n JTDSchemaJson,\n SignalDescriptorJson,\n SignalFormatJson\n} from '../api';\nimport { isSchema, isValidSchema, validate as jtdValidate } from 'jtd';\nimport type { Schema, ValidationError } from 'jtd';\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD FUZZER (generate sample values from JTD schemas)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Maximum recursion depth for fuzzJTD to prevent infinite loops on self-referencing schemas. */\nconst FUZZ_MAX_DEPTH = 10;\n\n/** Generate a fuzzed (sample) value from a JTD schema. */\nexport function fuzzJTD(\n schema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n _depth: number = 0\n): unknown {\n if (_depth > FUZZ_MAX_DEPTH) return null;\n\n if (schema.ref) {\n const def = definitions?.[schema.ref];\n if (def) return fuzzJTD(def, definitions, _depth + 1);\n return null;\n }\n\n if (schema.type) {\n switch (schema.type) {\n case 'string':\n return 'Lorem ipsum';\n case 'timestamp':\n return '2024-01-15T10:30:00Z';\n case 'float32':\n case 'float64':\n return 42.5;\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return 42;\n case 'boolean':\n return true;\n default:\n return null;\n }\n }\n\n if (schema.enum) {\n return schema.enum[0] ?? null;\n }\n\n if (schema.elements) {\n return [\n fuzzJTD(schema.elements, definitions, _depth + 1),\n fuzzJTD(schema.elements, definitions, _depth + 1)\n ];\n }\n\n if (schema.values) {\n return { key1: fuzzJTD(schema.values, definitions, _depth + 1) };\n }\n\n if (schema.properties || schema.optionalProperties) {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [k, v] of Object.entries(schema.properties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n if (schema.optionalProperties) {\n for (const [k, v] of Object.entries(schema.optionalProperties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n return obj;\n }\n\n if (schema.discriminator && schema.mapping) {\n const firstKey = Object.keys(schema.mapping)[0];\n if (firstKey) {\n const variant = schema.mapping[firstKey]!;\n const obj = fuzzJTD(variant, definitions, _depth + 1) as Record<\n string,\n unknown\n >;\n obj[schema.discriminator] = firstKey;\n return obj;\n }\n return null;\n }\n\n // Empty schema\n return null;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD VALUE VALIDATION (delegates to the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst INTEGER_TYPES = new Set([\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n]);\n\nfunction formatInstancePath(instancePath: string[]): string {\n if (instancePath.length === 0) return '/';\n return instancePath\n .map((p) => (/^\\d+$/.test(p) ? `[${p}]` : `.${p}`))\n .join('');\n}\n\nfunction resolveSchemaParent(\n schema: Record<string, unknown>,\n schemaPath: string[]\n): Record<string, unknown> {\n let current: any = schema;\n for (let i = 0; i < schemaPath.length - 1; i++) {\n if (current && typeof current === 'object' && schemaPath[i]! in current) {\n current = current[schemaPath[i]!];\n } else {\n break;\n }\n }\n return current as Record<string, unknown>;\n}\n\nfunction resolveInstanceValue(value: unknown, instancePath: string[]): unknown {\n let current = value;\n for (const key of instancePath) {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\nfunction formatValidationError(\n error: ValidationError,\n schema: Record<string, unknown>,\n value: unknown\n): string {\n const { instancePath, schemaPath } = error;\n const path = formatInstancePath(instancePath);\n const lastKey = schemaPath[schemaPath.length - 1];\n\n if (lastKey === 'type') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const jtdType = parent?.type as string;\n if (jtdType === 'boolean') return `${path}: expected boolean`;\n if (jtdType === 'string') return `${path}: expected string`;\n if (jtdType === 'timestamp') return `${path}: expected timestamp string`;\n if (INTEGER_TYPES.has(jtdType)) return `${path}: expected integer`;\n return `${path}: expected number`;\n }\n\n if (lastKey === 'enum') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const enumValues = parent?.enum as string[];\n return `${path}: expected one of [${enumValues.join(', ')}]`;\n }\n\n if (\n schemaPath.length >= 2 &&\n schemaPath[schemaPath.length - 2] === 'properties' &&\n lastKey\n ) {\n const prefix = path === '/' ? '' : path;\n return `${prefix}.${lastKey}: missing required property`;\n }\n\n if (lastKey === 'elements') return `${path}: expected array`;\n\n if (\n lastKey === 'properties' ||\n lastKey === 'optionalProperties' ||\n lastKey === 'values'\n ) {\n return `${path}: expected object`;\n }\n\n if (lastKey === 'discriminator')\n return `${path}: expected string discriminator`;\n\n if (lastKey === 'mapping') {\n const discValue = resolveInstanceValue(value, instancePath);\n return `${path}: unknown variant \"${discValue}\"`;\n }\n\n if (schemaPath.length === 0) return `${path}: unexpected property`;\n\n return `${path}: validation error at /${schemaPath.join('/')}`;\n}\n\n/**\n * Validate a value against a JTD schema, returning an array of error messages.\n * Delegates to the `jtd` npm package for spec-compliant validation.\n */\nexport function validateValueAgainstJTD(\n schema: JTDSchemaJson,\n value: unknown,\n definitions?: Record<string, JTDSchemaJson>\n): string[] {\n const defs =\n definitions ??\n (schema.definitions as Record<string, JTDSchemaJson> | undefined);\n\n const schemaForValidation = defs\n ? ({ ...schema, definitions: defs } as Schema)\n : (schema as Schema);\n\n // The jtd lib throws on invalid schemas (e.g., unresolved refs).\n if (!isValidSchema(schemaForValidation)) {\n if (schema.ref) {\n return [`/: unknown ref \"${schema.ref}\"`];\n }\n return [`/: invalid schema`];\n }\n\n const errors = jtdValidate(schemaForValidation, value, {\n maxDepth: MAX_VALIDATION_DEPTH,\n maxErrors: MAX_VALIDATION_ERRORS\n });\n\n return errors.map((err) =>\n formatValidationError(\n err,\n schemaForValidation as Record<string, unknown>,\n value\n )\n );\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// SIGNAL-LEVEL VALIDATION (JSON values against JTD formats)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Validate a JSON value against a single SignalFormatJson. */\nexport function validateValueAgainstSignal(\n format: SignalFormatJson,\n jsonValue: unknown\n): string[];\n/** Validate a JSON value against a SignalDescriptorJson (valid if value matches ANY JTD format). */\nexport function validateValueAgainstSignal(\n descriptor: SignalDescriptorJson,\n jsonValue: unknown\n): string[];\nexport function validateValueAgainstSignal(\n formatOrDescriptor: SignalFormatJson | SignalDescriptorJson,\n jsonValue: unknown\n): string[] {\n // Descriptor path \u2014 has `formats` array\n if (\n 'formats' in formatOrDescriptor &&\n Array.isArray(formatOrDescriptor.formats)\n ) {\n const jtdFormats = (\n formatOrDescriptor.formats as SignalFormatJson[]\n ).filter((f) => f.jtdSchema);\n if (jtdFormats.length === 0) {\n return ['/: no JTD formats in signal descriptor'];\n }\n // Valid if value matches ANY JTD format\n for (const format of jtdFormats) {\n const errors = validateValueAgainstJTD(format.jtdSchema!, jsonValue);\n if (errors.length === 0) return [];\n }\n // None matched \u2014 return errors from last format attempt\n return validateValueAgainstJTD(\n jtdFormats[jtdFormats.length - 1]!.jtdSchema!,\n jsonValue\n );\n }\n\n // Single format path\n const format = formatOrDescriptor as SignalFormatJson;\n if (!format.jtdSchema) {\n return ['/: signal format has no jtdSchema'];\n }\n return validateValueAgainstJTD(format.jtdSchema, jsonValue);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD \u2192 JSON SCHEMA CONVERTER\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Convert JTD (JSON Type Definition) schema to JSON Schema for validation.\n *\n * Supports all 8 JTD schema forms per RFC 8927:\n * - Empty form: {}\n * - Ref form: { ref: \"...\" }\n * - Type form: { type: \"...\" }\n * - Enum form: { enum: [...] }\n * - Elements form: { elements: {...} }\n * - Properties form: { properties: {...}, optionalProperties: {...} }\n * - Values form: { values: {...} }\n * - Discriminator form: { discriminator: \"...\", mapping: {...} }\n */\nexport function jtdToJsonSchema(\n jtdSchema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n isRoot = true\n): any {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return {};\n }\n\n const isNullable = jtdSchema['nullable'];\n const defs =\n definitions ||\n (jtdSchema['definitions'] as Record<string, JTDSchemaJson> | undefined);\n\n const result: any = {};\n\n if (isRoot) {\n result.$schema = 'http://json-schema.org/draft-07/schema#';\n }\n\n // Ref form\n if (jtdSchema['ref']) {\n const refName = jtdSchema['ref'] as string;\n if (defs && defs[refName]) {\n const resolvedSchema = jtdToJsonSchema(\n defs[refName] as JTDSchemaJson,\n defs,\n false\n );\n\n if (isNullable) {\n if (resolvedSchema.type) {\n resolvedSchema.type = Array.isArray(resolvedSchema.type)\n ? [...resolvedSchema.type, 'null']\n : [resolvedSchema.type, 'null'];\n } else {\n return {\n ...resolvedSchema,\n anyOf: [resolvedSchema, { type: 'null' }],\n ...(isRoot\n ? { $schema: 'http://json-schema.org/draft-07/schema#' }\n : {})\n };\n }\n }\n\n return isRoot\n ? {\n ...resolvedSchema,\n $schema: 'http://json-schema.org/draft-07/schema#'\n }\n : resolvedSchema;\n }\n return isRoot ? result : {};\n }\n\n // Type form\n if (jtdSchema['type']) {\n const typeMap: Record<string, string> = {\n boolean: 'boolean',\n string: 'string',\n timestamp: 'string',\n float32: 'number',\n float64: 'number',\n int8: 'integer',\n uint8: 'integer',\n int16: 'integer',\n uint16: 'integer',\n int32: 'integer',\n uint32: 'integer'\n };\n const jtdType = jtdSchema['type'] as string;\n const baseType = typeMap[jtdType] || 'string';\n\n result.type = isNullable ? [baseType, 'null'] : baseType;\n\n if (baseType === 'string' && jtdType === 'timestamp') {\n result.format = 'date-time';\n }\n return result;\n }\n\n // Enum form\n if (jtdSchema['enum']) {\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.enum = isNullable\n ? [...(jtdSchema['enum'] as string[]), null]\n : jtdSchema['enum'];\n return result;\n }\n\n // Elements form\n if (jtdSchema['elements']) {\n result.type = isNullable ? ['array', 'null'] : 'array';\n result.items = jtdToJsonSchema(\n jtdSchema['elements'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Properties form\n if (jtdSchema['properties'] || jtdSchema['optionalProperties']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.properties = {};\n result.required = [];\n\n if (jtdSchema['properties']) {\n for (const [key, value] of Object.entries(jtdSchema['properties'])) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n result.required.push(key);\n }\n }\n\n if (jtdSchema['optionalProperties']) {\n for (const [key, value] of Object.entries(\n jtdSchema['optionalProperties']\n )) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n }\n }\n\n // JTD is strict by default\n if (jtdSchema['additionalProperties'] !== true) {\n result.additionalProperties = false;\n }\n\n return result;\n }\n\n // Values form\n if (jtdSchema['values']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.additionalProperties = jtdToJsonSchema(\n jtdSchema['values'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Discriminator form\n if (jtdSchema['discriminator'] && jtdSchema['mapping']) {\n const variants = [];\n const discriminatorKey = jtdSchema['discriminator'] as string;\n\n for (const [tag, schema] of Object.entries(jtdSchema['mapping'])) {\n const variantSchema = jtdToJsonSchema(\n schema as JTDSchemaJson,\n defs,\n false\n );\n\n if (!variantSchema.type) {\n variantSchema.type = 'object';\n } else if (\n variantSchema.type !== 'object' &&\n !Array.isArray(variantSchema.type)\n ) {\n variantSchema.type = 'object';\n }\n\n variantSchema.properties = variantSchema.properties || {};\n variantSchema.properties[discriminatorKey] = { const: tag };\n\n variantSchema.required = variantSchema.required || [];\n if (!variantSchema.required.includes(discriminatorKey)) {\n variantSchema.required.unshift(discriminatorKey);\n }\n\n // JTD discriminator variants are strict by default\n if (variantSchema.additionalProperties === undefined) {\n variantSchema.additionalProperties = false;\n }\n\n variants.push(variantSchema);\n }\n\n if (isNullable) {\n variants.push({ type: 'null' });\n }\n\n result.oneOf = variants;\n return result;\n }\n\n // Empty form\n return result;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD \u2192 UNIVERSAL JSON SCHEMA (for AI providers: Claude, Gemini, OpenAI)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nexport interface UniversalJsonSchema {\n type?: string | string[];\n title?: string;\n description?: string;\n enum?: (string | number | null)[];\n format?: 'date-time' | 'date' | 'time';\n properties?: Record<string, UniversalJsonSchema>;\n required?: string[];\n additionalProperties?: false;\n items?: UniversalJsonSchema;\n}\n\nexport interface ConversionSuccess {\n success: true;\n schema: UniversalJsonSchema;\n}\n\nexport interface ConversionFailure {\n success: false;\n error: string;\n}\n\nexport type ConversionResult = ConversionSuccess | ConversionFailure;\n\nfunction checkUnsupportedFeatures(\n jtdSchema: JTDSchemaJson,\n path = ''\n): string | null {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return null;\n }\n\n if ('discriminator' in jtdSchema || 'mapping' in jtdSchema) {\n return `Discriminator unions are not supported${\n path ? ` (at ${path})` : ''\n }. Use a simpler object structure instead.`;\n }\n\n if ('ref' in jtdSchema) {\n return `Schema references (ref) are not supported${\n path ? ` (at ${path})` : ''\n }. Inline the schema definition instead.`;\n }\n\n if ('definitions' in jtdSchema) {\n return `Schema definitions are not supported${\n path ? ` (at ${path})` : ''\n }. Inline the schema definition instead.`;\n }\n\n if ('values' in jtdSchema) {\n return `Dictionary/map schemas (values form) are not supported${\n path ? ` (at ${path})` : ''\n }. OpenAI requires additionalProperties: false on all objects. Use explicit properties instead.`;\n }\n\n if ('elements' in jtdSchema && jtdSchema.elements) {\n const elemError = checkUnsupportedFeatures(\n jtdSchema.elements as JTDSchemaJson,\n `${path}/elements`\n );\n if (elemError) return elemError;\n }\n\n if ('properties' in jtdSchema && jtdSchema.properties) {\n for (const [key, value] of Object.entries(jtdSchema.properties)) {\n const propError = checkUnsupportedFeatures(\n value as JTDSchemaJson,\n `${path}/properties/${key}`\n );\n if (propError) return propError;\n }\n }\n\n if ('optionalProperties' in jtdSchema && jtdSchema.optionalProperties) {\n for (const [key, value] of Object.entries(jtdSchema.optionalProperties)) {\n const propError = checkUnsupportedFeatures(\n value as JTDSchemaJson,\n `${path}/optionalProperties/${key}`\n );\n if (propError) return propError;\n }\n }\n\n return null;\n}\n\nfunction convertSchemaToUniversal(\n jtdSchema: JTDSchemaJson\n): UniversalJsonSchema {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return {};\n }\n\n const isNullable = 'nullable' in jtdSchema && jtdSchema.nullable === true;\n const result: UniversalJsonSchema = {};\n\n const metadata = jtdSchema.metadata as Record<string, unknown> | undefined;\n if (metadata) {\n if (typeof metadata['title'] === 'string' && metadata['title'].trim()) {\n result.title = metadata['title'].trim();\n }\n if (\n typeof metadata['description'] === 'string' &&\n metadata['description'].trim()\n ) {\n result.description = metadata['description'].trim();\n }\n }\n\n // Type form\n if ('type' in jtdSchema && jtdSchema.type) {\n const typeMap: Record<string, string> = {\n boolean: 'boolean',\n string: 'string',\n timestamp: 'string',\n float32: 'number',\n float64: 'number',\n int8: 'integer',\n uint8: 'integer',\n int16: 'integer',\n uint16: 'integer',\n int32: 'integer',\n uint32: 'integer'\n };\n\n const jtdType = jtdSchema.type as string;\n const baseType = typeMap[jtdType] || 'string';\n\n result.type = isNullable ? [baseType, 'null'] : baseType;\n\n if (jtdType === 'timestamp') {\n result.format = 'date-time';\n }\n\n return result;\n }\n\n // Enum form\n if ('enum' in jtdSchema && jtdSchema.enum) {\n const enumValues = jtdSchema.enum as string[];\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.enum = isNullable ? [...enumValues, null] : enumValues;\n return result;\n }\n\n // Elements form\n if ('elements' in jtdSchema && jtdSchema.elements) {\n result.type = isNullable ? ['array', 'null'] : 'array';\n result.items = convertSchemaToUniversal(\n jtdSchema.elements as JTDSchemaJson\n );\n return result;\n }\n\n // Properties form\n if ('properties' in jtdSchema || 'optionalProperties' in jtdSchema) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.properties = {};\n result.required = [];\n result.additionalProperties = false;\n\n if ('properties' in jtdSchema && jtdSchema.properties) {\n for (const [key, value] of Object.entries(jtdSchema.properties)) {\n result.properties[key] = convertSchemaToUniversal(\n value as JTDSchemaJson\n );\n result.required.push(key);\n }\n }\n\n if ('optionalProperties' in jtdSchema && jtdSchema.optionalProperties) {\n for (const [key, value] of Object.entries(jtdSchema.optionalProperties)) {\n result.properties[key] = convertSchemaToUniversal(\n value as JTDSchemaJson\n );\n }\n }\n\n return result;\n }\n\n // Empty form\n return result;\n}\n\n/** Convert JTD schema to Universal JSON Schema compatible with Claude, Gemini, and OpenAI. */\nexport function jtdToUniversalJsonSchema(\n jtdSchema: JTDSchemaJson\n): ConversionResult {\n const unsupportedError = checkUnsupportedFeatures(jtdSchema);\n if (unsupportedError) {\n return { success: false, error: unsupportedError };\n }\n\n try {\n const schema = convertSchemaToUniversal(jtdSchema);\n return { success: true, schema };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : 'Unknown conversion error'\n };\n }\n}\n\ninterface UniversalCompatible {\n compatible: true;\n}\n\ninterface UniversalNotCompatible {\n compatible: false;\n error: string;\n}\n\ntype UniversalCompatibilityResult =\n | UniversalCompatible\n | UniversalNotCompatible;\n\nfunction isUniversalCompatible(\n jtdSchema: JTDSchemaJson\n): UniversalCompatibilityResult {\n const error = checkUnsupportedFeatures(jtdSchema);\n if (error) {\n return { compatible: false, error };\n }\n\n return { compatible: true };\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD SCHEMA VALIDATION (using the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nexport const MAX_VALIDATION_DEPTH = 32;\nexport const MAX_VALIDATION_ERRORS = 100;\n\n/** Validate that the input is a valid JTD schema. */\nexport function validateJTDSchema(\n schema: unknown\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n if (!isSchema(schema)) {\n return {\n valid: false,\n error: 'Invalid JTD schema: Schema does not match JTD structure'\n };\n }\n\n if (!isValidSchema(schema)) {\n return {\n valid: false,\n error:\n 'Invalid JTD schema: Schema has semantic errors (e.g., circular references, conflicting forms)'\n };\n }\n\n return { valid: true, schema: schema as unknown as JTDSchemaJson };\n}\n\n/**\n * Validate that the input is a valid JTD schema compatible with universal JSON schema\n * (Anthropic Claude, Google Gemini, and OpenAI structured outputs).\n */\nexport function validateUniversalJTD(\n schema: unknown\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jtdResult = validateJTDSchema(schema);\n if (!jtdResult.valid) return jtdResult;\n\n const s = jtdResult.schema;\n if (\n !('type' in s) &&\n !('enum' in s) &&\n !('elements' in s) &&\n !('properties' in s) &&\n !('optionalProperties' in s)\n ) {\n return {\n valid: false,\n error:\n 'Schema must define structure (properties, type, enum, or elements). Empty schemas are not supported.'\n };\n }\n\n const compatibilityResult = isUniversalCompatible(jtdResult.schema);\n if (!compatibilityResult.compatible) {\n return { valid: false, error: compatibilityResult.error };\n }\n\n return { valid: true, schema: jtdResult.schema };\n}\n\n/** Parse and validate a JSON string. */\nexport function validateJSON(jsonString: string): {\n valid: boolean;\n data?: unknown;\n error?: string;\n} {\n try {\n const data = JSON.parse(jsonString);\n return { valid: true, data };\n } catch (error) {\n return {\n valid: false,\n error: `Invalid JSON: ${error instanceof Error ? error.message : 'Parse error'}`\n };\n }\n}\n\n/** Parse a JSON string and validate it as a JTD schema. */\nexport function validateJTDSchemaString(\n schemaString: string\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jsonResult = validateJSON(schemaString);\n if (!jsonResult.valid) return { valid: false, error: jsonResult.error! };\n\n return validateJTDSchema(jsonResult.data);\n}\n\n/** Parse a JSON string and validate it as a universal JTD schema (compatible with Claude, Gemini, OpenAI). */\nexport function validateUniversalJTDSchemaString(\n schemaString: string\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jsonResult = validateJSON(schemaString);\n if (!jsonResult.valid) return { valid: false, error: jsonResult.error! };\n\n return validateUniversalJTD(jsonResult.data);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MONACO EDITOR CONFIG FOR JTD SCHEMA EDITING\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Monaco editor JSON schema configuration for JTD schemas compatible with\n * Anthropic Claude, Google Gemini, and OpenAI structured outputs.\n * This is a restricted subset of JTD that excludes discriminator unions, refs, and values (dictionaries).\n */\nexport const UNIVERSAL_JTD_SCHEMA_CONFIG = {\n uri: 'https://mochabug.com/schemas/universal-jtd-schema.json',\n fileMatch: ['inmemory://jtd-schema/*.json'],\n schema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n title: 'Universal JTD Schema',\n description:\n 'JSON Type Definition schema compatible with Anthropic Claude, Google Gemini, and OpenAI structured outputs. Note: discriminator unions, refs, and dictionary/map schemas (values) are NOT supported.',\n type: 'object',\n properties: {\n type: {\n description: 'Type form - defines a primitive type',\n enum: [\n 'boolean',\n 'string',\n 'timestamp',\n 'float32',\n 'float64',\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32',\n ],\n },\n enum: {\n description: 'Enum form - defines a set of string values for classification',\n type: 'array',\n items: { type: 'string' },\n minItems: 1,\n },\n elements: {\n description: 'Elements form - defines an array with typed elements',\n $ref: '#',\n },\n properties: {\n description: 'Properties form - defines an object with required properties',\n type: 'object',\n additionalProperties: { $ref: '#' },\n },\n optionalProperties: {\n description: 'Optional properties - defines optional object properties (can be omitted)',\n type: 'object',\n additionalProperties: { $ref: '#' },\n },\n nullable: {\n description: 'Allow null values in addition to the defined type',\n type: 'boolean',\n },\n metadata: {\n description: 'Custom metadata - use \"title\" and \"description\" to guide the AI model',\n type: 'object',\n properties: {\n title: {\n type: 'string',\n description: 'Short title/label for this field',\n },\n description: {\n type: 'string',\n description: 'Detailed description of what this field should contain',\n },\n },\n additionalProperties: false,\n },\n },\n // Note: We explicitly do NOT include discriminator, mapping, ref, definitions, values,\n // or additionalProperties as these are not universally supported across AI providers\n },\n};\n\n/** Monaco editor JSON schema configuration for JTD schema IntelliSense and validation. */\nexport const JTD_SCHEMA_CONFIG = {\n uri: 'https://jsontypedef.com/schemas/jtd-schema.json',\n fileMatch: ['inmemory://jtd-schema/*.json'],\n schema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n type: {\n description: 'Type form - defines a primitive type',\n enum: [\n 'boolean',\n 'string',\n 'timestamp',\n 'float32',\n 'float64',\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n ]\n },\n enum: {\n description: 'Enum form - defines a set of string values',\n type: 'array',\n items: { type: 'string' }\n },\n elements: {\n description: 'Elements form - defines an array with typed elements',\n $ref: '#'\n },\n properties: {\n description:\n 'Properties form - defines an object with required properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n optionalProperties: {\n description: 'Optional properties - defines optional object properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n values: {\n description: 'Values form - defines a map/dictionary with typed values',\n $ref: '#'\n },\n discriminator: {\n description: 'Discriminator form - defines a tagged union',\n type: 'string'\n },\n mapping: {\n description: 'Mapping for discriminator form',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n ref: {\n description: 'Ref form - references a definition',\n type: 'string'\n },\n definitions: {\n description: 'Top-level definitions for reusable schemas',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n nullable: {\n description: 'Allow null values',\n type: 'boolean'\n },\n metadata: {\n description: 'Custom metadata for documentation',\n type: 'object'\n },\n additionalProperties: {\n description: 'Allow additional properties (properties form only)',\n type: 'boolean'\n }\n }\n }\n};\n"],
|
|
5
|
-
"mappings": "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UACA,OACA,QACA,QACA,SACA,QACA,QACF,CACF,EACA,KAAM,CACJ,YAAa,gEACb,KAAM,QACN,MAAO,CAAE,KAAM,QAAS,EACxB,SAAU,CACZ,EACA,SAAU,CACR,YAAa,uDACb,KAAM,GACR,EACA,WAAY,CACV,YAAa,+DACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,mBAAoB,CAClB,YAAa,4EACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,SAAU,CACR,YAAa,oDACb,KAAM,SACR,EACA,SAAU,CACR,YAAa,wEACb,KAAM,SACN,WAAY,CACV,MAAO,CACL,KAAM,SACN,YAAa,kCACf,EACA,YAAa,CACX,KAAM,SACN,YAAa,wDACf,CACF,EACA,qBAAsB,EACxB,CACF,CAGF,CACF,EAGaC,EAAoB,CAC/B,IAAK,kDACL,UAAW,CAAC,8BAA8B,EAC1C,OAAQ,CACN,QAAS,0CACT,KAAM,SACN,WAAY,CACV,KAAM,CACJ,YAAa,uCACb,KAAM,CACJ,UACA,SACA,YACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACF,CACF,EACA,KAAM,CACJ,YAAa,6CACb,KAAM,QACN,MAAO,CAAE,KAAM,QAAS,CAC1B,EACA,SAAU,CACR,YAAa,uDACb,KAAM,GACR,EACA,WAAY,CACV,YACE,+DACF,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,mBAAoB,CAClB,YAAa,2DACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,OAAQ,CACN,YAAa,2DACb,KAAM,GACR,EACA,cAAe,CACb,YAAa,8CACb,KAAM,QACR,EACA,QAAS,CACP,YAAa,iCACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,IAAK,CACH,YAAa,qCACb,KAAM,QACR,EACA,YAAa,CACX,YAAa,6CACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,SAAU,CACR,YAAa,oBACb,KAAM,SACR,EACA,SAAU,CACR,YAAa,oCACb,KAAM,QACR,EACA,qBAAsB,CACpB,YAAa,qDACb,KAAM,SACR,CACF,CACF,CACF",
|
|
4
|
+
"sourcesContent": ["import type {\n JTDSchemaJson,\n SignalDescriptorJson,\n SignalFormatJson\n} from '../api';\nimport { isSchema, isValidSchema, validate as jtdValidate } from 'jtd';\nimport type { Schema, ValidationError } from 'jtd';\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD FUZZER (generate sample values from JTD schemas)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Maximum recursion depth for fuzzJTD to prevent infinite loops on self-referencing schemas. */\nconst FUZZ_MAX_DEPTH = 10;\n\n/** Generate a fuzzed (sample) value from a JTD schema. */\nexport function fuzzJTD(\n schema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n _depth: number = 0\n): unknown {\n if (_depth > FUZZ_MAX_DEPTH) return null;\n\n if (schema.ref) {\n const def = definitions?.[schema.ref];\n if (def) return fuzzJTD(def, definitions, _depth + 1);\n return null;\n }\n\n if (schema.type) {\n switch (schema.type) {\n case 'string':\n return 'Lorem ipsum';\n case 'timestamp':\n return '2024-01-15T10:30:00Z';\n case 'float32':\n case 'float64':\n return 42.5;\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return BigInt(42);\n case 'boolean':\n return true;\n default:\n return null;\n }\n }\n\n if (schema.enum) {\n return schema.enum[0] ?? null;\n }\n\n if (schema.elements) {\n return [\n fuzzJTD(schema.elements, definitions, _depth + 1),\n fuzzJTD(schema.elements, definitions, _depth + 1)\n ];\n }\n\n if (schema.values) {\n return { key1: fuzzJTD(schema.values, definitions, _depth + 1) };\n }\n\n if (schema.properties || schema.optionalProperties) {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [k, v] of Object.entries(schema.properties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n if (schema.optionalProperties) {\n for (const [k, v] of Object.entries(schema.optionalProperties)) {\n obj[k] = fuzzJTD(v, definitions, _depth + 1);\n }\n }\n return obj;\n }\n\n if (schema.discriminator && schema.mapping) {\n const firstKey = Object.keys(schema.mapping)[0];\n if (firstKey) {\n const variant = schema.mapping[firstKey]!;\n const obj = fuzzJTD(variant, definitions, _depth + 1) as Record<\n string,\n unknown\n >;\n obj[schema.discriminator] = firstKey;\n return obj;\n }\n return null;\n }\n\n // Empty schema\n return null;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD VALUE VALIDATION (delegates to the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst INTEGER_TYPES = new Set([\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n]);\n\nfunction formatInstancePath(instancePath: string[]): string {\n if (instancePath.length === 0) return '/';\n return instancePath\n .map((p) => (/^\\d+$/.test(p) ? `[${p}]` : `.${p}`))\n .join('');\n}\n\nfunction resolveSchemaParent(\n schema: Record<string, unknown>,\n schemaPath: string[]\n): Record<string, unknown> {\n let current: any = schema;\n for (let i = 0; i < schemaPath.length - 1; i++) {\n if (current && typeof current === 'object' && schemaPath[i]! in current) {\n current = current[schemaPath[i]!];\n } else {\n break;\n }\n }\n return current as Record<string, unknown>;\n}\n\nfunction resolveInstanceValue(value: unknown, instancePath: string[]): unknown {\n let current = value;\n for (const key of instancePath) {\n if (current && typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\nfunction formatValidationError(\n error: ValidationError,\n schema: Record<string, unknown>,\n value: unknown\n): string {\n const { instancePath, schemaPath } = error;\n const path = formatInstancePath(instancePath);\n const lastKey = schemaPath[schemaPath.length - 1];\n\n if (lastKey === 'type') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const jtdType = parent?.type as string;\n if (jtdType === 'boolean') return `${path}: expected boolean`;\n if (jtdType === 'string') return `${path}: expected string`;\n if (jtdType === 'timestamp') return `${path}: expected timestamp string`;\n if (INTEGER_TYPES.has(jtdType)) return `${path}: expected integer`;\n return `${path}: expected number`;\n }\n\n if (lastKey === 'enum') {\n const parent = resolveSchemaParent(schema, schemaPath);\n const enumValues = parent?.enum as string[];\n return `${path}: expected one of [${enumValues.join(', ')}]`;\n }\n\n if (\n schemaPath.length >= 2 &&\n schemaPath[schemaPath.length - 2] === 'properties' &&\n lastKey\n ) {\n const prefix = path === '/' ? '' : path;\n return `${prefix}.${lastKey}: missing required property`;\n }\n\n if (lastKey === 'elements') return `${path}: expected array`;\n\n if (\n lastKey === 'properties' ||\n lastKey === 'optionalProperties' ||\n lastKey === 'values'\n ) {\n return `${path}: expected object`;\n }\n\n if (lastKey === 'discriminator')\n return `${path}: expected string discriminator`;\n\n if (lastKey === 'mapping') {\n const discValue = resolveInstanceValue(value, instancePath);\n return `${path}: unknown variant \"${discValue}\"`;\n }\n\n if (schemaPath.length === 0) return `${path}: unexpected property`;\n\n return `${path}: validation error at /${schemaPath.join('/')}`;\n}\n\n/**\n * Validate a value against a JTD schema, returning an array of error messages.\n * Delegates to the `jtd` npm package for spec-compliant validation.\n */\nexport function validateValueAgainstJTD(\n schema: JTDSchemaJson,\n value: unknown,\n definitions?: Record<string, JTDSchemaJson>\n): string[] {\n const defs =\n definitions ??\n (schema.definitions as Record<string, JTDSchemaJson> | undefined);\n\n const schemaForValidation = defs\n ? ({ ...schema, definitions: defs } as Schema)\n : (schema as Schema);\n\n // The jtd lib throws on invalid schemas (e.g., unresolved refs).\n if (!isValidSchema(schemaForValidation)) {\n if (schema.ref) {\n return [`/: unknown ref \"${schema.ref}\"`];\n }\n return [`/: invalid schema`];\n }\n\n const errors = jtdValidate(schemaForValidation, value, {\n maxDepth: MAX_VALIDATION_DEPTH,\n maxErrors: MAX_VALIDATION_ERRORS\n });\n\n return errors.map((err) =>\n formatValidationError(\n err,\n schemaForValidation as Record<string, unknown>,\n value\n )\n );\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// SIGNAL-LEVEL VALIDATION (JSON values against JTD formats)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** Validate a JSON value against a single SignalFormatJson. */\nexport function validateValueAgainstSignal(\n format: SignalFormatJson,\n jsonValue: unknown\n): string[];\n/** Validate a JSON value against a SignalDescriptorJson (valid if value matches ANY JTD format). */\nexport function validateValueAgainstSignal(\n descriptor: SignalDescriptorJson,\n jsonValue: unknown\n): string[];\nexport function validateValueAgainstSignal(\n formatOrDescriptor: SignalFormatJson | SignalDescriptorJson,\n jsonValue: unknown\n): string[] {\n // Descriptor path \u2014 has `formats` array\n if (\n 'formats' in formatOrDescriptor &&\n Array.isArray(formatOrDescriptor.formats)\n ) {\n const jtdFormats = (\n formatOrDescriptor.formats as SignalFormatJson[]\n ).filter((f) => f.jtdSchema);\n if (jtdFormats.length === 0) {\n return ['/: no JTD formats in signal descriptor'];\n }\n // Valid if value matches ANY JTD format\n for (const format of jtdFormats) {\n const errors = validateValueAgainstJTD(format.jtdSchema!, jsonValue);\n if (errors.length === 0) return [];\n }\n // None matched \u2014 return errors from last format attempt\n return validateValueAgainstJTD(\n jtdFormats[jtdFormats.length - 1]!.jtdSchema!,\n jsonValue\n );\n }\n\n // Single format path\n const format = formatOrDescriptor as SignalFormatJson;\n if (!format.jtdSchema) {\n return ['/: signal format has no jtdSchema'];\n }\n return validateValueAgainstJTD(format.jtdSchema, jsonValue);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD \u2192 JSON SCHEMA CONVERTER\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Convert JTD (JSON Type Definition) schema to JSON Schema for validation.\n *\n * Supports all 8 JTD schema forms per RFC 8927:\n * - Empty form: {}\n * - Ref form: { ref: \"...\" }\n * - Type form: { type: \"...\" }\n * - Enum form: { enum: [...] }\n * - Elements form: { elements: {...} }\n * - Properties form: { properties: {...}, optionalProperties: {...} }\n * - Values form: { values: {...} }\n * - Discriminator form: { discriminator: \"...\", mapping: {...} }\n */\nexport function jtdToJsonSchema(\n jtdSchema: JTDSchemaJson,\n definitions?: Record<string, JTDSchemaJson>,\n isRoot = true\n): any {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return {};\n }\n\n const isNullable = jtdSchema['nullable'];\n const defs =\n definitions ||\n (jtdSchema['definitions'] as Record<string, JTDSchemaJson> | undefined);\n\n const result: any = {};\n\n if (isRoot) {\n result.$schema = 'http://json-schema.org/draft-07/schema#';\n }\n\n // Ref form\n if (jtdSchema['ref']) {\n const refName = jtdSchema['ref'] as string;\n if (defs && defs[refName]) {\n const resolvedSchema = jtdToJsonSchema(\n defs[refName] as JTDSchemaJson,\n defs,\n false\n );\n\n if (isNullable) {\n if (resolvedSchema.type) {\n resolvedSchema.type = Array.isArray(resolvedSchema.type)\n ? [...resolvedSchema.type, 'null']\n : [resolvedSchema.type, 'null'];\n } else {\n return {\n ...resolvedSchema,\n anyOf: [resolvedSchema, { type: 'null' }],\n ...(isRoot\n ? { $schema: 'http://json-schema.org/draft-07/schema#' }\n : {})\n };\n }\n }\n\n return isRoot\n ? {\n ...resolvedSchema,\n $schema: 'http://json-schema.org/draft-07/schema#'\n }\n : resolvedSchema;\n }\n return isRoot ? result : {};\n }\n\n // Type form\n if (jtdSchema['type']) {\n const typeMap: Record<string, string> = {\n boolean: 'boolean',\n string: 'string',\n timestamp: 'string',\n float32: 'number',\n float64: 'number',\n int8: 'integer',\n uint8: 'integer',\n int16: 'integer',\n uint16: 'integer',\n int32: 'integer',\n uint32: 'integer'\n };\n const jtdType = jtdSchema['type'] as string;\n const baseType = typeMap[jtdType] || 'string';\n\n result.type = isNullable ? [baseType, 'null'] : baseType;\n\n if (baseType === 'string' && jtdType === 'timestamp') {\n result.format = 'date-time';\n }\n return result;\n }\n\n // Enum form\n if (jtdSchema['enum']) {\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.enum = isNullable\n ? [...(jtdSchema['enum'] as string[]), null]\n : jtdSchema['enum'];\n return result;\n }\n\n // Elements form\n if (jtdSchema['elements']) {\n result.type = isNullable ? ['array', 'null'] : 'array';\n result.items = jtdToJsonSchema(\n jtdSchema['elements'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Properties form\n if (jtdSchema['properties'] || jtdSchema['optionalProperties']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.properties = {};\n result.required = [];\n\n if (jtdSchema['properties']) {\n for (const [key, value] of Object.entries(jtdSchema['properties'])) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n result.required.push(key);\n }\n }\n\n if (jtdSchema['optionalProperties']) {\n for (const [key, value] of Object.entries(\n jtdSchema['optionalProperties']\n )) {\n result.properties[key] = jtdToJsonSchema(\n value as JTDSchemaJson,\n defs,\n false\n );\n }\n }\n\n // JTD is strict by default\n if (jtdSchema['additionalProperties'] !== true) {\n result.additionalProperties = false;\n }\n\n return result;\n }\n\n // Values form\n if (jtdSchema['values']) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.additionalProperties = jtdToJsonSchema(\n jtdSchema['values'] as JTDSchemaJson,\n defs,\n false\n );\n return result;\n }\n\n // Discriminator form\n if (jtdSchema['discriminator'] && jtdSchema['mapping']) {\n const variants = [];\n const discriminatorKey = jtdSchema['discriminator'] as string;\n\n for (const [tag, schema] of Object.entries(jtdSchema['mapping'])) {\n const variantSchema = jtdToJsonSchema(\n schema as JTDSchemaJson,\n defs,\n false\n );\n\n if (!variantSchema.type) {\n variantSchema.type = 'object';\n } else if (\n variantSchema.type !== 'object' &&\n !Array.isArray(variantSchema.type)\n ) {\n variantSchema.type = 'object';\n }\n\n variantSchema.properties = variantSchema.properties || {};\n variantSchema.properties[discriminatorKey] = { const: tag };\n\n variantSchema.required = variantSchema.required || [];\n if (!variantSchema.required.includes(discriminatorKey)) {\n variantSchema.required.unshift(discriminatorKey);\n }\n\n // JTD discriminator variants are strict by default\n if (variantSchema.additionalProperties === undefined) {\n variantSchema.additionalProperties = false;\n }\n\n variants.push(variantSchema);\n }\n\n if (isNullable) {\n variants.push({ type: 'null' });\n }\n\n result.oneOf = variants;\n return result;\n }\n\n // Empty form\n return result;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD \u2192 UNIVERSAL JSON SCHEMA (for AI providers: Claude, Gemini, OpenAI)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nexport interface UniversalJsonSchema {\n type?: string | string[];\n title?: string;\n description?: string;\n enum?: (string | number | null)[];\n format?: 'date-time' | 'date' | 'time';\n properties?: Record<string, UniversalJsonSchema>;\n required?: string[];\n additionalProperties?: false;\n items?: UniversalJsonSchema;\n}\n\nexport interface ConversionSuccess {\n success: true;\n schema: UniversalJsonSchema;\n}\n\nexport interface ConversionFailure {\n success: false;\n error: string;\n}\n\nexport type ConversionResult = ConversionSuccess | ConversionFailure;\n\nfunction checkUnsupportedFeatures(\n jtdSchema: JTDSchemaJson,\n path = ''\n): string | null {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return null;\n }\n\n if ('discriminator' in jtdSchema || 'mapping' in jtdSchema) {\n return `Discriminator unions are not supported${\n path ? ` (at ${path})` : ''\n }. Use a simpler object structure instead.`;\n }\n\n if ('ref' in jtdSchema) {\n return `Schema references (ref) are not supported${\n path ? ` (at ${path})` : ''\n }. Inline the schema definition instead.`;\n }\n\n if ('definitions' in jtdSchema) {\n return `Schema definitions are not supported${\n path ? ` (at ${path})` : ''\n }. Inline the schema definition instead.`;\n }\n\n if ('values' in jtdSchema) {\n return `Dictionary/map schemas (values form) are not supported${\n path ? ` (at ${path})` : ''\n }. OpenAI requires additionalProperties: false on all objects. Use explicit properties instead.`;\n }\n\n if ('elements' in jtdSchema && jtdSchema.elements) {\n const elemError = checkUnsupportedFeatures(\n jtdSchema.elements as JTDSchemaJson,\n `${path}/elements`\n );\n if (elemError) return elemError;\n }\n\n if ('properties' in jtdSchema && jtdSchema.properties) {\n for (const [key, value] of Object.entries(jtdSchema.properties)) {\n const propError = checkUnsupportedFeatures(\n value as JTDSchemaJson,\n `${path}/properties/${key}`\n );\n if (propError) return propError;\n }\n }\n\n if ('optionalProperties' in jtdSchema && jtdSchema.optionalProperties) {\n for (const [key, value] of Object.entries(jtdSchema.optionalProperties)) {\n const propError = checkUnsupportedFeatures(\n value as JTDSchemaJson,\n `${path}/optionalProperties/${key}`\n );\n if (propError) return propError;\n }\n }\n\n return null;\n}\n\nfunction convertSchemaToUniversal(\n jtdSchema: JTDSchemaJson\n): UniversalJsonSchema {\n if (!jtdSchema || typeof jtdSchema !== 'object') {\n return {};\n }\n\n const isNullable = 'nullable' in jtdSchema && jtdSchema.nullable === true;\n const result: UniversalJsonSchema = {};\n\n const metadata = jtdSchema.metadata as Record<string, unknown> | undefined;\n if (metadata) {\n if (typeof metadata['title'] === 'string' && metadata['title'].trim()) {\n result.title = metadata['title'].trim();\n }\n if (\n typeof metadata['description'] === 'string' &&\n metadata['description'].trim()\n ) {\n result.description = metadata['description'].trim();\n }\n }\n\n // Type form\n if ('type' in jtdSchema && jtdSchema.type) {\n const typeMap: Record<string, string> = {\n boolean: 'boolean',\n string: 'string',\n timestamp: 'string',\n float32: 'number',\n float64: 'number',\n int8: 'integer',\n uint8: 'integer',\n int16: 'integer',\n uint16: 'integer',\n int32: 'integer',\n uint32: 'integer'\n };\n\n const jtdType = jtdSchema.type as string;\n const baseType = typeMap[jtdType] || 'string';\n\n result.type = isNullable ? [baseType, 'null'] : baseType;\n\n if (jtdType === 'timestamp') {\n result.format = 'date-time';\n }\n\n return result;\n }\n\n // Enum form\n if ('enum' in jtdSchema && jtdSchema.enum) {\n const enumValues = jtdSchema.enum as string[];\n result.type = isNullable ? ['string', 'null'] : 'string';\n result.enum = isNullable ? [...enumValues, null] : enumValues;\n return result;\n }\n\n // Elements form\n if ('elements' in jtdSchema && jtdSchema.elements) {\n result.type = isNullable ? ['array', 'null'] : 'array';\n result.items = convertSchemaToUniversal(\n jtdSchema.elements as JTDSchemaJson\n );\n return result;\n }\n\n // Properties form\n if ('properties' in jtdSchema || 'optionalProperties' in jtdSchema) {\n result.type = isNullable ? ['object', 'null'] : 'object';\n result.properties = {};\n result.required = [];\n result.additionalProperties = false;\n\n if ('properties' in jtdSchema && jtdSchema.properties) {\n for (const [key, value] of Object.entries(jtdSchema.properties)) {\n result.properties[key] = convertSchemaToUniversal(\n value as JTDSchemaJson\n );\n result.required.push(key);\n }\n }\n\n if ('optionalProperties' in jtdSchema && jtdSchema.optionalProperties) {\n for (const [key, value] of Object.entries(jtdSchema.optionalProperties)) {\n result.properties[key] = convertSchemaToUniversal(\n value as JTDSchemaJson\n );\n }\n }\n\n return result;\n }\n\n // Empty form\n return result;\n}\n\n/** Convert JTD schema to Universal JSON Schema compatible with Claude, Gemini, and OpenAI. */\nexport function jtdToUniversalJsonSchema(\n jtdSchema: JTDSchemaJson\n): ConversionResult {\n const unsupportedError = checkUnsupportedFeatures(jtdSchema);\n if (unsupportedError) {\n return { success: false, error: unsupportedError };\n }\n\n try {\n const schema = convertSchemaToUniversal(jtdSchema);\n return { success: true, schema };\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : 'Unknown conversion error'\n };\n }\n}\n\ninterface UniversalCompatible {\n compatible: true;\n}\n\ninterface UniversalNotCompatible {\n compatible: false;\n error: string;\n}\n\ntype UniversalCompatibilityResult =\n | UniversalCompatible\n | UniversalNotCompatible;\n\nfunction isUniversalCompatible(\n jtdSchema: JTDSchemaJson\n): UniversalCompatibilityResult {\n const error = checkUnsupportedFeatures(jtdSchema);\n if (error) {\n return { compatible: false, error };\n }\n\n return { compatible: true };\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// JTD SCHEMA VALIDATION (using the `jtd` npm package)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nexport const MAX_VALIDATION_DEPTH = 32;\nexport const MAX_VALIDATION_ERRORS = 100;\n\n/** Validate that the input is a valid JTD schema. */\nexport function validateJTDSchema(\n schema: unknown\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n if (!isSchema(schema)) {\n return {\n valid: false,\n error: 'Invalid JTD schema: Schema does not match JTD structure'\n };\n }\n\n if (!isValidSchema(schema)) {\n return {\n valid: false,\n error:\n 'Invalid JTD schema: Schema has semantic errors (e.g., circular references, conflicting forms)'\n };\n }\n\n return { valid: true, schema: schema as unknown as JTDSchemaJson };\n}\n\n/**\n * Validate that the input is a valid JTD schema compatible with universal JSON schema\n * (Anthropic Claude, Google Gemini, and OpenAI structured outputs).\n */\nexport function validateUniversalJTD(\n schema: unknown\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jtdResult = validateJTDSchema(schema);\n if (!jtdResult.valid) return jtdResult;\n\n const s = jtdResult.schema;\n if (\n !('type' in s) &&\n !('enum' in s) &&\n !('elements' in s) &&\n !('properties' in s) &&\n !('optionalProperties' in s)\n ) {\n return {\n valid: false,\n error:\n 'Schema must define structure (properties, type, enum, or elements). Empty schemas are not supported.'\n };\n }\n\n const compatibilityResult = isUniversalCompatible(jtdResult.schema);\n if (!compatibilityResult.compatible) {\n return { valid: false, error: compatibilityResult.error };\n }\n\n return { valid: true, schema: jtdResult.schema };\n}\n\n/** Parse and validate a JSON string. */\nexport function validateJSON(jsonString: string): {\n valid: boolean;\n data?: unknown;\n error?: string;\n} {\n try {\n const data = JSON.parse(jsonString);\n return { valid: true, data };\n } catch (error) {\n return {\n valid: false,\n error: `Invalid JSON: ${error instanceof Error ? error.message : 'Parse error'}`\n };\n }\n}\n\n/** Parse a JSON string and validate it as a JTD schema. */\nexport function validateJTDSchemaString(\n schemaString: string\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jsonResult = validateJSON(schemaString);\n if (!jsonResult.valid) return { valid: false, error: jsonResult.error! };\n\n return validateJTDSchema(jsonResult.data);\n}\n\n/** Parse a JSON string and validate it as a universal JTD schema (compatible with Claude, Gemini, OpenAI). */\nexport function validateUniversalJTDSchemaString(\n schemaString: string\n): { valid: true; schema: JTDSchemaJson } | { valid: false; error: string } {\n const jsonResult = validateJSON(schemaString);\n if (!jsonResult.valid) return { valid: false, error: jsonResult.error! };\n\n return validateUniversalJTD(jsonResult.data);\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// MONACO EDITOR CONFIG FOR JTD SCHEMA EDITING\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/**\n * Monaco editor JSON schema configuration for JTD schemas compatible with\n * Anthropic Claude, Google Gemini, and OpenAI structured outputs.\n * This is a restricted subset of JTD that excludes discriminator unions, refs, and values (dictionaries).\n */\nexport const UNIVERSAL_JTD_SCHEMA_CONFIG = {\n uri: 'https://mochabug.com/schemas/universal-jtd-schema.json',\n fileMatch: ['inmemory://jtd-schema/*.json'],\n schema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n title: 'Universal JTD Schema',\n description:\n 'JSON Type Definition schema compatible with Anthropic Claude, Google Gemini, and OpenAI structured outputs. Note: discriminator unions, refs, and dictionary/map schemas (values) are NOT supported.',\n type: 'object',\n properties: {\n type: {\n description: 'Type form - defines a primitive type',\n enum: [\n 'boolean',\n 'string',\n 'timestamp',\n 'float32',\n 'float64',\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n ]\n },\n enum: {\n description:\n 'Enum form - defines a set of string values for classification',\n type: 'array',\n items: { type: 'string' },\n minItems: 1\n },\n elements: {\n description: 'Elements form - defines an array with typed elements',\n $ref: '#'\n },\n properties: {\n description:\n 'Properties form - defines an object with required properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n optionalProperties: {\n description:\n 'Optional properties - defines optional object properties (can be omitted)',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n nullable: {\n description: 'Allow null values in addition to the defined type',\n type: 'boolean'\n },\n metadata: {\n description:\n 'Custom metadata - use \"title\" and \"description\" to guide the AI model',\n type: 'object',\n properties: {\n title: {\n type: 'string',\n description: 'Short title/label for this field'\n },\n description: {\n type: 'string',\n description:\n 'Detailed description of what this field should contain'\n }\n },\n additionalProperties: false\n }\n }\n // Note: We explicitly do NOT include discriminator, mapping, ref, definitions, values,\n // or additionalProperties as these are not universally supported across AI providers\n }\n};\n\n/** Monaco editor JSON schema configuration for JTD schema IntelliSense and validation. */\nexport const JTD_SCHEMA_CONFIG = {\n uri: 'https://jsontypedef.com/schemas/jtd-schema.json',\n fileMatch: ['inmemory://jtd-schema/*.json'],\n schema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n type: {\n description: 'Type form - defines a primitive type',\n enum: [\n 'boolean',\n 'string',\n 'timestamp',\n 'float32',\n 'float64',\n 'int8',\n 'uint8',\n 'int16',\n 'uint16',\n 'int32',\n 'uint32'\n ]\n },\n enum: {\n description: 'Enum form - defines a set of string values',\n type: 'array',\n items: { type: 'string' }\n },\n elements: {\n description: 'Elements form - defines an array with typed elements',\n $ref: '#'\n },\n properties: {\n description:\n 'Properties form - defines an object with required properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n optionalProperties: {\n description: 'Optional properties - defines optional object properties',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n values: {\n description: 'Values form - defines a map/dictionary with typed values',\n $ref: '#'\n },\n discriminator: {\n description: 'Discriminator form - defines a tagged union',\n type: 'string'\n },\n mapping: {\n description: 'Mapping for discriminator form',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n ref: {\n description: 'Ref form - references a definition',\n type: 'string'\n },\n definitions: {\n description: 'Top-level definitions for reusable schemas',\n type: 'object',\n additionalProperties: { $ref: '#' }\n },\n nullable: {\n description: 'Allow null values',\n type: 'boolean'\n },\n metadata: {\n description: 'Custom metadata for documentation',\n type: 'object'\n },\n additionalProperties: {\n description: 'Allow additional properties (properties form only)',\n type: 'boolean'\n }\n }\n }\n};\n"],
|
|
5
|
+
"mappings": "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,YACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACF,CACF,EACA,KAAM,CACJ,YACE,gEACF,KAAM,QACN,MAAO,CAAE,KAAM,QAAS,EACxB,SAAU,CACZ,EACA,SAAU,CACR,YAAa,uDACb,KAAM,GACR,EACA,WAAY,CACV,YACE,+DACF,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,mBAAoB,CAClB,YACE,4EACF,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,SAAU,CACR,YAAa,oDACb,KAAM,SACR,EACA,SAAU,CACR,YACE,wEACF,KAAM,SACN,WAAY,CACV,MAAO,CACL,KAAM,SACN,YAAa,kCACf,EACA,YAAa,CACX,KAAM,SACN,YACE,wDACJ,CACF,EACA,qBAAsB,EACxB,CACF,CAGF,CACF,EAGaC,EAAoB,CAC/B,IAAK,kDACL,UAAW,CAAC,8BAA8B,EAC1C,OAAQ,CACN,QAAS,0CACT,KAAM,SACN,WAAY,CACV,KAAM,CACJ,YAAa,uCACb,KAAM,CACJ,UACA,SACA,YACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACF,CACF,EACA,KAAM,CACJ,YAAa,6CACb,KAAM,QACN,MAAO,CAAE,KAAM,QAAS,CAC1B,EACA,SAAU,CACR,YAAa,uDACb,KAAM,GACR,EACA,WAAY,CACV,YACE,+DACF,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,mBAAoB,CAClB,YAAa,2DACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,OAAQ,CACN,YAAa,2DACb,KAAM,GACR,EACA,cAAe,CACb,YAAa,8CACb,KAAM,QACR,EACA,QAAS,CACP,YAAa,iCACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,IAAK,CACH,YAAa,qCACb,KAAM,QACR,EACA,YAAa,CACX,YAAa,6CACb,KAAM,SACN,qBAAsB,CAAE,KAAM,GAAI,CACpC,EACA,SAAU,CACR,YAAa,oBACb,KAAM,SACR,EACA,SAAU,CACR,YAAa,oCACb,KAAM,QACR,EACA,qBAAsB,CACpB,YAAa,qDACb,KAAM,SACR,CACF,CACF,CACF",
|
|
6
6
|
"names": ["isSchema", "isValidSchema", "jtdValidate", "FUZZ_MAX_DEPTH", "fuzzJTD", "schema", "definitions", "_depth", "def", "obj", "k", "v", "firstKey", "variant", "INTEGER_TYPES", "formatInstancePath", "instancePath", "p", "resolveSchemaParent", "schemaPath", "current", "resolveInstanceValue", "value", "key", "formatValidationError", "error", "path", "lastKey", "jtdType", "enumValues", "discValue", "validateValueAgainstJTD", "defs", "schemaForValidation", "MAX_VALIDATION_DEPTH", "MAX_VALIDATION_ERRORS", "err", "validateValueAgainstSignal", "formatOrDescriptor", "jsonValue", "jtdFormats", "f", "format", "jtdToJsonSchema", "jtdSchema", "isRoot", "isNullable", "result", "refName", "resolvedSchema", "typeMap", "baseType", "variants", "discriminatorKey", "tag", "variantSchema", "checkUnsupportedFeatures", "elemError", "propError", "convertSchemaToUniversal", "metadata", "jtdToUniversalJsonSchema", "unsupportedError", "isUniversalCompatible", "validateJTDSchema", "validateUniversalJTD", "jtdResult", "s", "compatibilityResult", "validateJSON", "jsonString", "validateJTDSchemaString", "schemaString", "jsonResult", "validateUniversalJTDSchemaString", "UNIVERSAL_JTD_SCHEMA_CONFIG", "JTD_SCHEMA_CONFIG"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,QAAQ,CAAC;AAWhB,0DAA0D;AAC1D,wBAAgB,OAAO,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC3C,MAAM,GAAE,MAAU,GACjB,OAAO,CA8ET;AA0GD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC1C,MAAM,EAAE,CA6BV;AAMD,+DAA+D;AAC/D,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,OAAO,GACjB,MAAM,EAAE,CAAC;AACZ,oGAAoG;AACpG,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,OAAO,GACjB,MAAM,EAAE,CAAC;AAwCZ;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,aAAa,EACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC3C,MAAM,UAAO,GACZ,GAAG,CAiML;AAMD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,KAAK,CAAC;IAC7B,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAoKrE,8FAA8F;AAC9F,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,GACvB,gBAAgB,CAelB;AA8BD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,GACd;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiB1E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GACd;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAyB1E;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG;IAChD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAUA;AAED,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,GACnB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK1E;AAED,8GAA8G;AAC9G,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,GACnB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK1E;AAMD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"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"}
|