@ogygie/studio 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js
CHANGED
|
@@ -536,7 +536,7 @@ var SpecFrontmatterSchema = z4.object({
|
|
|
536
536
|
depends_on: z4.array(FeatureNameSchema),
|
|
537
537
|
priority: z4.enum(["P0", "P1", "P2"]),
|
|
538
538
|
refs: z4.array(z4.string()).default([]).describe("References to the domain model, e.g. 'modele-gally \xA74.2'"),
|
|
539
|
-
deferred: z4.array(DeferredBehaviorSchema).default([]).describe("Behaviors deferred to a later feature
|
|
539
|
+
deferred: z4.array(DeferredBehaviorSchema).default([]).describe("Behaviors deferred to a later feature, blocked by name")
|
|
540
540
|
});
|
|
541
541
|
var SECTIONS_SPEC_OBLIGATOIRES = [
|
|
542
542
|
"# @intent",
|
|
@@ -589,7 +589,7 @@ function parseSpecFrontmatter(text) {
|
|
|
589
589
|
const colonIndex = trimmed.indexOf(":");
|
|
590
590
|
if (colonIndex === -1 || trimmed.startsWith('"') || trimmed.startsWith("'")) {
|
|
591
591
|
problems.push(
|
|
592
|
-
`unparseable line ${JSON.stringify(trimmed)}: expected \`key: value\` \u2014 a spilled array element outside any array? (scalars and arrays of scalars only
|
|
592
|
+
`unparseable line ${JSON.stringify(trimmed)}: expected \`key: value\` \u2014 a spilled array element outside any array? (scalars and arrays of scalars only)`
|
|
593
593
|
);
|
|
594
594
|
continue;
|
|
595
595
|
}
|
|
@@ -604,7 +604,7 @@ function parseSpecFrontmatter(text) {
|
|
|
604
604
|
}
|
|
605
605
|
if (!closed) {
|
|
606
606
|
problems.push(
|
|
607
|
-
`key "${key}": array opened with "[" and never closed with "]" before the end of the frontmatter \u2014 a truncated array would be silently read as empty, hence refused
|
|
607
|
+
`key "${key}": array opened with "[" and never closed with "]" before the end of the frontmatter \u2014 a truncated array would be silently read as empty, hence refused`
|
|
608
608
|
);
|
|
609
609
|
continue;
|
|
610
610
|
}
|
|
@@ -69,7 +69,7 @@ Error generating stack: `+l.message+`
|
|
|
69
69
|
|
|
70
70
|
`)}_.write("payload.value = newResult;"),_.write("return payload;");const U=_.compile();return(B,Y)=>U(S,B,Y)};let f;const d=Xr,h=!_f.jitless,p=h&&w1.value,v=a.catchall;let g;n._zod.parse=(S,_)=>{g??(g=r.value);const z=S.value;return d(z)?h&&p&&_?.async===!1&&_.jitless!==!0?(f||(f=o(a.shape)),S=f(S,_),v?Jg([],z,S,_,g,n):S):s(S,_):(S.issues.push({expected:"object",code:"invalid_type",input:z,inst:n}),S)}});function Ay(n,a,s,r){for(const f of n)if(f.issues.length===0)return a.value=f.value,a;const o=n.filter(f=>!ji(f));return o.length===1?(a.value=o[0].value,o[0]):(a.issues.push({code:"invalid_union",input:a.value,inst:s,errors:n.map(f=>f.issues.map(d=>Nn(d,r,jn())))}),a)}const oE=G("$ZodUnion",(n,a)=>{Ke.init(n,a),De(n._zod,"optin",()=>a.options.some(r=>r._zod.optin==="optional")?"optional":void 0),De(n._zod,"optout",()=>a.options.some(r=>r._zod.optout==="optional")?"optional":void 0),De(n._zod,"values",()=>{if(a.options.every(r=>r._zod.values))return new Set(a.options.flatMap(r=>Array.from(r._zod.values)))}),De(n._zod,"pattern",()=>{if(a.options.every(r=>r._zod.pattern)){const r=a.options.map(o=>o._zod.pattern);return new RegExp(`^(${r.map(o=>Of(o.source)).join("|")})$`)}});const s=a.options.length===1?a.options[0]._zod.run:null;n._zod.parse=(r,o)=>{if(s)return s(r,o);let f=!1;const d=[];for(const h of a.options){const m=h._zod.run({value:r.value,issues:[]},o);if(m instanceof Promise)d.push(m),f=!0;else{if(m.issues.length===0)return m;d.push(m)}}return f?Promise.all(d).then(h=>Ay(h,r,n,o)):Ay(d,r,n,o)}}),cE=G("$ZodIntersection",(n,a)=>{Ke.init(n,a),n._zod.parse=(s,r)=>{const o=s.value,f=a.left._zod.run({value:o,issues:[]},r),d=a.right._zod.run({value:o,issues:[]},r);return f instanceof Promise||d instanceof Promise?Promise.all([f,d]).then(([m,p])=>Cy(s,m,p)):Cy(s,f,d)}});function tf(n,a){if(n===a)return{valid:!0,data:n};if(n instanceof Date&&a instanceof Date&&+n==+a)return{valid:!0,data:n};if(Gi(n)&&Gi(a)){const s=Object.keys(a),r=Object.keys(n).filter(f=>s.indexOf(f)!==-1),o={...n,...a};for(const f of r){const d=tf(n[f],a[f]);if(!d.valid)return{valid:!1,mergeErrorPath:[f,...d.mergeErrorPath]};o[f]=d.data}return{valid:!0,data:o}}if(Array.isArray(n)&&Array.isArray(a)){if(n.length!==a.length)return{valid:!1,mergeErrorPath:[]};const s=[];for(let r=0;r<n.length;r++){const o=n[r],f=a[r],d=tf(o,f);if(!d.valid)return{valid:!1,mergeErrorPath:[r,...d.mergeErrorPath]};s.push(d.data)}return{valid:!0,data:s}}return{valid:!1,mergeErrorPath:[]}}function Cy(n,a,s){const r=new Map;let o;for(const h of a.issues)if(h.code==="unrecognized_keys"){o??(o=h);for(const m of h.keys)r.has(m)||r.set(m,{}),r.get(m).l=!0}else n.issues.push(h);for(const h of s.issues)if(h.code==="unrecognized_keys")for(const m of h.keys)r.has(m)||r.set(m,{}),r.get(m).r=!0;else n.issues.push(h);const f=[...r].filter(([,h])=>h.l&&h.r).map(([h])=>h);if(f.length&&o&&n.issues.push({...o,keys:f}),ji(n))return n;const d=tf(a.value,s.value);if(!d.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(d.mergeErrorPath)}`);return n.value=d.data,n}const fE=G("$ZodRecord",(n,a)=>{Ke.init(n,a),n._zod.parse=(s,r)=>{const o=s.value;if(!Gi(o))return s.issues.push({expected:"record",code:"invalid_type",input:o,inst:n}),s;const f=[],d=a.keyType._zod.values;if(d){s.value={};const h=new Set;for(const p of d)if(typeof p=="string"||typeof p=="number"||typeof p=="symbol"){h.add(typeof p=="number"?p.toString():p);const v=a.keyType._zod.run({value:p,issues:[]},r);if(v instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(v.issues.length){s.issues.push({code:"invalid_key",origin:"record",issues:v.issues.map(_=>Nn(_,r,jn())),input:p,path:[p],inst:n});continue}const g=v.value,S=a.valueType._zod.run({value:o[p],issues:[]},r);S instanceof Promise?f.push(S.then(_=>{_.issues.length&&s.issues.push(...Ni(p,_.issues)),s.value[g]=_.value})):(S.issues.length&&s.issues.push(...Ni(p,S.issues)),s.value[g]=S.value)}let m;for(const p in o)h.has(p)||(m=m??[],m.push(p));m&&m.length>0&&s.issues.push({code:"unrecognized_keys",input:o,inst:n,keys:m})}else{s.value={};for(const h of Reflect.ownKeys(o)){if(h==="__proto__"||!Object.prototype.propertyIsEnumerable.call(o,h))continue;let m=a.keyType._zod.run({value:h,issues:[]},r);if(m instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(typeof h=="string"&&vz.test(h)&&m.issues.length){const g=a.keyType._zod.run({value:Number(h),issues:[]},r);if(g instanceof Promise)throw new Error("Async schemas not supported in object keys currently");g.issues.length===0&&(m=g)}if(m.issues.length){a.mode==="loose"?s.value[h]=o[h]:s.issues.push({code:"invalid_key",origin:"record",issues:m.issues.map(g=>Nn(g,r,jn())),input:h,path:[h],inst:n});continue}const v=a.valueType._zod.run({value:o[h],issues:[]},r);v instanceof Promise?f.push(v.then(g=>{g.issues.length&&s.issues.push(...Ni(h,g.issues)),s.value[m.value]=g.value})):(v.issues.length&&s.issues.push(...Ni(h,v.issues)),s.value[m.value]=v.value)}}return f.length?Promise.all(f).then(()=>s):s}}),dE=G("$ZodEnum",(n,a)=>{Ke.init(n,a);const s=kg(a.entries),r=new Set(s);n._zod.values=r,n._zod.pattern=new RegExp(`^(${s.filter(o=>R1.has(typeof o)).map(o=>typeof o=="string"?Yi(o):o.toString()).join("|")})$`),n._zod.parse=(o,f)=>{const d=o.value;return r.has(d)||o.issues.push({code:"invalid_value",values:s,input:d,inst:n}),o}}),hE=G("$ZodLiteral",(n,a)=>{if(Ke.init(n,a),a.values.length===0)throw new Error("Cannot create literal schema with no valid values");const s=new Set(a.values);n._zod.values=s,n._zod.pattern=new RegExp(`^(${a.values.map(r=>typeof r=="string"?Yi(r):r?Yi(r.toString()):String(r)).join("|")})$`),n._zod.parse=(r,o)=>{const f=r.value;return s.has(f)||r.issues.push({code:"invalid_value",values:a.values,input:f,inst:n}),r}}),pE=G("$ZodTransform",(n,a)=>{Ke.init(n,a),n._zod.optin="optional",n._zod.parse=(s,r)=>{if(r.direction==="backward")throw new Zg(n.constructor.name);const o=a.transform(s.value,s);if(r.async)return(o instanceof Promise?o:Promise.resolve(o)).then(d=>(s.value=d,s.fallback=!0,s));if(o instanceof Promise)throw new ki;return s.value=o,s.fallback=!0,s}});function Dy(n,a){return a===void 0&&(n.issues.length||n.fallback)?{issues:[],value:void 0}:n}const Fg=G("$ZodOptional",(n,a)=>{Ke.init(n,a),n._zod.optin="optional",n._zod.optout="optional",De(n._zod,"values",()=>a.innerType._zod.values?new Set([...a.innerType._zod.values,void 0]):void 0),De(n._zod,"pattern",()=>{const s=a.innerType._zod.pattern;return s?new RegExp(`^(${Of(s.source)})?$`):void 0}),n._zod.parse=(s,r)=>{if(a.innerType._zod.optin==="optional"){const o=s.value,f=a.innerType._zod.run(s,r);return f instanceof Promise?f.then(d=>Dy(d,o)):Dy(f,o)}return s.value===void 0?s:a.innerType._zod.run(s,r)}}),mE=G("$ZodExactOptional",(n,a)=>{Fg.init(n,a),De(n._zod,"values",()=>a.innerType._zod.values),De(n._zod,"pattern",()=>a.innerType._zod.pattern),n._zod.parse=(s,r)=>a.innerType._zod.run(s,r)}),yE=G("$ZodNullable",(n,a)=>{Ke.init(n,a),De(n._zod,"optin",()=>a.innerType._zod.optin),De(n._zod,"optout",()=>a.innerType._zod.optout),De(n._zod,"pattern",()=>{const s=a.innerType._zod.pattern;return s?new RegExp(`^(${Of(s.source)}|null)$`):void 0}),De(n._zod,"values",()=>a.innerType._zod.values?new Set([...a.innerType._zod.values,null]):void 0),n._zod.parse=(s,r)=>s.value===null?s:a.innerType._zod.run(s,r)}),gE=G("$ZodDefault",(n,a)=>{Ke.init(n,a),n._zod.optin="optional",De(n._zod,"values",()=>a.innerType._zod.values),n._zod.parse=(s,r)=>{if(r.direction==="backward")return a.innerType._zod.run(s,r);if(s.value===void 0)return s.value=a.defaultValue,s;const o=a.innerType._zod.run(s,r);return o instanceof Promise?o.then(f=>My(f,a)):My(o,a)}});function My(n,a){return n.value===void 0&&(n.value=a.defaultValue),n}const vE=G("$ZodPrefault",(n,a)=>{Ke.init(n,a),n._zod.optin="optional",De(n._zod,"values",()=>a.innerType._zod.values),n._zod.parse=(s,r)=>(r.direction==="backward"||s.value===void 0&&(s.value=a.defaultValue),a.innerType._zod.run(s,r))}),bE=G("$ZodNonOptional",(n,a)=>{Ke.init(n,a),De(n._zod,"values",()=>{const s=a.innerType._zod.values;return s?new Set([...s].filter(r=>r!==void 0)):void 0}),n._zod.parse=(s,r)=>{const o=a.innerType._zod.run(s,r);return o instanceof Promise?o.then(f=>jy(f,n)):jy(o,n)}});function jy(n,a){return!n.issues.length&&n.value===void 0&&n.issues.push({code:"invalid_type",expected:"nonoptional",input:n.value,inst:a}),n}const SE=G("$ZodCatch",(n,a)=>{Ke.init(n,a),n._zod.optin="optional",De(n._zod,"optout",()=>a.innerType._zod.optout),De(n._zod,"values",()=>a.innerType._zod.values),n._zod.parse=(s,r)=>{if(r.direction==="backward")return a.innerType._zod.run(s,r);const o=a.innerType._zod.run(s,r);return o instanceof Promise?o.then(f=>(s.value=f.value,f.issues.length&&(s.value=a.catchValue({...s,error:{issues:f.issues.map(d=>Nn(d,r,jn()))},input:s.value}),s.issues=[],s.fallback=!0),s)):(s.value=o.value,o.issues.length&&(s.value=a.catchValue({...s,error:{issues:o.issues.map(f=>Nn(f,r,jn()))},input:s.value}),s.issues=[],s.fallback=!0),s)}}),_E=G("$ZodPipe",(n,a)=>{Ke.init(n,a),De(n._zod,"values",()=>a.in._zod.values),De(n._zod,"optin",()=>a.in._zod.optin),De(n._zod,"optout",()=>a.out._zod.optout),De(n._zod,"propValues",()=>a.in._zod.propValues),n._zod.parse=(s,r)=>{if(r.direction==="backward"){const f=a.out._zod.run(s,r);return f instanceof Promise?f.then(d=>Dr(d,a.in,r)):Dr(f,a.in,r)}const o=a.in._zod.run(s,r);return o instanceof Promise?o.then(f=>Dr(f,a.out,r)):Dr(o,a.out,r)}});function Dr(n,a,s){return n.issues.length?(n.aborted=!0,n):a._zod.run({value:n.value,issues:n.issues,fallback:n.fallback},s)}const zE=G("$ZodReadonly",(n,a)=>{Ke.init(n,a),De(n._zod,"propValues",()=>a.innerType._zod.propValues),De(n._zod,"values",()=>a.innerType._zod.values),De(n._zod,"optin",()=>a.innerType?._zod?.optin),De(n._zod,"optout",()=>a.innerType?._zod?.optout),n._zod.parse=(s,r)=>{if(r.direction==="backward")return a.innerType._zod.run(s,r);const o=a.innerType._zod.run(s,r);return o instanceof Promise?o.then(Ny):Ny(o)}});function Ny(n){return n.value=Object.freeze(n.value),n}const EE=G("$ZodCustom",(n,a)=>{rn.init(n,a),Ke.init(n,a),n._zod.parse=(s,r)=>s,n._zod.check=s=>{const r=s.value,o=a.fn(r);if(o instanceof Promise)return o.then(f=>Uy(f,s,r,n));Uy(o,s,r,n)}});function Uy(n,a,s,r){if(!n){const o={code:"custom",input:s,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(o.params=r._zod.def.params),a.issues.push(nl(o))}}var Ly;class OE{constructor(){this._map=new WeakMap,this._idmap=new Map}add(a,...s){const r=s[0];return this._map.set(a,r),r&&typeof r=="object"&&"id"in r&&this._idmap.set(r.id,a),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(a){const s=this._map.get(a);return s&&typeof s=="object"&&"id"in s&&this._idmap.delete(s.id),this._map.delete(a),this}get(a){const s=a._zod.parent;if(s){const r={...this.get(s)??{}};delete r.id;const o={...r,...this._map.get(a)};return Object.keys(o).length?o:void 0}return this._map.get(a)}has(a){return this._map.has(a)}}function TE(){return new OE}(Ly=globalThis).__zod_globalRegistry??(Ly.__zod_globalRegistry=TE());const Js=globalThis.__zod_globalRegistry;function xE(n,a){return new n({type:"string",...le(a)})}function wE(n,a){return new n({type:"string",format:"email",check:"string_format",abort:!1,...le(a)})}function Zy(n,a){return new n({type:"string",format:"guid",check:"string_format",abort:!1,...le(a)})}function RE(n,a){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,...le(a)})}function AE(n,a){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...le(a)})}function CE(n,a){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...le(a)})}function DE(n,a){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...le(a)})}function ME(n,a){return new n({type:"string",format:"url",check:"string_format",abort:!1,...le(a)})}function jE(n,a){return new n({type:"string",format:"emoji",check:"string_format",abort:!1,...le(a)})}function NE(n,a){return new n({type:"string",format:"nanoid",check:"string_format",abort:!1,...le(a)})}function UE(n,a){return new n({type:"string",format:"cuid",check:"string_format",abort:!1,...le(a)})}function LE(n,a){return new n({type:"string",format:"cuid2",check:"string_format",abort:!1,...le(a)})}function ZE(n,a){return new n({type:"string",format:"ulid",check:"string_format",abort:!1,...le(a)})}function kE(n,a){return new n({type:"string",format:"xid",check:"string_format",abort:!1,...le(a)})}function BE(n,a){return new n({type:"string",format:"ksuid",check:"string_format",abort:!1,...le(a)})}function HE(n,a){return new n({type:"string",format:"ipv4",check:"string_format",abort:!1,...le(a)})}function qE(n,a){return new n({type:"string",format:"ipv6",check:"string_format",abort:!1,...le(a)})}function QE(n,a){return new n({type:"string",format:"cidrv4",check:"string_format",abort:!1,...le(a)})}function GE(n,a){return new n({type:"string",format:"cidrv6",check:"string_format",abort:!1,...le(a)})}function YE(n,a){return new n({type:"string",format:"base64",check:"string_format",abort:!1,...le(a)})}function $E(n,a){return new n({type:"string",format:"base64url",check:"string_format",abort:!1,...le(a)})}function VE(n,a){return new n({type:"string",format:"e164",check:"string_format",abort:!1,...le(a)})}function KE(n,a){return new n({type:"string",format:"jwt",check:"string_format",abort:!1,...le(a)})}function XE(n,a){return new n({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...le(a)})}function JE(n,a){return new n({type:"string",format:"date",check:"string_format",...le(a)})}function FE(n,a){return new n({type:"string",format:"time",check:"string_format",precision:null,...le(a)})}function PE(n,a){return new n({type:"string",format:"duration",check:"string_format",...le(a)})}function IE(n){return new n({type:"unknown"})}function WE(n,a){return new n({type:"never",...le(a)})}function Pg(n,a){return new _z({check:"max_length",...le(a),maximum:n})}function Fr(n,a){return new zz({check:"min_length",...le(a),minimum:n})}function Ig(n,a){return new Ez({check:"length_equals",...le(a),length:n})}function e2(n,a){return new Oz({check:"string_format",format:"regex",...le(a),pattern:n})}function t2(n){return new Tz({check:"string_format",format:"lowercase",...le(n)})}function n2(n){return new xz({check:"string_format",format:"uppercase",...le(n)})}function a2(n,a){return new wz({check:"string_format",format:"includes",...le(a),includes:n})}function i2(n,a){return new Rz({check:"string_format",format:"starts_with",...le(a),prefix:n})}function s2(n,a){return new Az({check:"string_format",format:"ends_with",...le(a),suffix:n})}function Vi(n){return new Cz({check:"overwrite",tx:n})}function l2(n){return Vi(a=>a.normalize(n))}function r2(){return Vi(n=>n.trim())}function u2(){return Vi(n=>n.toLowerCase())}function o2(){return Vi(n=>n.toUpperCase())}function c2(){return Vi(n=>x1(n))}function f2(n,a,s){return new n({type:"array",element:a,...le(s)})}function d2(n,a,s){return new n({type:"custom",check:"custom",fn:a,...le(s)})}function h2(n,a){const s=p2(r=>(r.addIssue=o=>{if(typeof o=="string")r.issues.push(nl(o,r.value,s._zod.def));else{const f=o;f.fatal&&(f.continue=!1),f.code??(f.code="custom"),f.input??(f.input=r.value),f.inst??(f.inst=s),f.continue??(f.continue=!s._zod.def.abort),r.issues.push(nl(f))}},n(r.value,r)),a);return s}function p2(n,a){const s=new rn({check:"custom",...le(a)});return s._zod.check=n,s}function Wg(n){let a=n?.target??"draft-2020-12";return a==="draft-4"&&(a="draft-04"),a==="draft-7"&&(a="draft-07"),{processors:n.processors??{},metadataRegistry:n?.metadata??Js,target:a,unrepresentable:n?.unrepresentable??"throw",override:n?.override??(()=>{}),io:n?.io??"output",counter:0,seen:new Map,cycles:n?.cycles??"ref",reused:n?.reused??"inline",external:n?.external??void 0}}function We(n,a,s={path:[],schemaPath:[]}){var r;const o=n._zod.def,f=a.seen.get(n);if(f)return f.count++,s.schemaPath.includes(n)&&(f.cycle=s.path),f.schema;const d={schema:{},count:1,cycle:void 0,path:s.path};a.seen.set(n,d);const h=n._zod.toJSONSchema?.();if(h)d.schema=h;else{const v={...s,schemaPath:[...s.schemaPath,n],path:s.path};if(n._zod.processJSONSchema)n._zod.processJSONSchema(a,d.schema,v);else{const S=d.schema,_=a.processors[o.type];if(!_)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${o.type}`);_(n,a,S,v)}const g=n._zod.parent;g&&(d.ref||(d.ref=g),We(g,a,v),a.seen.get(g).isParent=!0)}const m=a.metadataRegistry.get(n);return m&&Object.assign(d.schema,m),a.io==="input"&&mt(n)&&(delete d.schema.examples,delete d.schema.default),a.io==="input"&&"_prefault"in d.schema&&((r=d.schema).default??(r.default=d.schema._prefault)),delete d.schema._prefault,a.seen.get(n).schema}function ev(n,a){const s=n.seen.get(a);if(!s)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=new Map;for(const d of n.seen.entries()){const h=n.metadataRegistry.get(d[0])?.id;if(h){const m=r.get(h);if(m&&m!==d[0])throw new Error(`Duplicate schema id "${h}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(h,d[0])}}const o=d=>{const h=n.target==="draft-2020-12"?"$defs":"definitions";if(n.external){const g=n.external.registry.get(d[0])?.id,S=n.external.uri??(z=>z);if(g)return{ref:S(g)};const _=d[1].defId??d[1].schema.id??`schema${n.counter++}`;return d[1].defId=_,{defId:_,ref:`${S("__shared")}#/${h}/${_}`}}if(d[1]===s)return{ref:"#"};const p=`#/${h}/`,v=d[1].schema.id??`__schema${n.counter++}`;return{defId:v,ref:p+v}},f=d=>{if(d[1].schema.$ref)return;const h=d[1],{ref:m,defId:p}=o(d);h.def={...h.schema},p&&(h.defId=p);const v=h.schema;for(const g in v)delete v[g];v.$ref=m};if(n.cycles==="throw")for(const d of n.seen.entries()){const h=d[1];if(h.cycle)throw new Error(`Cycle detected: #/${h.cycle?.join("/")}/<root>
|
|
71
71
|
|
|
72
|
-
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const d of n.seen.entries()){const h=d[1];if(a===d[0]){f(d);continue}if(n.external){const p=n.external.registry.get(d[0])?.id;if(a!==d[0]&&p){f(d);continue}}if(n.metadataRegistry.get(d[0])?.id){f(d);continue}if(h.cycle){f(d);continue}if(h.count>1&&n.reused==="ref"){f(d);continue}}}function tv(n,a){const s=n.seen.get(a);if(!s)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=h=>{const m=n.seen.get(h);if(m.ref===null)return;const p=m.def??m.schema,v={...p},g=m.ref;if(m.ref=null,g){r(g);const _=n.seen.get(g),z=_.schema;if(z.$ref&&(n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0")?(p.allOf=p.allOf??[],p.allOf.push(z)):Object.assign(p,z),Object.assign(p,v),h._zod.parent===g)for(const A in p)A==="$ref"||A==="allOf"||A in v||delete p[A];if(z.$ref&&_.def)for(const A in p)A==="$ref"||A==="allOf"||A in _.def&&JSON.stringify(p[A])===JSON.stringify(_.def[A])&&delete p[A]}const S=h._zod.parent;if(S&&S!==g){r(S);const _=n.seen.get(S);if(_?.schema.$ref&&(p.$ref=_.schema.$ref,_.def))for(const z in p)z==="$ref"||z==="allOf"||z in _.def&&JSON.stringify(p[z])===JSON.stringify(_.def[z])&&delete p[z]}n.override({zodSchema:h,jsonSchema:p,path:m.path??[]})};for(const h of[...n.seen.entries()].reverse())r(h[0]);const o={};if(n.target==="draft-2020-12"?o.$schema="https://json-schema.org/draft/2020-12/schema":n.target==="draft-07"?o.$schema="http://json-schema.org/draft-07/schema#":n.target==="draft-04"?o.$schema="http://json-schema.org/draft-04/schema#":n.target,n.external?.uri){const h=n.external.registry.get(a)?.id;if(!h)throw new Error("Schema is missing an `id` property");o.$id=n.external.uri(h)}Object.assign(o,s.def??s.schema);const f=n.metadataRegistry.get(a)?.id;f!==void 0&&o.id===f&&delete o.id;const d=n.external?.defs??{};for(const h of n.seen.entries()){const m=h[1];m.def&&m.defId&&(m.def.id===m.defId&&delete m.def.id,d[m.defId]=m.def)}n.external||Object.keys(d).length>0&&(n.target==="draft-2020-12"?o.$defs=d:o.definitions=d);try{const h=JSON.parse(JSON.stringify(o));return Object.defineProperty(h,"~standard",{value:{...a["~standard"],jsonSchema:{input:Pr(a,"input",n.processors),output:Pr(a,"output",n.processors)}},enumerable:!1,writable:!1}),h}catch{throw new Error("Error converting schema to JSON.")}}function mt(n,a){const s=a??{seen:new Set};if(s.seen.has(n))return!1;s.seen.add(n);const r=n._zod.def;if(r.type==="transform")return!0;if(r.type==="array")return mt(r.element,s);if(r.type==="set")return mt(r.valueType,s);if(r.type==="lazy")return mt(r.getter(),s);if(r.type==="promise"||r.type==="optional"||r.type==="nonoptional"||r.type==="nullable"||r.type==="readonly"||r.type==="default"||r.type==="prefault")return mt(r.innerType,s);if(r.type==="intersection")return mt(r.left,s)||mt(r.right,s);if(r.type==="record"||r.type==="map")return mt(r.keyType,s)||mt(r.valueType,s);if(r.type==="pipe")return n._zod.traits.has("$ZodCodec")?!0:mt(r.in,s)||mt(r.out,s);if(r.type==="object"){for(const o in r.shape)if(mt(r.shape[o],s))return!0;return!1}if(r.type==="union"){for(const o of r.options)if(mt(o,s))return!0;return!1}if(r.type==="tuple"){for(const o of r.items)if(mt(o,s))return!0;return!!(r.rest&&mt(r.rest,s))}return!1}const m2=(n,a={})=>s=>{const r=Wg({...s,processors:a});return We(n,r),ev(r,n),tv(r,n)},Pr=(n,a,s={})=>r=>{const{libraryOptions:o,target:f}=r??{},d=Wg({...o??{},target:f,io:a,processors:s});return We(n,d),ev(d,n),tv(d,n)},y2={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},g2=(n,a,s,r)=>{const o=s;o.type="string";const{minimum:f,maximum:d,format:h,patterns:m,contentEncoding:p}=n._zod.bag;if(typeof f=="number"&&(o.minLength=f),typeof d=="number"&&(o.maxLength=d),h&&(o.format=y2[h]??h,o.format===""&&delete o.format,h==="time"&&delete o.format),p&&(o.contentEncoding=p),m&&m.size>0){const v=[...m];v.length===1?o.pattern=v[0].source:v.length>1&&(o.allOf=[...v.map(g=>({...a.target==="draft-07"||a.target==="draft-04"||a.target==="openapi-3.0"?{type:"string"}:{},pattern:g.source}))])}},v2=(n,a,s,r)=>{s.not={}},b2=(n,a,s,r)=>{},S2=(n,a,s,r)=>{const o=n._zod.def,f=kg(o.entries);f.every(d=>typeof d=="number")&&(s.type="number"),f.every(d=>typeof d=="string")&&(s.type="string"),s.enum=f},_2=(n,a,s,r)=>{const o=n._zod.def,f=[];for(const d of o.values)if(d===void 0){if(a.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof d=="bigint"){if(a.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");f.push(Number(d))}else f.push(d);if(f.length!==0)if(f.length===1){const d=f[0];s.type=d===null?"null":typeof d,a.target==="draft-04"||a.target==="openapi-3.0"?s.enum=[d]:s.const=d}else f.every(d=>typeof d=="number")&&(s.type="number"),f.every(d=>typeof d=="string")&&(s.type="string"),f.every(d=>typeof d=="boolean")&&(s.type="boolean"),f.every(d=>d===null)&&(s.type="null"),s.enum=f},z2=(n,a,s,r)=>{if(a.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},E2=(n,a,s,r)=>{if(a.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},O2=(n,a,s,r)=>{const o=s,f=n._zod.def,{minimum:d,maximum:h}=n._zod.bag;typeof d=="number"&&(o.minItems=d),typeof h=="number"&&(o.maxItems=h),o.type="array",o.items=We(f.element,a,{...r,path:[...r.path,"items"]})},T2=(n,a,s,r)=>{const o=s,f=n._zod.def;o.type="object",o.properties={};const d=f.shape;for(const p in d)o.properties[p]=We(d[p],a,{...r,path:[...r.path,"properties",p]});const h=new Set(Object.keys(d)),m=new Set([...h].filter(p=>{const v=f.shape[p]._zod;return a.io==="input"?v.optin===void 0:v.optout===void 0}));m.size>0&&(o.required=Array.from(m)),f.catchall?._zod.def.type==="never"?o.additionalProperties=!1:f.catchall?f.catchall&&(o.additionalProperties=We(f.catchall,a,{...r,path:[...r.path,"additionalProperties"]})):a.io==="output"&&(o.additionalProperties=!1)},x2=(n,a,s,r)=>{const o=n._zod.def,f=o.inclusive===!1,d=o.options.map((h,m)=>We(h,a,{...r,path:[...r.path,f?"oneOf":"anyOf",m]}));f?s.oneOf=d:s.anyOf=d},w2=(n,a,s,r)=>{const o=n._zod.def,f=We(o.left,a,{...r,path:[...r.path,"allOf",0]}),d=We(o.right,a,{...r,path:[...r.path,"allOf",1]}),h=p=>"allOf"in p&&Object.keys(p).length===1,m=[...h(f)?f.allOf:[f],...h(d)?d.allOf:[d]];s.allOf=m},R2=(n,a,s,r)=>{const o=s,f=n._zod.def;o.type="object";const d=f.keyType,m=d._zod.bag?.patterns;if(f.mode==="loose"&&m&&m.size>0){const v=We(f.valueType,a,{...r,path:[...r.path,"patternProperties","*"]});o.patternProperties={};for(const g of m)o.patternProperties[g.source]=v}else(a.target==="draft-07"||a.target==="draft-2020-12")&&(o.propertyNames=We(f.keyType,a,{...r,path:[...r.path,"propertyNames"]})),o.additionalProperties=We(f.valueType,a,{...r,path:[...r.path,"additionalProperties"]});const p=d._zod.values;if(p){const v=[...p].filter(g=>typeof g=="string"||typeof g=="number");v.length>0&&(o.required=v)}},A2=(n,a,s,r)=>{const o=n._zod.def,f=We(o.innerType,a,r),d=a.seen.get(n);a.target==="openapi-3.0"?(d.ref=o.innerType,s.nullable=!0):s.anyOf=[f,{type:"null"}]},C2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType},D2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,s.default=JSON.parse(JSON.stringify(o.defaultValue))},M2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,a.io==="input"&&(s._prefault=JSON.parse(JSON.stringify(o.defaultValue)))},j2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType;let d;try{d=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}s.default=d},N2=(n,a,s,r)=>{const o=n._zod.def,f=o.in._zod.traits.has("$ZodTransform"),d=a.io==="input"?f?o.out:o.in:o.out;We(d,a,r);const h=a.seen.get(n);h.ref=d},U2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,s.readOnly=!0},nv=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType},L2=G("ZodISODateTime",(n,a)=>{Yz.init(n,a),qe.init(n,a)});function av(n){return XE(L2,n)}const Z2=G("ZodISODate",(n,a)=>{$z.init(n,a),qe.init(n,a)});function k2(n){return JE(Z2,n)}const B2=G("ZodISOTime",(n,a)=>{Vz.init(n,a),qe.init(n,a)});function H2(n){return FE(B2,n)}const q2=G("ZodISODuration",(n,a)=>{Kz.init(n,a),qe.init(n,a)});function Q2(n){return PE(q2,n)}const G2=(n,a)=>{Qg.init(n,a),n.name="ZodError",Object.defineProperties(n,{format:{value:s=>B1(n,s)},flatten:{value:s=>k1(n,s)},addIssue:{value:s=>{n.issues.push(s),n.message=JSON.stringify(n.issues,ef,2)}},addIssues:{value:s=>{n.issues.push(...s),n.message=JSON.stringify(n.issues,ef,2)}},isEmpty:{get(){return n.issues.length===0}}})},Vt=G("ZodError",G2,{Parent:Error}),Y2=xf(Vt),$2=wf(Vt),V2=lu(Vt),K2=ru(Vt),X2=Q1(Vt),J2=G1(Vt),F2=Y1(Vt),P2=$1(Vt),I2=V1(Vt),W2=K1(Vt),eO=X1(Vt),tO=J1(Vt),ky=new WeakMap;function ou(n,a,s){const r=Object.getPrototypeOf(n);let o=ky.get(r);if(o||(o=new Set,ky.set(r,o)),!o.has(a)){o.add(a);for(const f in s){const d=s[f];Object.defineProperty(r,f,{configurable:!0,enumerable:!1,get(){const h=d.bind(this);return Object.defineProperty(this,f,{configurable:!0,writable:!0,enumerable:!0,value:h}),h},set(h){Object.defineProperty(this,f,{configurable:!0,writable:!0,enumerable:!0,value:h})}})}}}const Xe=G("ZodType",(n,a)=>(Ke.init(n,a),Object.assign(n["~standard"],{jsonSchema:{input:Pr(n,"input"),output:Pr(n,"output")}}),n.toJSONSchema=m2(n,{}),n.def=a,n.type=a.type,Object.defineProperty(n,"_def",{value:a}),n.parse=(s,r)=>Y2(n,s,r,{callee:n.parse}),n.safeParse=(s,r)=>V2(n,s,r),n.parseAsync=async(s,r)=>$2(n,s,r,{callee:n.parseAsync}),n.safeParseAsync=async(s,r)=>K2(n,s,r),n.spa=n.safeParseAsync,n.encode=(s,r)=>X2(n,s,r),n.decode=(s,r)=>J2(n,s,r),n.encodeAsync=async(s,r)=>F2(n,s,r),n.decodeAsync=async(s,r)=>P2(n,s,r),n.safeEncode=(s,r)=>I2(n,s,r),n.safeDecode=(s,r)=>W2(n,s,r),n.safeEncodeAsync=async(s,r)=>eO(n,s,r),n.safeDecodeAsync=async(s,r)=>tO(n,s,r),ou(n,"ZodType",{check(...s){const r=this.def;return this.clone(ha(r,{checks:[...r.checks??[],...s.map(o=>typeof o=="function"?{_zod:{check:o,def:{check:"custom"},onattach:[]}}:o)]}),{parent:!0})},with(...s){return this.check(...s)},clone(s,r){return pa(this,s,r)},brand(){return this},register(s,r){return s.add(this,r),this},refine(s,r){return this.check(GO(s,r))},superRefine(s,r){return this.check(YO(s,r))},overwrite(s){return this.check(Vi(s))},optional(){return qy(this)},exactOptional(){return DO(this)},nullable(){return Qy(this)},nullish(){return qy(Qy(this))},nonoptional(s){return LO(this,s)},array(){return et(this)},or(s){return cu([this,s])},and(s){return TO(this,s)},transform(s){return Gy(this,AO(s))},default(s){return jO(this,s)},prefault(s){return UO(this,s)},catch(s){return kO(this,s)},pipe(s){return Gy(this,s)},readonly(){return qO(this)},describe(s){const r=this.clone();return Js.add(r,{description:s}),r},meta(...s){if(s.length===0)return Js.get(this);const r=this.clone();return Js.add(r,s[0]),r},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(s){return s(this)}}),Object.defineProperty(n,"description",{get(){return Js.get(n)?.description},configurable:!0}),n)),iv=G("_ZodString",(n,a)=>{Rf.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(r,o,f)=>g2(n,r,o);const s=n._zod.bag;n.format=s.format??null,n.minLength=s.minimum??null,n.maxLength=s.maximum??null,ou(n,"_ZodString",{regex(...r){return this.check(e2(...r))},includes(...r){return this.check(a2(...r))},startsWith(...r){return this.check(i2(...r))},endsWith(...r){return this.check(s2(...r))},min(...r){return this.check(Fr(...r))},max(...r){return this.check(Pg(...r))},length(...r){return this.check(Ig(...r))},nonempty(...r){return this.check(Fr(1,...r))},lowercase(r){return this.check(t2(r))},uppercase(r){return this.check(n2(r))},trim(){return this.check(r2())},normalize(...r){return this.check(l2(...r))},toLowerCase(){return this.check(u2())},toUpperCase(){return this.check(o2())},slugify(){return this.check(c2())}})}),sv=G("ZodString",(n,a)=>{Rf.init(n,a),iv.init(n,a),n.email=s=>n.check(wE(nO,s)),n.url=s=>n.check(ME(aO,s)),n.jwt=s=>n.check(KE(vO,s)),n.emoji=s=>n.check(jE(iO,s)),n.guid=s=>n.check(Zy(By,s)),n.uuid=s=>n.check(RE(Mr,s)),n.uuidv4=s=>n.check(AE(Mr,s)),n.uuidv6=s=>n.check(CE(Mr,s)),n.uuidv7=s=>n.check(DE(Mr,s)),n.nanoid=s=>n.check(NE(sO,s)),n.guid=s=>n.check(Zy(By,s)),n.cuid=s=>n.check(UE(lO,s)),n.cuid2=s=>n.check(LE(rO,s)),n.ulid=s=>n.check(ZE(uO,s)),n.base64=s=>n.check(YE(mO,s)),n.base64url=s=>n.check($E(yO,s)),n.xid=s=>n.check(kE(oO,s)),n.ksuid=s=>n.check(BE(cO,s)),n.ipv4=s=>n.check(HE(fO,s)),n.ipv6=s=>n.check(qE(dO,s)),n.cidrv4=s=>n.check(QE(hO,s)),n.cidrv6=s=>n.check(GE(pO,s)),n.e164=s=>n.check(VE(gO,s)),n.datetime=s=>n.check(av(s)),n.date=s=>n.check(k2(s)),n.time=s=>n.check(H2(s)),n.duration=s=>n.check(Q2(s))});function se(n){return xE(sv,n)}const qe=G("ZodStringFormat",(n,a)=>{Be.init(n,a),iv.init(n,a)}),nO=G("ZodEmail",(n,a)=>{Uz.init(n,a),qe.init(n,a)}),By=G("ZodGUID",(n,a)=>{jz.init(n,a),qe.init(n,a)}),Mr=G("ZodUUID",(n,a)=>{Nz.init(n,a),qe.init(n,a)}),aO=G("ZodURL",(n,a)=>{Lz.init(n,a),qe.init(n,a)}),iO=G("ZodEmoji",(n,a)=>{Zz.init(n,a),qe.init(n,a)}),sO=G("ZodNanoID",(n,a)=>{kz.init(n,a),qe.init(n,a)}),lO=G("ZodCUID",(n,a)=>{Bz.init(n,a),qe.init(n,a)}),rO=G("ZodCUID2",(n,a)=>{Hz.init(n,a),qe.init(n,a)}),uO=G("ZodULID",(n,a)=>{qz.init(n,a),qe.init(n,a)}),oO=G("ZodXID",(n,a)=>{Qz.init(n,a),qe.init(n,a)}),cO=G("ZodKSUID",(n,a)=>{Gz.init(n,a),qe.init(n,a)}),fO=G("ZodIPv4",(n,a)=>{Xz.init(n,a),qe.init(n,a)}),dO=G("ZodIPv6",(n,a)=>{Jz.init(n,a),qe.init(n,a)}),hO=G("ZodCIDRv4",(n,a)=>{Fz.init(n,a),qe.init(n,a)}),pO=G("ZodCIDRv6",(n,a)=>{Pz.init(n,a),qe.init(n,a)}),mO=G("ZodBase64",(n,a)=>{Iz.init(n,a),qe.init(n,a)}),yO=G("ZodBase64URL",(n,a)=>{eE.init(n,a),qe.init(n,a)}),gO=G("ZodE164",(n,a)=>{tE.init(n,a),qe.init(n,a)}),vO=G("ZodJWT",(n,a)=>{aE.init(n,a),qe.init(n,a)}),bO=G("ZodUnknown",(n,a)=>{iE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>b2()});function nf(){return IE(bO)}const SO=G("ZodNever",(n,a)=>{sE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>v2(n,s,r)});function _O(n){return WE(SO,n)}const lv=G("ZodArray",(n,a)=>{lE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>O2(n,s,r,o),n.element=a.element,ou(n,"ZodArray",{min(s,r){return this.check(Fr(s,r))},nonempty(s){return this.check(Fr(1,s))},max(s,r){return this.check(Pg(s,r))},length(s,r){return this.check(Ig(s,r))},unwrap(){return this.element}})});function et(n,a){return f2(lv,n,a)}const zO=G("ZodObject",(n,a)=>{uE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>T2(n,s,r,o),De(n,"shape",()=>a.shape),ou(n,"ZodObject",{keyof(){return Un(Object.keys(this._zod.def.shape))},catchall(s){return this.clone({...this._zod.def,catchall:s})},passthrough(){return this.clone({...this._zod.def,catchall:nf()})},loose(){return this.clone({...this._zod.def,catchall:nf()})},strict(){return this.clone({...this._zod.def,catchall:_O()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(s){return M1(this,s)},safeExtend(s){return j1(this,s)},merge(s){return N1(this,s)},pick(s){return C1(this,s)},omit(s){return D1(this,s)},partial(...s){return U1(rv,this,s[0])},required(...s){return L1(ov,this,s[0])}})});function je(n,a){const s={type:"object",shape:n??{},...le(a)};return new zO(s)}const EO=G("ZodUnion",(n,a)=>{oE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>x2(n,s,r,o),n.options=a.options});function cu(n,a){return new EO({type:"union",options:n,...le(a)})}const OO=G("ZodIntersection",(n,a)=>{cE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>w2(n,s,r,o)});function TO(n,a){return new OO({type:"intersection",left:n,right:a})}const Hy=G("ZodRecord",(n,a)=>{fE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>R2(n,s,r,o),n.keyType=a.keyType,n.valueType=a.valueType});function xO(n,a,s){return!a||!a._zod?new Hy({type:"record",keyType:se(),valueType:n,...le(a)}):new Hy({type:"record",keyType:n,valueType:a,...le(s)})}const Ir=G("ZodEnum",(n,a)=>{dE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(r,o,f)=>S2(n,r,o),n.enum=a.entries,n.options=Object.values(a.entries);const s=new Set(Object.keys(a.entries));n.extract=(r,o)=>{const f={};for(const d of r)if(s.has(d))f[d]=a.entries[d];else throw new Error(`Key ${d} not found in enum`);return new Ir({...a,checks:[],...le(o),entries:f})},n.exclude=(r,o)=>{const f={...a.entries};for(const d of r)if(s.has(d))delete f[d];else throw new Error(`Key ${d} not found in enum`);return new Ir({...a,checks:[],...le(o),entries:f})}});function Un(n,a){const s=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new Ir({type:"enum",entries:s,...le(a)})}const wO=G("ZodLiteral",(n,a)=>{hE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>_2(n,s,r),n.values=new Set(a.values),Object.defineProperty(n,"value",{get(){if(a.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return a.values[0]}})});function La(n,a){return new wO({type:"literal",values:Array.isArray(n)?n:[n],...le(a)})}const RO=G("ZodTransform",(n,a)=>{pE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>E2(n,s),n._zod.parse=(s,r)=>{if(r.direction==="backward")throw new Zg(n.constructor.name);s.addIssue=f=>{if(typeof f=="string")s.issues.push(nl(f,s.value,a));else{const d=f;d.fatal&&(d.continue=!1),d.code??(d.code="custom"),d.input??(d.input=s.value),d.inst??(d.inst=n),s.issues.push(nl(d))}};const o=a.transform(s.value,s);return o instanceof Promise?o.then(f=>(s.value=f,s.fallback=!0,s)):(s.value=o,s.fallback=!0,s)}});function AO(n){return new RO({type:"transform",transform:n})}const rv=G("ZodOptional",(n,a)=>{Fg.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>nv(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function qy(n){return new rv({type:"optional",innerType:n})}const CO=G("ZodExactOptional",(n,a)=>{mE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>nv(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function DO(n){return new CO({type:"optional",innerType:n})}const MO=G("ZodNullable",(n,a)=>{yE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>A2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function Qy(n){return new MO({type:"nullable",innerType:n})}const uv=G("ZodDefault",(n,a)=>{gE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>D2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function jO(n,a){return new uv({type:"default",innerType:n,get defaultValue(){return typeof a=="function"?a():Hg(a)}})}const NO=G("ZodPrefault",(n,a)=>{vE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>M2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function UO(n,a){return new NO({type:"prefault",innerType:n,get defaultValue(){return typeof a=="function"?a():Hg(a)}})}const ov=G("ZodNonOptional",(n,a)=>{bE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>C2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function LO(n,a){return new ov({type:"nonoptional",innerType:n,...le(a)})}const ZO=G("ZodCatch",(n,a)=>{SE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>j2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function kO(n,a){return new ZO({type:"catch",innerType:n,catchValue:typeof a=="function"?a:()=>a})}const BO=G("ZodPipe",(n,a)=>{_E.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>N2(n,s,r,o),n.in=a.in,n.out=a.out});function Gy(n,a){return new BO({type:"pipe",in:n,out:a})}const HO=G("ZodReadonly",(n,a)=>{zE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>U2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function qO(n){return new HO({type:"readonly",innerType:n})}const QO=G("ZodCustom",(n,a)=>{EE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>z2(n,s)});function GO(n,a={}){return d2(QO,n,a)}function YO(n,a){return h2(n,a)}const cv=je({ogygie:La(!0).describe("Marker: lets an agent tell our errors from noise"),code:se().regex(/^[A-Z][A-Z0-9_]+$/,"SCREAMING_SNAKE_CASE, stable over time"),message:se().min(10).describe("Human-readable sentence (technical English)"),file:se().nullable().describe("Relative path of the file involved, null when not localizable"),cause:se().describe("The precise datum or condition that triggered the error"),suggestedFix:se().describe("Concrete action to fix — never empty"),details:xO(se(),nf()).default({}),timestamp:av()});class Af extends Error{payload;constructor(a){super(a.message),this.name="StudioApiError",this.payload=a}}async function il(n,a,s){const r=await fetch(n,s),o=await r.json();if(!r.ok){const f=cv.safeParse(o);throw f.success?new Af(f.data):new Error(`HTTP ${r.status} on ${n} (non-OgygieError payload)`)}return a.parse(o)}function fv(n){return{headers:{"content-type":"application/json"},body:JSON.stringify(n)}}const sn=se().regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"kebab-case required"),dv=se().regex(/^package:[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"expected package:<kebab-case-name>"),$O=je({method:Un(["GET","POST","PUT","PATCH","DELETE"]),path:se().startsWith("/api/"),description:se().min(10),schemaInput:se().describe("Exported name of the input Zod schema, e.g. CreateOrderInputSchema"),schemaOutput:se().describe("Exported name of the output Zod schema"),invalidates:et(se()).optional().describe("Cache roots this mutation stales BEYOND its own path root (cross-feature dependency, read by the manifest-derived client — never guessed in a screen). Each value must be an existing feature name or route root")}),VO=Un(["reference","ownerless"]),KO=cu([se(),je({name:se(),shared:La(!0),sharedKind:VO.optional()})]),XO=je({name:sn,intent:se().min(20).max(300).describe("The feature's 'why' in 1-3 sentences"),app:se().optional().describe("Name of the owning app (apps[].name); defaults to the api app"),folder:se().describe("Path relative to the app root, e.g. src/features/orders"),spec:se().nullable().describe("Path to the spec, e.g. specs/orders.spec.md, null for technical features"),routes:et($O),dbTables:et(KO).describe("Drizzle tables owned by this feature (one table = one owner). String = tenant-scoped; { name, shared: true } = shared referential"),dependsOn:et(cu([sn,dv])).describe("Features imported through their index.ts, and product packages as package:<name> — nothing else"),status:Un(["skeleton","in-progress","delivered"])}),JO=se().regex(/^\d+\.\d+\.\d+$/,"expected a plain x.y.z version"),FO=je({packages:et(je({name:se().describe("Published npm name, e.g. @ogygie/core"),path:se().describe("Folder relative to the repo root"),intent:se().min(20),spec:se().nullable(),status:Un(["skeleton","in-progress","delivered"])})),templates:je({project:se().describe("Folder copied by `ogygie init`"),feature:se().describe("Reserved for `ogygie generate feature` (not wired yet)")}),governedFiles:se().describe("Module declaring the exhaustive list of files `upgrade` may overwrite (D3)")}),PO=je({canonical:se().regex(/^[a-z][a-zA-Z0-9]*$/,"camelCase English term required").describe("The one machine term for this concept, e.g. gadget"),forbiddenAliases:et(se().min(2).regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"lowercase root (kebab-case allowed) required")).min(1).describe("Roots the code may never carry for this concept, e.g. widget"),reference:se().optional().describe("Anchor into AGENTS.product.md where the concept is explained")}),IO=je({entries:et(PO)}),WO=je({name:sn,path:se().describe("Folder relative to the repo root, e.g. packages/solver"),intent:se().min(20).max(300).describe("The package's 'why' in 1-3 sentences"),spec:se().nullable(),dependsOn:et(dv).describe("Other PRODUCT packages, as package:<name> — never a feature: a package that depended on one would live under an app, and would be a feature"),status:Un(["skeleton","in-progress","delivered"])}),eT=je({column:se().min(1).describe("SQL name of the tenant column, e.g. workspace_id — the one AGENTS.product.md announces"),rawDbAllowed:et(sn).default([]).describe("Features allowed to reach the raw database: the tenancy socle, which BUILDS the contexts and therefore predates them. Every other feature goes through tenantDb")}),tT=je({version:La(1),product:je({name:se(),description:se().min(20)}),ogygieVersion:JO.optional(),framework:FO.optional(),apps:et(je({name:se(),path:se(),type:Un(["api","front","gateway"]),entryPoint:se(),vendored:La(!0).optional()})),features:et(XO),tenancy:eT.optional().describe("Product values the framework gates need — absent, the tenancy checks do not run"),packages:et(WO).optional().describe("Product code living outside every app — libraries, engines. Absent = the project has none"),vocabulary:IO.optional().describe("The product's closed vocabulary — declared here, enforced by `ogygie verify-vocabulary`. Absent = gate silent"),conventions:je({agentsMd:La("AGENTS.md"),failuresMd:La("FAILURES.md"),specsFolder:La("specs/")})}).superRefine((n,a)=>{const s=new Set(n.features.map(g=>g.name)),r=new Set;(n.packages??[]).forEach((g,S)=>{s.has(g.name)&&a.addIssue({code:"custom",path:["packages",S,"name"],message:`"${g.name}" is already the name of a feature — one name designates one thing`}),r.has(g.name)&&a.addIssue({code:"custom",path:["packages",S,"name"],message:`package "${g.name}" is declared twice`}),r.add(g.name)});const o=g=>(g.split("/").pop()??g).replace(/\.spec\.md$/,""),f=new Set([...n.features.map(g=>g.name),...r]);(n.framework?.packages??[]).forEach((g,S)=>{if(g.spec===null)return;const _=o(g.spec);f.has(_)&&a.addIssue({code:"custom",path:["framework","packages",S,"spec"],message:`spec "${_}" is already owned by a feature or a product package — one spec, one owner`})});const d=(g,S)=>{g.forEach((_,z)=>{if(!_.startsWith("package:"))return;const O=_.slice(8);r.has(O)||a.addIssue({code:"custom",path:[...S,z],message:`dependency "${_}" matches no declared package`})})};n.features.forEach((g,S)=>{d(g.dependsOn,["features",S,"dependsOn"])}),(n.packages??[]).forEach((g,S)=>{d(g.dependsOn,["packages",S,"dependsOn"])}),(n.tenancy?.rawDbAllowed??[]).forEach((g,S)=>{s.has(g)||a.addIssue({code:"custom",path:["tenancy","rawDbAllowed",S],message:`"${g}" matches no declared feature`})});const h=new Map,m=new Map;(n.vocabulary?.entries??[]).forEach((g,S)=>{const _=g.canonical.toLowerCase(),z=h.get(_);z!==void 0?a.addIssue({code:"custom",path:["vocabulary","entries",S,"canonical"],message:`canonical "${g.canonical}" is already declared by entry ${z}`}):h.set(_,S)}),(n.vocabulary?.entries??[]).forEach((g,S)=>{g.forbiddenAliases.forEach((_,z)=>{const O=["vocabulary","entries",S,"forbiddenAliases",z],A=h.get(_);if(A!==void 0){a.addIssue({code:"custom",path:O,message:`alias "${_}" is the canonical term of entry ${A} — a term cannot be both`});return}const j=m.get(_);if(j!==void 0){a.addIssue({code:"custom",path:O,message:`alias "${_}" is already forbidden by entry ${j} — one alias belongs to one concept`});return}m.set(_,S)})});const p=new Map(n.apps.map(g=>[g.name,g])),v=new Set(n.features.map(g=>g.name));for(const g of n.features)for(const S of g.routes){const _=S.path.split("/")[2];_!==void 0&&v.add(_)}n.features.forEach((g,S)=>{g.routes.forEach((_,z)=>{for(const O of _.invalidates??[])v.has(O)||a.addIssue({code:"custom",path:["features",S,"routes",z,"invalidates"],message:`invalidates target "${O}" matches no feature name and no route root`})})}),n.features.forEach((g,S)=>{if(g.app===void 0)return;const _=p.get(g.app);if(_===void 0){a.addIssue({code:"custom",path:["features",S,"app"],message:`app "${g.app}" is not declared in apps[]`});return}_.type!=="api"&&(g.routes.length>0||g.dbTables.length>0)&&a.addIssue({code:"custom",path:["features",S],message:"a non-api feature owns no HTTP routes and no DB tables — declare them on the api feature"})})}),nT=se().regex(/^.+ blockedBy:[a-z][a-z0-9]*(-[a-z0-9]+)*$/,'Expected "<behavior> blockedBy:<feature-name>" (feature name in kebab-case)'),Ki=je({id:sn.describe("Identical to the feature name in the manifest"),status:Un(["draft","validated","implemented"]),depends_on:et(sn),priority:Un(["P0","P1","P2"]),refs:et(se()).default([]).describe("References to the domain model, e.g. 'modele-gally §4.2'"),deferred:et(nT).default([]).describe("Behaviors deferred to a later feature (DECISIONS.md D13)")}),aT=Ki.shape.status,Cf=je({id:sn,status:aT,priority:Ki.shape.priority,depends_on:et(sn),filePath:se(),presentSections:et(se())}),iT=je({id:se(),filePath:se(),error:cv}),sT=cu([Cf,iT]),lT=je({specs:et(sT)});je({specId:sn});const rT=je({frontmatter:Ki,body:se(),presentSections:et(se())});je({frontmatter:Ki,body:se().max(2e5).optional()});const uT=je({spec:Cf});je({id:sn.max(80)});const oT=je({spec:Cf}),cT=je({manifest:tT});function fT(){return of({queryKey:["specs"],queryFn:()=>il("/api/specs",lT)})}function dT(n){return of({queryKey:["specs",n],queryFn:()=>il(`/api/specs/${n}`,rT)})}function hT(){return of({queryKey:["manifest"],queryFn:()=>il("/api/manifest",cT)})}function pT(n){const a=eu();return ng({mutationFn:s=>il(`/api/specs/${n}`,uT,{method:"PUT",...fv(s)}),onSuccess:async()=>{await a.invalidateQueries({queryKey:["specs"]})}})}function mT(){const n=eu();return ng({mutationFn:a=>il("/api/specs",oT,{method:"POST",...fv(a)}),onSuccess:async()=>{await n.invalidateQueries({queryKey:["specs"]})}})}function yT({title:n,hint:a,action:s}){return w.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-dashed border-gray-300 bg-white p-10 text-center",children:[w.jsx("p",{className:"text-base font-medium text-gray-900",children:n}),a!==void 0&&w.jsx("p",{className:"text-sm text-gray-500",children:a}),s]})}function gT(n){return n instanceof Af?n.payload:null}function sl({error:n}){const a=gT(n);if(a===null){const s=n instanceof Error?n.message:String(n);return w.jsx("div",{role:"alert",className:"rounded-md border border-red-300 bg-red-50 p-4 text-sm text-red-900",children:s})}return w.jsx(hv,{error:a})}function hv({error:n}){return w.jsxs("div",{role:"alert",className:"rounded-md border border-red-300 bg-red-50 p-4 text-sm text-red-900",children:[w.jsx("p",{className:"font-mono text-xs font-bold uppercase tracking-wide",children:n.code}),w.jsx("p",{className:"mt-1 font-medium",children:n.message}),w.jsxs("dl",{className:"mt-2 space-y-1 text-xs",children:[n.file!=null&&w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Fichier"}),w.jsx("dd",{className:"font-mono",children:n.file})]}),w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Cause"}),w.jsx("dd",{className:"font-mono break-all",children:n.cause})]}),w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Correction suggérée"}),w.jsx("dd",{children:n.suggestedFix})]})]})]})}function pv({open:n,title:a,children:s,onClose:r}){return n?w.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-gray-900/40 p-4",children:w.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":a,className:"w-full max-w-md rounded-lg bg-white p-5 shadow-xl",children:[w.jsxs("div",{className:"flex items-start justify-between gap-4",children:[w.jsx("h2",{className:"text-base font-semibold text-gray-900",children:a}),w.jsx("button",{type:"button",onClick:r,className:"rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600","aria-label":"Fermer",children:"✕"})]}),w.jsx("div",{className:"mt-3",children:s})]})}):null}const vT=[{status:"draft",title:"Draft",accent:"border-t-amber-400"},{status:"validated",title:"Validated",accent:"border-t-emerald-500"},{status:"implemented",title:"Implemented",accent:"border-t-sky-500"}];function Yy(n){return!("error"in n)}function bT(){const{data:n,isPending:a,error:s}=fT();if(s)return w.jsx(sl,{error:s});if(a)return w.jsx(_T,{});const r=n.specs.filter(Yy),o=n.specs.filter(f=>!Yy(f));return n.specs.length===0?w.jsx(yT,{title:"Aucune spec dans ce repo",hint:"Créez la première depuis le template canonique — elle naîtra en draft.",action:w.jsx($y,{})}):w.jsxs("div",{className:"space-y-4",children:[w.jsxs("div",{className:"flex items-center justify-between",children:[w.jsx("h1",{className:"text-lg font-semibold text-gray-900",children:"Specs"}),w.jsx($y,{})]}),o.length>0&&w.jsx("section",{"aria-label":"Specs illisibles",className:"space-y-2",children:o.map(f=>w.jsx(hv,{error:f.error},f.filePath))}),w.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:vT.map(f=>w.jsx(ST,{title:f.title,accent:f.accent,specs:r.filter(d=>d.status===f.status)},f.status))})]})}function ST({title:n,accent:a,specs:s}){return w.jsxs("section",{"aria-label":`Colonne ${n}`,className:`rounded-lg border border-gray-200 border-t-4 bg-gray-50 p-3 ${a}`,children:[w.jsxs("h2",{className:"mb-3 flex items-baseline justify-between text-sm font-semibold text-gray-700",children:[n,w.jsx("span",{className:"text-xs font-normal text-gray-400",children:s.length})]}),w.jsx("ul",{className:"space-y-2",children:s.map(r=>w.jsx("li",{children:w.jsxs(Qi,{to:"/specs/$specId",params:{specId:r.id},className:"block rounded-md border border-gray-200 bg-white p-3 shadow-sm hover:border-gray-400",children:[w.jsx("p",{className:"font-mono text-sm font-medium text-gray-900",children:r.id}),w.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:[r.priority," · ",r.presentSections.length,"/6 sections",r.depends_on.length>0&&` · dépend de ${r.depends_on.join(", ")}`]})]})},r.id))})]})}function _T(){return w.jsx("div",{"aria-label":"Chargement du board",className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[0,1,2].map(n=>w.jsx("div",{className:"h-64 animate-pulse rounded-lg border border-gray-200 bg-gray-100"},n))})}function $y(){const[n,a]=W.useState(!1),[s,r]=W.useState(""),o=bf(),f=mT(),d=()=>{f.mutate({id:s},{onSuccess:async h=>{a(!1),await o({to:"/specs/$specId",params:{specId:h.spec.id}})}})};return w.jsxs(w.Fragment,{children:[w.jsx("button",{type:"button",onClick:()=>{f.reset(),r(""),a(!0)},className:"rounded-md bg-gray-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-gray-700",children:"Nouvelle spec"}),w.jsx(pv,{open:n,title:"Nouvelle spec depuis le template",onClose:()=>a(!1),children:w.jsxs("form",{onSubmit:h=>{h.preventDefault(),d()},className:"space-y-3",children:[w.jsxs("label",{className:"block text-sm text-gray-700",children:["Identifiant (kebab-case, il nomme le fichier specs/<id>.spec.md)",w.jsx("input",{value:s,onChange:h=>r(h.target.value),placeholder:"ma-nouvelle-feature",className:"mt-1 w-full rounded-md border border-gray-300 px-2 py-1.5 font-mono text-sm"})]}),f.error instanceof Af&&w.jsx(sl,{error:f.error}),w.jsxs("div",{className:"flex justify-end gap-2",children:[w.jsx("button",{type:"button",onClick:()=>a(!1),className:"rounded-md border border-gray-300 px-3 py-1.5 text-sm text-gray-700",children:"Annuler"}),w.jsx("button",{type:"submit",disabled:f.isPending||s==="",className:"rounded-md bg-gray-900 px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50",children:"Créer en draft"})]})]})})]})}function mv(n){return n instanceof uv?mv(n.def.innerType):n}function zT(){const n=Ki.shape;return Object.keys(n).map(a=>{const s=mv(n[a]);if(s instanceof Ir)return{name:a,kind:"enum",options:s.options.map(r=>String(r)),readOnly:!1};if(s instanceof lv)return{name:a,kind:"string-array",readOnly:!1};if(s instanceof sv)return{name:a,kind:"text",readOnly:a==="id"};throw new Error(`deriveFrontmatterFields: unsupported schema for "${String(a)}" — extend the derivation, never hand-describe the form`)})}function ET(n){return{id:n.id,status:n.status,depends_on:n.depends_on.join(`
|
|
72
|
+
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const d of n.seen.entries()){const h=d[1];if(a===d[0]){f(d);continue}if(n.external){const p=n.external.registry.get(d[0])?.id;if(a!==d[0]&&p){f(d);continue}}if(n.metadataRegistry.get(d[0])?.id){f(d);continue}if(h.cycle){f(d);continue}if(h.count>1&&n.reused==="ref"){f(d);continue}}}function tv(n,a){const s=n.seen.get(a);if(!s)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=h=>{const m=n.seen.get(h);if(m.ref===null)return;const p=m.def??m.schema,v={...p},g=m.ref;if(m.ref=null,g){r(g);const _=n.seen.get(g),z=_.schema;if(z.$ref&&(n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0")?(p.allOf=p.allOf??[],p.allOf.push(z)):Object.assign(p,z),Object.assign(p,v),h._zod.parent===g)for(const A in p)A==="$ref"||A==="allOf"||A in v||delete p[A];if(z.$ref&&_.def)for(const A in p)A==="$ref"||A==="allOf"||A in _.def&&JSON.stringify(p[A])===JSON.stringify(_.def[A])&&delete p[A]}const S=h._zod.parent;if(S&&S!==g){r(S);const _=n.seen.get(S);if(_?.schema.$ref&&(p.$ref=_.schema.$ref,_.def))for(const z in p)z==="$ref"||z==="allOf"||z in _.def&&JSON.stringify(p[z])===JSON.stringify(_.def[z])&&delete p[z]}n.override({zodSchema:h,jsonSchema:p,path:m.path??[]})};for(const h of[...n.seen.entries()].reverse())r(h[0]);const o={};if(n.target==="draft-2020-12"?o.$schema="https://json-schema.org/draft/2020-12/schema":n.target==="draft-07"?o.$schema="http://json-schema.org/draft-07/schema#":n.target==="draft-04"?o.$schema="http://json-schema.org/draft-04/schema#":n.target,n.external?.uri){const h=n.external.registry.get(a)?.id;if(!h)throw new Error("Schema is missing an `id` property");o.$id=n.external.uri(h)}Object.assign(o,s.def??s.schema);const f=n.metadataRegistry.get(a)?.id;f!==void 0&&o.id===f&&delete o.id;const d=n.external?.defs??{};for(const h of n.seen.entries()){const m=h[1];m.def&&m.defId&&(m.def.id===m.defId&&delete m.def.id,d[m.defId]=m.def)}n.external||Object.keys(d).length>0&&(n.target==="draft-2020-12"?o.$defs=d:o.definitions=d);try{const h=JSON.parse(JSON.stringify(o));return Object.defineProperty(h,"~standard",{value:{...a["~standard"],jsonSchema:{input:Pr(a,"input",n.processors),output:Pr(a,"output",n.processors)}},enumerable:!1,writable:!1}),h}catch{throw new Error("Error converting schema to JSON.")}}function mt(n,a){const s=a??{seen:new Set};if(s.seen.has(n))return!1;s.seen.add(n);const r=n._zod.def;if(r.type==="transform")return!0;if(r.type==="array")return mt(r.element,s);if(r.type==="set")return mt(r.valueType,s);if(r.type==="lazy")return mt(r.getter(),s);if(r.type==="promise"||r.type==="optional"||r.type==="nonoptional"||r.type==="nullable"||r.type==="readonly"||r.type==="default"||r.type==="prefault")return mt(r.innerType,s);if(r.type==="intersection")return mt(r.left,s)||mt(r.right,s);if(r.type==="record"||r.type==="map")return mt(r.keyType,s)||mt(r.valueType,s);if(r.type==="pipe")return n._zod.traits.has("$ZodCodec")?!0:mt(r.in,s)||mt(r.out,s);if(r.type==="object"){for(const o in r.shape)if(mt(r.shape[o],s))return!0;return!1}if(r.type==="union"){for(const o of r.options)if(mt(o,s))return!0;return!1}if(r.type==="tuple"){for(const o of r.items)if(mt(o,s))return!0;return!!(r.rest&&mt(r.rest,s))}return!1}const m2=(n,a={})=>s=>{const r=Wg({...s,processors:a});return We(n,r),ev(r,n),tv(r,n)},Pr=(n,a,s={})=>r=>{const{libraryOptions:o,target:f}=r??{},d=Wg({...o??{},target:f,io:a,processors:s});return We(n,d),ev(d,n),tv(d,n)},y2={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},g2=(n,a,s,r)=>{const o=s;o.type="string";const{minimum:f,maximum:d,format:h,patterns:m,contentEncoding:p}=n._zod.bag;if(typeof f=="number"&&(o.minLength=f),typeof d=="number"&&(o.maxLength=d),h&&(o.format=y2[h]??h,o.format===""&&delete o.format,h==="time"&&delete o.format),p&&(o.contentEncoding=p),m&&m.size>0){const v=[...m];v.length===1?o.pattern=v[0].source:v.length>1&&(o.allOf=[...v.map(g=>({...a.target==="draft-07"||a.target==="draft-04"||a.target==="openapi-3.0"?{type:"string"}:{},pattern:g.source}))])}},v2=(n,a,s,r)=>{s.not={}},b2=(n,a,s,r)=>{},S2=(n,a,s,r)=>{const o=n._zod.def,f=kg(o.entries);f.every(d=>typeof d=="number")&&(s.type="number"),f.every(d=>typeof d=="string")&&(s.type="string"),s.enum=f},_2=(n,a,s,r)=>{const o=n._zod.def,f=[];for(const d of o.values)if(d===void 0){if(a.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof d=="bigint"){if(a.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");f.push(Number(d))}else f.push(d);if(f.length!==0)if(f.length===1){const d=f[0];s.type=d===null?"null":typeof d,a.target==="draft-04"||a.target==="openapi-3.0"?s.enum=[d]:s.const=d}else f.every(d=>typeof d=="number")&&(s.type="number"),f.every(d=>typeof d=="string")&&(s.type="string"),f.every(d=>typeof d=="boolean")&&(s.type="boolean"),f.every(d=>d===null)&&(s.type="null"),s.enum=f},z2=(n,a,s,r)=>{if(a.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},E2=(n,a,s,r)=>{if(a.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},O2=(n,a,s,r)=>{const o=s,f=n._zod.def,{minimum:d,maximum:h}=n._zod.bag;typeof d=="number"&&(o.minItems=d),typeof h=="number"&&(o.maxItems=h),o.type="array",o.items=We(f.element,a,{...r,path:[...r.path,"items"]})},T2=(n,a,s,r)=>{const o=s,f=n._zod.def;o.type="object",o.properties={};const d=f.shape;for(const p in d)o.properties[p]=We(d[p],a,{...r,path:[...r.path,"properties",p]});const h=new Set(Object.keys(d)),m=new Set([...h].filter(p=>{const v=f.shape[p]._zod;return a.io==="input"?v.optin===void 0:v.optout===void 0}));m.size>0&&(o.required=Array.from(m)),f.catchall?._zod.def.type==="never"?o.additionalProperties=!1:f.catchall?f.catchall&&(o.additionalProperties=We(f.catchall,a,{...r,path:[...r.path,"additionalProperties"]})):a.io==="output"&&(o.additionalProperties=!1)},x2=(n,a,s,r)=>{const o=n._zod.def,f=o.inclusive===!1,d=o.options.map((h,m)=>We(h,a,{...r,path:[...r.path,f?"oneOf":"anyOf",m]}));f?s.oneOf=d:s.anyOf=d},w2=(n,a,s,r)=>{const o=n._zod.def,f=We(o.left,a,{...r,path:[...r.path,"allOf",0]}),d=We(o.right,a,{...r,path:[...r.path,"allOf",1]}),h=p=>"allOf"in p&&Object.keys(p).length===1,m=[...h(f)?f.allOf:[f],...h(d)?d.allOf:[d]];s.allOf=m},R2=(n,a,s,r)=>{const o=s,f=n._zod.def;o.type="object";const d=f.keyType,m=d._zod.bag?.patterns;if(f.mode==="loose"&&m&&m.size>0){const v=We(f.valueType,a,{...r,path:[...r.path,"patternProperties","*"]});o.patternProperties={};for(const g of m)o.patternProperties[g.source]=v}else(a.target==="draft-07"||a.target==="draft-2020-12")&&(o.propertyNames=We(f.keyType,a,{...r,path:[...r.path,"propertyNames"]})),o.additionalProperties=We(f.valueType,a,{...r,path:[...r.path,"additionalProperties"]});const p=d._zod.values;if(p){const v=[...p].filter(g=>typeof g=="string"||typeof g=="number");v.length>0&&(o.required=v)}},A2=(n,a,s,r)=>{const o=n._zod.def,f=We(o.innerType,a,r),d=a.seen.get(n);a.target==="openapi-3.0"?(d.ref=o.innerType,s.nullable=!0):s.anyOf=[f,{type:"null"}]},C2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType},D2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,s.default=JSON.parse(JSON.stringify(o.defaultValue))},M2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,a.io==="input"&&(s._prefault=JSON.parse(JSON.stringify(o.defaultValue)))},j2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType;let d;try{d=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}s.default=d},N2=(n,a,s,r)=>{const o=n._zod.def,f=o.in._zod.traits.has("$ZodTransform"),d=a.io==="input"?f?o.out:o.in:o.out;We(d,a,r);const h=a.seen.get(n);h.ref=d},U2=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType,s.readOnly=!0},nv=(n,a,s,r)=>{const o=n._zod.def;We(o.innerType,a,r);const f=a.seen.get(n);f.ref=o.innerType},L2=G("ZodISODateTime",(n,a)=>{Yz.init(n,a),qe.init(n,a)});function av(n){return XE(L2,n)}const Z2=G("ZodISODate",(n,a)=>{$z.init(n,a),qe.init(n,a)});function k2(n){return JE(Z2,n)}const B2=G("ZodISOTime",(n,a)=>{Vz.init(n,a),qe.init(n,a)});function H2(n){return FE(B2,n)}const q2=G("ZodISODuration",(n,a)=>{Kz.init(n,a),qe.init(n,a)});function Q2(n){return PE(q2,n)}const G2=(n,a)=>{Qg.init(n,a),n.name="ZodError",Object.defineProperties(n,{format:{value:s=>B1(n,s)},flatten:{value:s=>k1(n,s)},addIssue:{value:s=>{n.issues.push(s),n.message=JSON.stringify(n.issues,ef,2)}},addIssues:{value:s=>{n.issues.push(...s),n.message=JSON.stringify(n.issues,ef,2)}},isEmpty:{get(){return n.issues.length===0}}})},Vt=G("ZodError",G2,{Parent:Error}),Y2=xf(Vt),$2=wf(Vt),V2=lu(Vt),K2=ru(Vt),X2=Q1(Vt),J2=G1(Vt),F2=Y1(Vt),P2=$1(Vt),I2=V1(Vt),W2=K1(Vt),eO=X1(Vt),tO=J1(Vt),ky=new WeakMap;function ou(n,a,s){const r=Object.getPrototypeOf(n);let o=ky.get(r);if(o||(o=new Set,ky.set(r,o)),!o.has(a)){o.add(a);for(const f in s){const d=s[f];Object.defineProperty(r,f,{configurable:!0,enumerable:!1,get(){const h=d.bind(this);return Object.defineProperty(this,f,{configurable:!0,writable:!0,enumerable:!0,value:h}),h},set(h){Object.defineProperty(this,f,{configurable:!0,writable:!0,enumerable:!0,value:h})}})}}}const Xe=G("ZodType",(n,a)=>(Ke.init(n,a),Object.assign(n["~standard"],{jsonSchema:{input:Pr(n,"input"),output:Pr(n,"output")}}),n.toJSONSchema=m2(n,{}),n.def=a,n.type=a.type,Object.defineProperty(n,"_def",{value:a}),n.parse=(s,r)=>Y2(n,s,r,{callee:n.parse}),n.safeParse=(s,r)=>V2(n,s,r),n.parseAsync=async(s,r)=>$2(n,s,r,{callee:n.parseAsync}),n.safeParseAsync=async(s,r)=>K2(n,s,r),n.spa=n.safeParseAsync,n.encode=(s,r)=>X2(n,s,r),n.decode=(s,r)=>J2(n,s,r),n.encodeAsync=async(s,r)=>F2(n,s,r),n.decodeAsync=async(s,r)=>P2(n,s,r),n.safeEncode=(s,r)=>I2(n,s,r),n.safeDecode=(s,r)=>W2(n,s,r),n.safeEncodeAsync=async(s,r)=>eO(n,s,r),n.safeDecodeAsync=async(s,r)=>tO(n,s,r),ou(n,"ZodType",{check(...s){const r=this.def;return this.clone(ha(r,{checks:[...r.checks??[],...s.map(o=>typeof o=="function"?{_zod:{check:o,def:{check:"custom"},onattach:[]}}:o)]}),{parent:!0})},with(...s){return this.check(...s)},clone(s,r){return pa(this,s,r)},brand(){return this},register(s,r){return s.add(this,r),this},refine(s,r){return this.check(GO(s,r))},superRefine(s,r){return this.check(YO(s,r))},overwrite(s){return this.check(Vi(s))},optional(){return qy(this)},exactOptional(){return DO(this)},nullable(){return Qy(this)},nullish(){return qy(Qy(this))},nonoptional(s){return LO(this,s)},array(){return et(this)},or(s){return cu([this,s])},and(s){return TO(this,s)},transform(s){return Gy(this,AO(s))},default(s){return jO(this,s)},prefault(s){return UO(this,s)},catch(s){return kO(this,s)},pipe(s){return Gy(this,s)},readonly(){return qO(this)},describe(s){const r=this.clone();return Js.add(r,{description:s}),r},meta(...s){if(s.length===0)return Js.get(this);const r=this.clone();return Js.add(r,s[0]),r},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(s){return s(this)}}),Object.defineProperty(n,"description",{get(){return Js.get(n)?.description},configurable:!0}),n)),iv=G("_ZodString",(n,a)=>{Rf.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(r,o,f)=>g2(n,r,o);const s=n._zod.bag;n.format=s.format??null,n.minLength=s.minimum??null,n.maxLength=s.maximum??null,ou(n,"_ZodString",{regex(...r){return this.check(e2(...r))},includes(...r){return this.check(a2(...r))},startsWith(...r){return this.check(i2(...r))},endsWith(...r){return this.check(s2(...r))},min(...r){return this.check(Fr(...r))},max(...r){return this.check(Pg(...r))},length(...r){return this.check(Ig(...r))},nonempty(...r){return this.check(Fr(1,...r))},lowercase(r){return this.check(t2(r))},uppercase(r){return this.check(n2(r))},trim(){return this.check(r2())},normalize(...r){return this.check(l2(...r))},toLowerCase(){return this.check(u2())},toUpperCase(){return this.check(o2())},slugify(){return this.check(c2())}})}),sv=G("ZodString",(n,a)=>{Rf.init(n,a),iv.init(n,a),n.email=s=>n.check(wE(nO,s)),n.url=s=>n.check(ME(aO,s)),n.jwt=s=>n.check(KE(vO,s)),n.emoji=s=>n.check(jE(iO,s)),n.guid=s=>n.check(Zy(By,s)),n.uuid=s=>n.check(RE(Mr,s)),n.uuidv4=s=>n.check(AE(Mr,s)),n.uuidv6=s=>n.check(CE(Mr,s)),n.uuidv7=s=>n.check(DE(Mr,s)),n.nanoid=s=>n.check(NE(sO,s)),n.guid=s=>n.check(Zy(By,s)),n.cuid=s=>n.check(UE(lO,s)),n.cuid2=s=>n.check(LE(rO,s)),n.ulid=s=>n.check(ZE(uO,s)),n.base64=s=>n.check(YE(mO,s)),n.base64url=s=>n.check($E(yO,s)),n.xid=s=>n.check(kE(oO,s)),n.ksuid=s=>n.check(BE(cO,s)),n.ipv4=s=>n.check(HE(fO,s)),n.ipv6=s=>n.check(qE(dO,s)),n.cidrv4=s=>n.check(QE(hO,s)),n.cidrv6=s=>n.check(GE(pO,s)),n.e164=s=>n.check(VE(gO,s)),n.datetime=s=>n.check(av(s)),n.date=s=>n.check(k2(s)),n.time=s=>n.check(H2(s)),n.duration=s=>n.check(Q2(s))});function se(n){return xE(sv,n)}const qe=G("ZodStringFormat",(n,a)=>{Be.init(n,a),iv.init(n,a)}),nO=G("ZodEmail",(n,a)=>{Uz.init(n,a),qe.init(n,a)}),By=G("ZodGUID",(n,a)=>{jz.init(n,a),qe.init(n,a)}),Mr=G("ZodUUID",(n,a)=>{Nz.init(n,a),qe.init(n,a)}),aO=G("ZodURL",(n,a)=>{Lz.init(n,a),qe.init(n,a)}),iO=G("ZodEmoji",(n,a)=>{Zz.init(n,a),qe.init(n,a)}),sO=G("ZodNanoID",(n,a)=>{kz.init(n,a),qe.init(n,a)}),lO=G("ZodCUID",(n,a)=>{Bz.init(n,a),qe.init(n,a)}),rO=G("ZodCUID2",(n,a)=>{Hz.init(n,a),qe.init(n,a)}),uO=G("ZodULID",(n,a)=>{qz.init(n,a),qe.init(n,a)}),oO=G("ZodXID",(n,a)=>{Qz.init(n,a),qe.init(n,a)}),cO=G("ZodKSUID",(n,a)=>{Gz.init(n,a),qe.init(n,a)}),fO=G("ZodIPv4",(n,a)=>{Xz.init(n,a),qe.init(n,a)}),dO=G("ZodIPv6",(n,a)=>{Jz.init(n,a),qe.init(n,a)}),hO=G("ZodCIDRv4",(n,a)=>{Fz.init(n,a),qe.init(n,a)}),pO=G("ZodCIDRv6",(n,a)=>{Pz.init(n,a),qe.init(n,a)}),mO=G("ZodBase64",(n,a)=>{Iz.init(n,a),qe.init(n,a)}),yO=G("ZodBase64URL",(n,a)=>{eE.init(n,a),qe.init(n,a)}),gO=G("ZodE164",(n,a)=>{tE.init(n,a),qe.init(n,a)}),vO=G("ZodJWT",(n,a)=>{aE.init(n,a),qe.init(n,a)}),bO=G("ZodUnknown",(n,a)=>{iE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>b2()});function nf(){return IE(bO)}const SO=G("ZodNever",(n,a)=>{sE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>v2(n,s,r)});function _O(n){return WE(SO,n)}const lv=G("ZodArray",(n,a)=>{lE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>O2(n,s,r,o),n.element=a.element,ou(n,"ZodArray",{min(s,r){return this.check(Fr(s,r))},nonempty(s){return this.check(Fr(1,s))},max(s,r){return this.check(Pg(s,r))},length(s,r){return this.check(Ig(s,r))},unwrap(){return this.element}})});function et(n,a){return f2(lv,n,a)}const zO=G("ZodObject",(n,a)=>{uE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>T2(n,s,r,o),De(n,"shape",()=>a.shape),ou(n,"ZodObject",{keyof(){return Un(Object.keys(this._zod.def.shape))},catchall(s){return this.clone({...this._zod.def,catchall:s})},passthrough(){return this.clone({...this._zod.def,catchall:nf()})},loose(){return this.clone({...this._zod.def,catchall:nf()})},strict(){return this.clone({...this._zod.def,catchall:_O()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(s){return M1(this,s)},safeExtend(s){return j1(this,s)},merge(s){return N1(this,s)},pick(s){return C1(this,s)},omit(s){return D1(this,s)},partial(...s){return U1(rv,this,s[0])},required(...s){return L1(ov,this,s[0])}})});function je(n,a){const s={type:"object",shape:n??{},...le(a)};return new zO(s)}const EO=G("ZodUnion",(n,a)=>{oE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>x2(n,s,r,o),n.options=a.options});function cu(n,a){return new EO({type:"union",options:n,...le(a)})}const OO=G("ZodIntersection",(n,a)=>{cE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>w2(n,s,r,o)});function TO(n,a){return new OO({type:"intersection",left:n,right:a})}const Hy=G("ZodRecord",(n,a)=>{fE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>R2(n,s,r,o),n.keyType=a.keyType,n.valueType=a.valueType});function xO(n,a,s){return!a||!a._zod?new Hy({type:"record",keyType:se(),valueType:n,...le(a)}):new Hy({type:"record",keyType:n,valueType:a,...le(s)})}const Ir=G("ZodEnum",(n,a)=>{dE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(r,o,f)=>S2(n,r,o),n.enum=a.entries,n.options=Object.values(a.entries);const s=new Set(Object.keys(a.entries));n.extract=(r,o)=>{const f={};for(const d of r)if(s.has(d))f[d]=a.entries[d];else throw new Error(`Key ${d} not found in enum`);return new Ir({...a,checks:[],...le(o),entries:f})},n.exclude=(r,o)=>{const f={...a.entries};for(const d of r)if(s.has(d))delete f[d];else throw new Error(`Key ${d} not found in enum`);return new Ir({...a,checks:[],...le(o),entries:f})}});function Un(n,a){const s=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new Ir({type:"enum",entries:s,...le(a)})}const wO=G("ZodLiteral",(n,a)=>{hE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>_2(n,s,r),n.values=new Set(a.values),Object.defineProperty(n,"value",{get(){if(a.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return a.values[0]}})});function La(n,a){return new wO({type:"literal",values:Array.isArray(n)?n:[n],...le(a)})}const RO=G("ZodTransform",(n,a)=>{pE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>E2(n,s),n._zod.parse=(s,r)=>{if(r.direction==="backward")throw new Zg(n.constructor.name);s.addIssue=f=>{if(typeof f=="string")s.issues.push(nl(f,s.value,a));else{const d=f;d.fatal&&(d.continue=!1),d.code??(d.code="custom"),d.input??(d.input=s.value),d.inst??(d.inst=n),s.issues.push(nl(d))}};const o=a.transform(s.value,s);return o instanceof Promise?o.then(f=>(s.value=f,s.fallback=!0,s)):(s.value=o,s.fallback=!0,s)}});function AO(n){return new RO({type:"transform",transform:n})}const rv=G("ZodOptional",(n,a)=>{Fg.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>nv(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function qy(n){return new rv({type:"optional",innerType:n})}const CO=G("ZodExactOptional",(n,a)=>{mE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>nv(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function DO(n){return new CO({type:"optional",innerType:n})}const MO=G("ZodNullable",(n,a)=>{yE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>A2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function Qy(n){return new MO({type:"nullable",innerType:n})}const uv=G("ZodDefault",(n,a)=>{gE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>D2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function jO(n,a){return new uv({type:"default",innerType:n,get defaultValue(){return typeof a=="function"?a():Hg(a)}})}const NO=G("ZodPrefault",(n,a)=>{vE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>M2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function UO(n,a){return new NO({type:"prefault",innerType:n,get defaultValue(){return typeof a=="function"?a():Hg(a)}})}const ov=G("ZodNonOptional",(n,a)=>{bE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>C2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function LO(n,a){return new ov({type:"nonoptional",innerType:n,...le(a)})}const ZO=G("ZodCatch",(n,a)=>{SE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>j2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function kO(n,a){return new ZO({type:"catch",innerType:n,catchValue:typeof a=="function"?a:()=>a})}const BO=G("ZodPipe",(n,a)=>{_E.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>N2(n,s,r,o),n.in=a.in,n.out=a.out});function Gy(n,a){return new BO({type:"pipe",in:n,out:a})}const HO=G("ZodReadonly",(n,a)=>{zE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>U2(n,s,r,o),n.unwrap=()=>n._zod.def.innerType});function qO(n){return new HO({type:"readonly",innerType:n})}const QO=G("ZodCustom",(n,a)=>{EE.init(n,a),Xe.init(n,a),n._zod.processJSONSchema=(s,r,o)=>z2(n,s)});function GO(n,a={}){return d2(QO,n,a)}function YO(n,a){return h2(n,a)}const cv=je({ogygie:La(!0).describe("Marker: lets an agent tell our errors from noise"),code:se().regex(/^[A-Z][A-Z0-9_]+$/,"SCREAMING_SNAKE_CASE, stable over time"),message:se().min(10).describe("Human-readable sentence (technical English)"),file:se().nullable().describe("Relative path of the file involved, null when not localizable"),cause:se().describe("The precise datum or condition that triggered the error"),suggestedFix:se().describe("Concrete action to fix — never empty"),details:xO(se(),nf()).default({}),timestamp:av()});class Af extends Error{payload;constructor(a){super(a.message),this.name="StudioApiError",this.payload=a}}async function il(n,a,s){const r=await fetch(n,s),o=await r.json();if(!r.ok){const f=cv.safeParse(o);throw f.success?new Af(f.data):new Error(`HTTP ${r.status} on ${n} (non-OgygieError payload)`)}return a.parse(o)}function fv(n){return{headers:{"content-type":"application/json"},body:JSON.stringify(n)}}const sn=se().regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"kebab-case required"),dv=se().regex(/^package:[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"expected package:<kebab-case-name>"),$O=je({method:Un(["GET","POST","PUT","PATCH","DELETE"]),path:se().startsWith("/api/"),description:se().min(10),schemaInput:se().describe("Exported name of the input Zod schema, e.g. CreateOrderInputSchema"),schemaOutput:se().describe("Exported name of the output Zod schema"),invalidates:et(se()).optional().describe("Cache roots this mutation stales BEYOND its own path root (cross-feature dependency, read by the manifest-derived client — never guessed in a screen). Each value must be an existing feature name or route root")}),VO=Un(["reference","ownerless"]),KO=cu([se(),je({name:se(),shared:La(!0),sharedKind:VO.optional()})]),XO=je({name:sn,intent:se().min(20).max(300).describe("The feature's 'why' in 1-3 sentences"),app:se().optional().describe("Name of the owning app (apps[].name); defaults to the api app"),folder:se().describe("Path relative to the app root, e.g. src/features/orders"),spec:se().nullable().describe("Path to the spec, e.g. specs/orders.spec.md, null for technical features"),routes:et($O),dbTables:et(KO).describe("Drizzle tables owned by this feature (one table = one owner). String = tenant-scoped; { name, shared: true } = shared referential"),dependsOn:et(cu([sn,dv])).describe("Features imported through their index.ts, and product packages as package:<name> — nothing else"),status:Un(["skeleton","in-progress","delivered"])}),JO=se().regex(/^\d+\.\d+\.\d+$/,"expected a plain x.y.z version"),FO=je({packages:et(je({name:se().describe("Published npm name, e.g. @ogygie/core"),path:se().describe("Folder relative to the repo root"),intent:se().min(20),spec:se().nullable(),status:Un(["skeleton","in-progress","delivered"])})),templates:je({project:se().describe("Folder copied by `ogygie init`"),feature:se().describe("Reserved for `ogygie generate feature` (not wired yet)")}),governedFiles:se().describe("Module declaring the exhaustive list of files `upgrade` may overwrite (D3)")}),PO=je({canonical:se().regex(/^[a-z][a-zA-Z0-9]*$/,"camelCase English term required").describe("The one machine term for this concept, e.g. gadget"),forbiddenAliases:et(se().min(2).regex(/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/,"lowercase root (kebab-case allowed) required")).min(1).describe("Roots the code may never carry for this concept, e.g. widget"),reference:se().optional().describe("Anchor into AGENTS.product.md where the concept is explained")}),IO=je({entries:et(PO)}),WO=je({name:sn,path:se().describe("Folder relative to the repo root, e.g. packages/solver"),intent:se().min(20).max(300).describe("The package's 'why' in 1-3 sentences"),spec:se().nullable(),dependsOn:et(dv).describe("Other PRODUCT packages, as package:<name> — never a feature: a package that depended on one would live under an app, and would be a feature"),status:Un(["skeleton","in-progress","delivered"])}),eT=je({column:se().min(1).describe("SQL name of the tenant column, e.g. workspace_id — the one AGENTS.product.md announces"),rawDbAllowed:et(sn).default([]).describe("Features allowed to reach the raw database: the tenancy socle, which BUILDS the contexts and therefore predates them. Every other feature goes through tenantDb")}),tT=je({version:La(1),product:je({name:se(),description:se().min(20)}),ogygieVersion:JO.optional(),framework:FO.optional(),apps:et(je({name:se(),path:se(),type:Un(["api","front","gateway"]),entryPoint:se(),vendored:La(!0).optional()})),features:et(XO),tenancy:eT.optional().describe("Product values the framework gates need — absent, the tenancy checks do not run"),packages:et(WO).optional().describe("Product code living outside every app — libraries, engines. Absent = the project has none"),vocabulary:IO.optional().describe("The product's closed vocabulary — declared here, enforced by `ogygie verify-vocabulary`. Absent = gate silent"),conventions:je({agentsMd:La("AGENTS.md"),failuresMd:La("FAILURES.md"),specsFolder:La("specs/")})}).superRefine((n,a)=>{const s=new Set(n.features.map(g=>g.name)),r=new Set;(n.packages??[]).forEach((g,S)=>{s.has(g.name)&&a.addIssue({code:"custom",path:["packages",S,"name"],message:`"${g.name}" is already the name of a feature — one name designates one thing`}),r.has(g.name)&&a.addIssue({code:"custom",path:["packages",S,"name"],message:`package "${g.name}" is declared twice`}),r.add(g.name)});const o=g=>(g.split("/").pop()??g).replace(/\.spec\.md$/,""),f=new Set([...n.features.map(g=>g.name),...r]);(n.framework?.packages??[]).forEach((g,S)=>{if(g.spec===null)return;const _=o(g.spec);f.has(_)&&a.addIssue({code:"custom",path:["framework","packages",S,"spec"],message:`spec "${_}" is already owned by a feature or a product package — one spec, one owner`})});const d=(g,S)=>{g.forEach((_,z)=>{if(!_.startsWith("package:"))return;const O=_.slice(8);r.has(O)||a.addIssue({code:"custom",path:[...S,z],message:`dependency "${_}" matches no declared package`})})};n.features.forEach((g,S)=>{d(g.dependsOn,["features",S,"dependsOn"])}),(n.packages??[]).forEach((g,S)=>{d(g.dependsOn,["packages",S,"dependsOn"])}),(n.tenancy?.rawDbAllowed??[]).forEach((g,S)=>{s.has(g)||a.addIssue({code:"custom",path:["tenancy","rawDbAllowed",S],message:`"${g}" matches no declared feature`})});const h=new Map,m=new Map;(n.vocabulary?.entries??[]).forEach((g,S)=>{const _=g.canonical.toLowerCase(),z=h.get(_);z!==void 0?a.addIssue({code:"custom",path:["vocabulary","entries",S,"canonical"],message:`canonical "${g.canonical}" is already declared by entry ${z}`}):h.set(_,S)}),(n.vocabulary?.entries??[]).forEach((g,S)=>{g.forbiddenAliases.forEach((_,z)=>{const O=["vocabulary","entries",S,"forbiddenAliases",z],A=h.get(_);if(A!==void 0){a.addIssue({code:"custom",path:O,message:`alias "${_}" is the canonical term of entry ${A} — a term cannot be both`});return}const j=m.get(_);if(j!==void 0){a.addIssue({code:"custom",path:O,message:`alias "${_}" is already forbidden by entry ${j} — one alias belongs to one concept`});return}m.set(_,S)})});const p=new Map(n.apps.map(g=>[g.name,g])),v=new Set(n.features.map(g=>g.name));for(const g of n.features)for(const S of g.routes){const _=S.path.split("/")[2];_!==void 0&&v.add(_)}n.features.forEach((g,S)=>{g.routes.forEach((_,z)=>{for(const O of _.invalidates??[])v.has(O)||a.addIssue({code:"custom",path:["features",S,"routes",z,"invalidates"],message:`invalidates target "${O}" matches no feature name and no route root`})})}),n.features.forEach((g,S)=>{if(g.app===void 0)return;const _=p.get(g.app);if(_===void 0){a.addIssue({code:"custom",path:["features",S,"app"],message:`app "${g.app}" is not declared in apps[]`});return}_.type!=="api"&&(g.routes.length>0||g.dbTables.length>0)&&a.addIssue({code:"custom",path:["features",S],message:"a non-api feature owns no HTTP routes and no DB tables — declare them on the api feature"})})}),nT=se().regex(/^.+ blockedBy:[a-z][a-z0-9]*(-[a-z0-9]+)*$/,'Expected "<behavior> blockedBy:<feature-name>" (feature name in kebab-case)'),Ki=je({id:sn.describe("Identical to the feature name in the manifest"),status:Un(["draft","validated","implemented"]),depends_on:et(sn),priority:Un(["P0","P1","P2"]),refs:et(se()).default([]).describe("References to the domain model, e.g. 'modele-gally §4.2'"),deferred:et(nT).default([]).describe("Behaviors deferred to a later feature, blocked by name")}),aT=Ki.shape.status,Cf=je({id:sn,status:aT,priority:Ki.shape.priority,depends_on:et(sn),filePath:se(),presentSections:et(se())}),iT=je({id:se(),filePath:se(),error:cv}),sT=cu([Cf,iT]),lT=je({specs:et(sT)});je({specId:sn});const rT=je({frontmatter:Ki,body:se(),presentSections:et(se())});je({frontmatter:Ki,body:se().max(2e5).optional()});const uT=je({spec:Cf});je({id:sn.max(80)});const oT=je({spec:Cf}),cT=je({manifest:tT});function fT(){return of({queryKey:["specs"],queryFn:()=>il("/api/specs",lT)})}function dT(n){return of({queryKey:["specs",n],queryFn:()=>il(`/api/specs/${n}`,rT)})}function hT(){return of({queryKey:["manifest"],queryFn:()=>il("/api/manifest",cT)})}function pT(n){const a=eu();return ng({mutationFn:s=>il(`/api/specs/${n}`,uT,{method:"PUT",...fv(s)}),onSuccess:async()=>{await a.invalidateQueries({queryKey:["specs"]})}})}function mT(){const n=eu();return ng({mutationFn:a=>il("/api/specs",oT,{method:"POST",...fv(a)}),onSuccess:async()=>{await n.invalidateQueries({queryKey:["specs"]})}})}function yT({title:n,hint:a,action:s}){return w.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-dashed border-gray-300 bg-white p-10 text-center",children:[w.jsx("p",{className:"text-base font-medium text-gray-900",children:n}),a!==void 0&&w.jsx("p",{className:"text-sm text-gray-500",children:a}),s]})}function gT(n){return n instanceof Af?n.payload:null}function sl({error:n}){const a=gT(n);if(a===null){const s=n instanceof Error?n.message:String(n);return w.jsx("div",{role:"alert",className:"rounded-md border border-red-300 bg-red-50 p-4 text-sm text-red-900",children:s})}return w.jsx(hv,{error:a})}function hv({error:n}){return w.jsxs("div",{role:"alert",className:"rounded-md border border-red-300 bg-red-50 p-4 text-sm text-red-900",children:[w.jsx("p",{className:"font-mono text-xs font-bold uppercase tracking-wide",children:n.code}),w.jsx("p",{className:"mt-1 font-medium",children:n.message}),w.jsxs("dl",{className:"mt-2 space-y-1 text-xs",children:[n.file!=null&&w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Fichier"}),w.jsx("dd",{className:"font-mono",children:n.file})]}),w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Cause"}),w.jsx("dd",{className:"font-mono break-all",children:n.cause})]}),w.jsxs("div",{className:"flex gap-2",children:[w.jsx("dt",{className:"shrink-0 font-semibold",children:"Correction suggérée"}),w.jsx("dd",{children:n.suggestedFix})]})]})]})}function pv({open:n,title:a,children:s,onClose:r}){return n?w.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-gray-900/40 p-4",children:w.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":a,className:"w-full max-w-md rounded-lg bg-white p-5 shadow-xl",children:[w.jsxs("div",{className:"flex items-start justify-between gap-4",children:[w.jsx("h2",{className:"text-base font-semibold text-gray-900",children:a}),w.jsx("button",{type:"button",onClick:r,className:"rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600","aria-label":"Fermer",children:"✕"})]}),w.jsx("div",{className:"mt-3",children:s})]})}):null}const vT=[{status:"draft",title:"Draft",accent:"border-t-amber-400"},{status:"validated",title:"Validated",accent:"border-t-emerald-500"},{status:"implemented",title:"Implemented",accent:"border-t-sky-500"}];function Yy(n){return!("error"in n)}function bT(){const{data:n,isPending:a,error:s}=fT();if(s)return w.jsx(sl,{error:s});if(a)return w.jsx(_T,{});const r=n.specs.filter(Yy),o=n.specs.filter(f=>!Yy(f));return n.specs.length===0?w.jsx(yT,{title:"Aucune spec dans ce repo",hint:"Créez la première depuis le template canonique — elle naîtra en draft.",action:w.jsx($y,{})}):w.jsxs("div",{className:"space-y-4",children:[w.jsxs("div",{className:"flex items-center justify-between",children:[w.jsx("h1",{className:"text-lg font-semibold text-gray-900",children:"Specs"}),w.jsx($y,{})]}),o.length>0&&w.jsx("section",{"aria-label":"Specs illisibles",className:"space-y-2",children:o.map(f=>w.jsx(hv,{error:f.error},f.filePath))}),w.jsx("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:vT.map(f=>w.jsx(ST,{title:f.title,accent:f.accent,specs:r.filter(d=>d.status===f.status)},f.status))})]})}function ST({title:n,accent:a,specs:s}){return w.jsxs("section",{"aria-label":`Colonne ${n}`,className:`rounded-lg border border-gray-200 border-t-4 bg-gray-50 p-3 ${a}`,children:[w.jsxs("h2",{className:"mb-3 flex items-baseline justify-between text-sm font-semibold text-gray-700",children:[n,w.jsx("span",{className:"text-xs font-normal text-gray-400",children:s.length})]}),w.jsx("ul",{className:"space-y-2",children:s.map(r=>w.jsx("li",{children:w.jsxs(Qi,{to:"/specs/$specId",params:{specId:r.id},className:"block rounded-md border border-gray-200 bg-white p-3 shadow-sm hover:border-gray-400",children:[w.jsx("p",{className:"font-mono text-sm font-medium text-gray-900",children:r.id}),w.jsxs("p",{className:"mt-1 text-xs text-gray-500",children:[r.priority," · ",r.presentSections.length,"/6 sections",r.depends_on.length>0&&` · dépend de ${r.depends_on.join(", ")}`]})]})},r.id))})]})}function _T(){return w.jsx("div",{"aria-label":"Chargement du board",className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[0,1,2].map(n=>w.jsx("div",{className:"h-64 animate-pulse rounded-lg border border-gray-200 bg-gray-100"},n))})}function $y(){const[n,a]=W.useState(!1),[s,r]=W.useState(""),o=bf(),f=mT(),d=()=>{f.mutate({id:s},{onSuccess:async h=>{a(!1),await o({to:"/specs/$specId",params:{specId:h.spec.id}})}})};return w.jsxs(w.Fragment,{children:[w.jsx("button",{type:"button",onClick:()=>{f.reset(),r(""),a(!0)},className:"rounded-md bg-gray-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-gray-700",children:"Nouvelle spec"}),w.jsx(pv,{open:n,title:"Nouvelle spec depuis le template",onClose:()=>a(!1),children:w.jsxs("form",{onSubmit:h=>{h.preventDefault(),d()},className:"space-y-3",children:[w.jsxs("label",{className:"block text-sm text-gray-700",children:["Identifiant (kebab-case, il nomme le fichier specs/<id>.spec.md)",w.jsx("input",{value:s,onChange:h=>r(h.target.value),placeholder:"ma-nouvelle-feature",className:"mt-1 w-full rounded-md border border-gray-300 px-2 py-1.5 font-mono text-sm"})]}),f.error instanceof Af&&w.jsx(sl,{error:f.error}),w.jsxs("div",{className:"flex justify-end gap-2",children:[w.jsx("button",{type:"button",onClick:()=>a(!1),className:"rounded-md border border-gray-300 px-3 py-1.5 text-sm text-gray-700",children:"Annuler"}),w.jsx("button",{type:"submit",disabled:f.isPending||s==="",className:"rounded-md bg-gray-900 px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50",children:"Créer en draft"})]})]})})]})}function mv(n){return n instanceof uv?mv(n.def.innerType):n}function zT(){const n=Ki.shape;return Object.keys(n).map(a=>{const s=mv(n[a]);if(s instanceof Ir)return{name:a,kind:"enum",options:s.options.map(r=>String(r)),readOnly:!1};if(s instanceof lv)return{name:a,kind:"string-array",readOnly:!1};if(s instanceof sv)return{name:a,kind:"text",readOnly:a==="id"};throw new Error(`deriveFrontmatterFields: unsupported schema for "${String(a)}" — extend the derivation, never hand-describe the form`)})}function ET(n){return{id:n.id,status:n.status,depends_on:n.depends_on.join(`
|
|
73
73
|
`),priority:n.priority,refs:n.refs.join(`
|
|
74
74
|
`),deferred:n.deferred.join(`
|
|
75
75
|
`)}}function Hc(n){return n.split(`
|
package/dist-ui/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>Ogygie Studio</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-s3_ESFlT.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-N5pQoBqE.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogygie/studio",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Ogygie framework dev studio: projects a repo's specs and manifest into a local UI. Ships its built UI; launched by `ogygie studio`.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@fastify/static": "^10.1.3",
|
|
21
|
-
"@ogygie/core": "0.
|
|
21
|
+
"@ogygie/core": "0.12.0",
|
|
22
22
|
"fastify": "^5.0.0",
|
|
23
23
|
"fastify-type-provider-zod": "^6.0.0",
|
|
24
24
|
"zod": "^4.0.0"
|