@nullix/zod-mongoose-studio 3.3.0 → 3.3.2
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/.output/nitro.json +1 -1
- package/.output/public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 +0 -0
- package/.output/public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 +0 -0
- package/.output/public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 +0 -0
- package/.output/public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 +0 -0
- package/.output/public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 +0 -0
- package/.output/public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 +0 -0
- package/.output/public/_nuxt/B6lqezyA.js +27 -0
- package/.output/public/_nuxt/{IxYCG8hB.js → B7ScFmDB.js} +1 -1
- package/.output/public/_nuxt/B8gqXD2U.js +1 -0
- package/.output/public/_nuxt/{ikxafTHA.js → BC9tFNFa.js} +180 -184
- package/.output/public/_nuxt/{qwxNOyg7.js → Bbi9UBvi.js} +1 -1
- package/.output/public/_nuxt/{CNZorjDf.js → BcYnCaqL.js} +1 -1
- package/.output/public/_nuxt/{BzhSDy30.js → BlZ0x31M.js} +1 -1
- package/.output/public/_nuxt/Bw82IGM8.js +1 -0
- package/.output/public/_nuxt/{qQyvCkbV.js → C8xmwXC2.js} +1 -1
- package/.output/public/_nuxt/{Ce-T_1aD.js → C919AVYR.js} +1 -1
- package/.output/public/_nuxt/{nDZOJ7rN.js → CsQL5F-l.js} +2 -2
- package/.output/public/_nuxt/Czp4_2o-.js +33 -0
- package/.output/public/_nuxt/{CC3n3Aga.js → DJa7_7Hz.js} +1 -1
- package/.output/public/_nuxt/DKK0Mrrg.js +1 -0
- package/.output/public/_nuxt/DbUZZZZu.js +6 -0
- package/.output/public/_nuxt/{B7P0wQ35.js → DbqvVYbv.js} +1 -1
- package/.output/public/_nuxt/{Ick_23I4.js → JkiDMdYG.js} +1 -1
- package/.output/public/_nuxt/{81vqh61j.js → OVQ3C2Ge.js} +1 -1
- package/.output/public/_nuxt/{Cs8GXJCB.js → PXBhK7S_.js} +1 -1
- package/.output/public/_nuxt/{CAd-qHfI.js → YC-RLggm.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/46174b5e-cab6-4a73-95f8-66a1c9b1be2b.json +1 -0
- package/.output/public/_nuxt/{tzj4nvDE.js → d1NBz903.js} +2 -2
- package/.output/public/_nuxt/{entry.J_CbC0oY.css → entry.DaqrxXuH.css} +1 -1
- package/.output/public/_nuxt/error-404.CTSXlFYa.css +1 -0
- package/.output/public/_nuxt/error-500.DqEfQnVZ.css +1 -0
- package/.output/public/_nuxt/{Bd32GOUy.js → iGzUozbF.js} +1 -1
- package/.output/public/_nuxt/{DjPT-NCE.js → iKW_mt0p.js} +1 -1
- package/.output/server/chunks/_/error-500.mjs.map +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{error-404-BN-7rNE4.mjs → error-404-KRkA0DPI.mjs} +10 -4
- package/.output/server/chunks/build/error-404-KRkA0DPI.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-styles.I0NYw-Bn.mjs +8 -0
- package/.output/server/chunks/build/error-404-styles.I0NYw-Bn.mjs.map +1 -0
- package/.output/server/chunks/build/{error-500-DhIQ-2yt.mjs → error-500-DIIFf55p.mjs} +10 -4
- package/.output/server/chunks/build/error-500-DIIFf55p.mjs.map +1 -0
- package/.output/server/chunks/build/error-500-styles.D1cs9hQy.mjs +8 -0
- package/.output/server/chunks/build/error-500-styles.D1cs9hQy.mjs.map +1 -0
- package/.output/server/chunks/build/index-CB1N4gax.mjs +557 -0
- package/.output/server/chunks/build/index-CB1N4gax.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +326 -248
- package/.output/server/chunks/build/server.mjs.map +1 -1
- package/.output/server/chunks/build/styles.mjs +4 -4
- package/.output/server/chunks/nitro/nitro.mjs +2319 -852
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/api/editor-types.get.mjs +113 -0
- package/.output/server/chunks/routes/api/editor-types.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/parse.post.mjs +26 -1448
- package/.output/server/chunks/routes/api/parse.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/resolve.get.mjs +6 -0
- package/.output/server/chunks/routes/api/resolve.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/studio/run.post.mjs +40 -0
- package/.output/server/chunks/routes/api/studio/run.post.mjs.map +1 -0
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs.map +1 -1
- package/.output/server/index.mjs +7 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/acorn/dist/acorn.mjs +6266 -0
- package/.output/server/node_modules/acorn/package.json +50 -0
- package/.output/server/node_modules/ip-address/dist/common.js +112 -4
- package/.output/server/node_modules/ip-address/dist/ipv4.js +322 -87
- package/.output/server/node_modules/ip-address/dist/ipv6.js +654 -199
- package/.output/server/node_modules/ip-address/dist/v4/constants.js +45 -2
- package/.output/server/node_modules/ip-address/dist/v6/constants.js +55 -3
- package/.output/server/node_modules/ip-address/dist/v6/helpers.js +12 -3
- package/.output/server/node_modules/ip-address/package.json +49 -37
- package/.output/server/node_modules/ufo/dist/index.mjs +2 -2
- package/.output/server/node_modules/ufo/package.json +9 -9
- package/.output/server/package.json +4 -3
- package/README.md +65 -20
- package/app/assets/css/main.css +1 -0
- package/app/assets/css/studio.css +131 -0
- package/app/components/StudioConversion.vue +41 -0
- package/app/components/StudioDataPanel.vue +21 -0
- package/app/components/StudioEditor.vue +78 -102
- package/app/components/StudioExpandButton.vue +11 -0
- package/app/components/StudioOutput.vue +7 -1
- package/app/components/StudioSourcePanel.vue +16 -0
- package/app/components/StudioValidation.vue +47 -0
- package/app/components/ZodMongooseStudio.vue +216 -198
- package/app/composables/useStudioRunner.ts +142 -0
- package/app/pages/index.vue +1 -1
- package/app/plugins/monaco.client.ts +2 -0
- package/bin/index.mjs +5 -0
- package/nuxt.config.ts +4 -3
- package/package.json +6 -3
- package/server/api/editor-types.get.ts +7 -0
- package/server/api/parse.post.ts +17 -175
- package/server/api/studio/run.post.ts +29 -0
- package/server/middleware/security.ts +29 -7
- package/server/utils/editor-types.json +1 -0
- package/server/utils/example-data.ts +80 -0
- package/server/utils/parse-request.ts +28 -0
- package/server/utils/runner-client.ts +40 -0
- package/server/utils/studio-execution.ts +176 -0
- package/.output/public/_nuxt/BD40YYqZ.js +0 -33
- package/.output/public/_nuxt/BlQmLjV4.js +0 -1
- package/.output/public/_nuxt/CJ4Cv9fY.js +0 -61
- package/.output/public/_nuxt/builds/meta/495a8ebb-444d-4414-9b98-c181aa84d817.json +0 -1
- package/.output/public/_nuxt/error-404.64pZEiDn.css +0 -1
- package/.output/public/_nuxt/error-500.DHOpI0Ir.css +0 -1
- package/.output/public/_nuxt/rH_O4qXT.js +0 -1
- package/.output/server/chunks/build/error-404-BN-7rNE4.mjs.map +0 -1
- package/.output/server/chunks/build/error-404-styles.Byx46oLR.mjs +0 -8
- package/.output/server/chunks/build/error-404-styles.Byx46oLR.mjs.map +0 -1
- package/.output/server/chunks/build/error-500-DhIQ-2yt.mjs.map +0 -1
- package/.output/server/chunks/build/error-500-styles.BL3UT0Wa.mjs +0 -8
- package/.output/server/chunks/build/error-500-styles.BL3UT0Wa.mjs.map +0 -1
- package/.output/server/chunks/build/index-B4T6zHp0.mjs +0 -1904
- package/.output/server/chunks/build/index-B4T6zHp0.mjs.map +0 -1
- package/.output/server/node_modules/zod/index.js +0 -4
- /package/.output/public/_nuxt/{editor.CdBKkuhR.css → monaco.CdBKkuhR.css} +0 -0
package/.output/nitro.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DbUZZZZu.js","./Czp4_2o-.js","./entry.DaqrxXuH.css","./BC9tFNFa.js","./monaco.CdBKkuhR.css","./DKK0Mrrg.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{f as C,o as u,c as r,a as e,g as ae,h as Z,i as B,j as J,k as D,l as I,m as ne,v as le,n as K,r as F,s as _,p as U,b as k,q,w as O,d as W,t as S,F as N,x as P,y as L,z as ie,A as V,B as Q,C as d,D as G,E as ue,_ as de,G as re}from"./Czp4_2o-.js";const ce=["aria-label","title"],me={key:0,viewBox:"0 0 20 20",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"1.6","aria-hidden":"true"},pe={key:1,viewBox:"0 0 20 20",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"1.6","aria-hidden":"true"},ve=C({__name:"StudioExpandButton",props:{expanded:{type:Boolean},label:{}},emits:["toggle"],setup(o,{emit:a}){const s=a;return(n,t)=>(u(),r("button",{type:"button",class:"studio-expand-button","aria-label":o.expanded?`Restore ${o.label}`:`Expand ${o.label}`,title:o.expanded?"Restore panel":"Expand panel",onClick:t[0]||(t[0]=i=>s("toggle"))},[o.expanded?(u(),r("svg",me,[...t[1]||(t[1]=[e("path",{d:"M7 2v5H2m16 6h-5v5M2 7l5-5m6 16 5-5"},null,-1)])])):(u(),r("svg",pe,[...t[2]||(t[2]=[e("path",{d:"M2 7V2h5m6 16h5v-5M2 2l5 5m6 6 5 5"},null,-1)])]))],8,ce))}}),fe=Object.assign(ve,{__name:"StudioExpandButton"}),X=()=>ae("color-mode").value,_e=["aria-label"],be=C({__name:"StudioEditor",props:K({language:{default:"typescript"},label:{default:"Code editor"}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(o){const a=Z(o,"modelValue"),s=o,n=F(null),t=_(null),i=_(!1),b=X();let x;const p=["bufferMongooseGetter","callHookSync","extractMongooseDef","genTimestampsSchema","getFrontendMode","getMongoose","getMongooseMeta","hooks","mongooseRegistry","objectStrictness","populateZodSchema","setFrontendMode","setMongoose","toMongooseSchema","toStrictModel","unwrapZodSchema","withMongoose","zBuffer","zObjectId","zPoint","zPolygon","zRef"];return B(async()=>{if(n.value)try{const c=await J(()=>import("./DbUZZZZu.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url);if(!n.value)return;if(s.language==="typescript"){const g=await J(()=>import("./BC9tFNFa.js").then(h=>h.m),__vite__mapDeps([3,1,2,4]),import.meta.url);g.typescriptDefaults.setCompilerOptions({target:g.ScriptTarget.ESNext,allowNonTsExtensions:!0,moduleResolution:g.ModuleResolutionKind.NodeJs,module:g.ModuleKind.ESNext,noEmit:!0}),x||=$fetch("/api/editor-types").then(h=>{for(const[E,$]of Object.entries(h))g.typescriptDefaults.addExtraLib($,E)}).catch(()=>{}),await x,g.typescriptDefaults.addExtraLib(`
|
|
3
|
+
declare const z: typeof import("zod/v4").z;
|
|
4
|
+
declare const mongoose: any;
|
|
5
|
+
${p.map(h=>`declare const ${h}: any;`).join(`
|
|
6
|
+
`)}
|
|
7
|
+
declare module '@nullix/zod-mongoose' {
|
|
8
|
+
${p.map(h=>`export const ${h}: any;`).join(`
|
|
9
|
+
`)}
|
|
10
|
+
}
|
|
11
|
+
`,"file:///node_modules/@types/studio/globals.d.ts")}t.value=c.editor.create(n.value,{value:a.value,language:s.language,theme:b.value==="dark"?"vs-dark":"vs",minimap:{enabled:!1},automaticLayout:!0,fontSize:13,fontFamily:"'SFMono-Regular', Consolas, 'Liberation Mono', monospace",lineHeight:23,padding:{top:16,bottom:16},scrollBeyondLastLine:!1,roundedSelection:!1,wordWrap:"on",renderLineHighlight:"line",scrollbar:{verticalScrollbarSize:7,horizontalScrollbarSize:7},ariaLabel:s.label}),t.value.onDidChangeModelContent(()=>{a.value=t.value?.getValue()||""})}catch{i.value=!0}}),D(a,c=>{t.value&&t.value.getValue()!==c&&t.value.setValue(c)}),D(()=>b.value,c=>{t.value?.updateOptions({theme:c==="dark"?"vs-dark":"vs"})}),I(()=>{t.value?.dispose()}),(c,g)=>i.value?ne((u(),r("textarea",{key:0,"onUpdate:modelValue":g[0]||(g[0]=h=>a.value=h),class:"studio-editor-fallback","aria-label":o.label,spellcheck:"false"},null,8,_e)),[[le,a.value]]):(u(),r("div",{key:1,ref_key:"container",ref:n,class:"studio-monaco h-full w-full"},null,512))}}),ee=Object.assign(be,{__name:"StudioEditor"}),ge={class:"studio-card studio-schema","aria-labelledby":"schema-title"},he={class:"studio-card-head"},ye={class:"studio-editor-surface"},Se=C({__name:"StudioSourcePanel",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(o){const a=Z(o,"modelValue");return(s,n)=>{const t=ee,i=q;return u(),r("section",ge,[e("div",he,[n[1]||(n[1]=e("div",{class:"studio-card-heading"},[e("div",null,[e("p",{class:"studio-eyebrow"},"TypeScript"),e("h2",{id:"schema-title"},"Schema")])],-1)),U(s.$slots,"actions")]),e("div",ye,[k(i,null,{default:O(()=>[k(t,{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=b=>a.value=b),label:"Zod schema TypeScript editor"},null,8,["modelValue"])]),_:1})]),n[2]||(n[2]=e("div",{class:"studio-card-foot"},[W("Use "),e("code",null,"z"),W(" and zod-mongoose helpers directly. You can define multiple schemas.")],-1))])}}}),xe=Object.assign(Se,{__name:"StudioSourcePanel"}),ke={class:"studio-card studio-data","aria-labelledby":"data-title"},$e={class:"studio-card-head"},Ee={class:"studio-card-actions"},Ve=["disabled"],Ce={class:"studio-editor-surface"},Me=C({__name:"StudioDataPanel",props:K({isRunning:{type:Boolean},canRun:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:K(["loadExample"],["update:modelValue"]),setup(o,{emit:a}){const s=a,n=Z(o,"modelValue");return(t,i)=>{const b=ee,x=q;return u(),r("section",ke,[e("div",$e,[i[2]||(i[2]=e("div",{class:"studio-card-heading"},[e("div",null,[e("p",{class:"studio-eyebrow"},"JSON"),e("h2",{id:"data-title"},"Input data")])],-1)),e("div",Ee,[e("button",{type:"button",class:"studio-example-button",disabled:o.isRunning||!o.canRun,onClick:i[0]||(i[0]=p=>s("loadExample"))},"Load example",8,Ve),U(t.$slots,"actions")])]),e("div",Ce,[k(x,null,{default:O(()=>[k(b,{modelValue:n.value,"onUpdate:modelValue":i[1]||(i[1]=p=>n.value=p),language:"json",label:"JSON data editor"},null,8,["modelValue"])]),_:1})]),i[3]||(i[3]=e("div",{class:"studio-card-foot"},"Enter a JSON value, then run to see what Zod returns.",-1))])}}}),we=Object.assign(Me,{__name:"StudioDataPanel"}),Re={class:"studio-card studio-validation","aria-labelledby":"validation-title"},Oe={class:"studio-card-head"},De={class:"studio-card-actions"},ze={key:0,class:"studio-status studio-status-stale"},Te={key:1,class:"studio-status studio-status-valid"},je={key:2,class:"studio-status studio-status-invalid"},Le={key:3,class:"studio-status"},Ne={class:"studio-validation-body"},Pe={key:0,class:"studio-result-intro"},Be={key:1,class:"studio-result-intro"},Ie={key:2,class:"studio-result-intro"},Ue={key:3,class:"studio-parsed","aria-label":"Parsed data"},Ae={key:4,class:"studio-issues"},Je=C({__name:"StudioValidation",props:{result:{},stale:{type:Boolean}},setup(o){return(a,s)=>(u(),r("section",Re,[e("div",Oe,[s[0]||(s[0]=e("div",{class:"studio-card-heading"},[e("div",null,[e("p",{class:"studio-eyebrow"},"Zod"),e("h2",{id:"validation-title"},"Validation")])],-1)),e("div",De,[o.stale?(u(),r("span",ze,"Edited")):o.result.status==="valid"?(u(),r("span",Te,"Valid")):o.result.status==="invalid"||o.result.status==="json-error"||o.result.status==="parse-error"?(u(),r("span",je,"Invalid")):(u(),r("span",Le,"Ready")),U(a.$slots,"actions")])]),e("div",Ne,[o.result.status==="valid"?(u(),r("div",Pe,[...s[1]||(s[1]=[e("span",{class:"studio-result-icon studio-result-icon-valid"},"✓",-1),e("div",null,[e("strong",null,"Parsed successfully"),e("p",null,"Defaults, transforms and stripped fields appear below.")],-1)])])):o.result.status==="invalid"?(u(),r("div",Be,[s[3]||(s[3]=e("span",{class:"studio-result-icon studio-result-icon-invalid"},"!",-1)),e("div",null,[e("strong",null,S(o.result.issues?.length)+" validation issue"+S(o.result.issues?.length===1?"":"s"),1),s[2]||(s[2]=e("p",null,"Update the JSON input and run again.",-1))])])):(u(),r("div",Ie,[s[4]||(s[4]=e("span",{class:"studio-result-icon"},"{ }",-1)),e("div",null,[e("strong",null,S(o.result.status==="json-error"?"JSON could not be read":o.result.status==="parse-error"?"Validation could not run":"Ready to validate"),1),e("p",null,S(o.result.message),1)])])),o.result.status==="valid"?(u(),r("pre",Ue,S(o.result.parsed),1)):o.result.status==="invalid"?(u(),r("ul",Ae,[(u(!0),r(N,null,P(o.result.issues,(n,t)=>(u(),r("li",{key:`${n.path}-${t}`},[e("code",null,S(n.path),1),e("span",null,S(n.message),1)]))),128))])):L("",!0)])]))}}),Ke=Object.assign(Je,{__name:"StudioValidation"}),Ze=C({__name:"StudioOutput",props:{modelValue:{}},setup(o){const a=o,s=F(null),n=_(null),t=X();return B(async()=>{if(!s.value)return;const i=await J(()=>import("./DbUZZZZu.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url);n.value=i.editor.create(s.value,{value:a.modelValue,language:"typescript",theme:t.value==="dark"?"vs-dark":"vs",minimap:{enabled:!1},automaticLayout:!0,readOnly:!0,fontSize:14,padding:{top:16},scrollBeyondLastLine:!1,wordWrap:"on"})}),D(()=>a.modelValue,i=>{n.value&&n.value.setValue(i)}),I(()=>{n.value&&n.value.dispose()}),D(()=>t.value,i=>{n.value?.updateOptions({theme:i==="dark"?"vs-dark":"vs"})}),(i,b)=>(u(),r("div",{ref_key:"outputContainer",ref:s,class:"w-full h-full"},null,512))}}),Fe=Object.assign(Ze,{__name:"StudioOutput"}),qe={class:"studio-card studio-conversion","aria-labelledby":"conversion-title"},He={class:"studio-card-head"},We={class:"studio-tabs",role:"tablist","aria-label":"Mongoose output view"},Ge=["aria-selected","onClick"],Ye={class:"studio-conversion-output",role:"tabpanel"},Qe=C({__name:"StudioConversion",props:{result:{}},setup(o){const a=o,s=_("definition"),n=[{key:"definition",label:"Definition"},{key:"obj",label:".obj"},{key:"tree",label:".tree"},{key:"paths",label:".paths"}],t=ie(()=>{if(a.result.error)return`// Conversion error
|
|
12
|
+
${a.result.error}`;switch(s.value){case"definition":return a.result.definition||"// Run a schema to see its Mongoose definition.";case"obj":return a.result.schemaObj||"// No schema object yet.";case"tree":return a.result.schemaTree||"// No schema tree yet.";case"paths":return a.result.schemaPaths||"// No schema paths yet."}});return(i,b)=>{const x=Fe,p=q;return u(),r("section",qe,[e("div",He,[b[0]||(b[0]=e("div",{class:"studio-card-heading"},[e("div",null,[e("p",{class:"studio-eyebrow"},"Mongoose"),e("h2",{id:"conversion-title"},"Schema output")])],-1)),U(i.$slots,"actions")]),e("div",We,[(u(),r(N,null,P(n,c=>e("button",{key:c.key,type:"button",role:"tab","aria-selected":s.value===c.key,class:V({"is-active":s.value===c.key}),onClick:g=>s.value=c.key},S(c.label),11,Ge)),64))]),e("div",Ye,[k(p,null,{default:O(()=>[k(x,{"model-value":t.value},null,8,["model-value"])]),_:1})])])}}}),Xe=Object.assign(Qe,{__name:"StudioConversion"}),Y="zod-mongoose-studio:v1";function et(){const o=Q(),a=_(`// z and every @nullix/zod-mongoose helper are ready to use.
|
|
13
|
+
const UserSchema = z.object({
|
|
14
|
+
name: z.string().trim().min(2),
|
|
15
|
+
email: z.email(),
|
|
16
|
+
age: z.number().int().min(18).optional(),
|
|
17
|
+
role: z.enum(['reader', 'admin']).default('reader'),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const PostSchema = z.object({
|
|
21
|
+
title: z.string().min(1),
|
|
22
|
+
published: z.boolean().default(false),
|
|
23
|
+
});`),s=_(`{
|
|
24
|
+
"name": " Ada Lovelace ",
|
|
25
|
+
"email": "ada@example.com",
|
|
26
|
+
"age": 28
|
|
27
|
+
}`),n=_([]),t=_(""),i=_({status:"empty",message:"Run the studio to see parsed data."}),b=_({}),x=_(!1),p=_(!1),c=_(!1),g=_(""),h=_("");let E,$=0;async function M(v="run"){if(!o.public.isExecutionEnabled)return;E&&clearTimeout(E);const w=++$,j=a.value,T=s.value;x.value=!0,g.value="",h.value="";try{const f=await $fetch(o.public.isDocsMode?"/api/studio/run":"/api/parse",{method:"POST",body:{sourceCode:j,inputData:T,selectedSchema:t.value||void 0,action:v}});if(w!==$)return;n.value=f.schemaNames,c.value=!0,t.value=f.selectedSchema,i.value=f.validation,b.value=f.conversion,h.value=f.exampleError||"",f.example&&a.value===j&&s.value===T&&(s.value=f.example),p.value=a.value!==j||s.value!==T&&s.value!==f.example}catch(f){if(w!==$)return;g.value=f.data?.message||f.message||"The studio could not run this schema.",i.value={status:"empty",message:"Run the studio to see parsed data."},b.value={}}finally{w===$&&(x.value=!1)}}function A(v){t.value=v,p.value=!0,o.public.isExecutionEnabled&&M()}function z(){try{sessionStorage.setItem(Y,JSON.stringify({sourceCode:a.value,inputData:s.value,selectedSchema:t.value}))}catch{}}return D(a,()=>{p.value=!0,o.public.isDocsMode||(E&&clearTimeout(E),E=setTimeout(()=>{M()},650))}),D(s,()=>{p.value=!0},{flush:"sync"}),D([a,s,t],z,{flush:"sync"}),B(()=>{try{const v=JSON.parse(sessionStorage.getItem(Y)||"null");v&&typeof v=="object"&&(typeof v.sourceCode=="string"&&v.sourceCode.length<=5e4&&(a.value=v.sourceCode),typeof v.inputData=="string"&&v.inputData.length<=1e5&&(s.value=v.inputData),typeof v.selectedSchema=="string"&&(t.value=v.selectedSchema))}catch{}o.public.isExecutionEnabled&&M()}),I(()=>{E&&clearTimeout(E)}),{sourceCode:a,inputData:s,schemaNames:n,selectedSchema:t,validation:i,conversion:b,isRunning:x,isDirty:p,hasRun:c,error:g,exampleError:h,run:M,selectSchema:A}}const tt={class:"studio-header"},st={class:"studio-header-actions"},ot={class:"studio-mode"},at=["disabled"],nt={class:"studio-subbar"},lt={class:"studio-subbar-copy"},it={class:"studio-schema-picker"},ut=["value","disabled"],dt={key:0,value:""},rt=["value"],ct={class:"studio-mobile-nav","aria-label":"Studio sections"},mt=["onClick"],pt={key:0,class:"studio-error-banner",role:"alert"},vt={key:1,class:"studio-error-banner studio-example-banner",role:"status"},ft={class:"studio-workspace"},_t={class:"studio-column studio-input-column"},bt={class:"studio-column studio-output-column"},gt=C({__name:"ZodMongooseStudio",setup(o){const a=Q(),s=F(null),n=_("schema"),t=_(null);let i=!1;const b=[{key:"schema",label:"Schema"},{key:"data",label:"Data"},{key:"result",label:"Result"},{key:"mongoose",label:"Mongoose"}],{sourceCode:x,inputData:p,schemaNames:c,selectedSchema:g,validation:h,conversion:E,isRunning:$,isDirty:M,hasRun:A,error:z,exampleError:v,run:w,selectSchema:j}=et();function T(y){if(y.key==="Escape"&&t.value){f(t.value);return}s.value?.contains(document.activeElement)&&(!(y.metaKey||y.ctrlKey)||y.altKey||y.shiftKey||y.repeat||y.key.toLowerCase()!=="s"&&y.key.toLowerCase()!=="r"||(y.preventDefault(),y.stopPropagation(),w()))}function f(y){if(i)return;const l=s.value?.querySelector(`.studio-${y}`),R=()=>{t.value=t.value===y?null:y};l&&"startViewTransition"in document?(i=!0,l.style.viewTransitionName="studio-expanded-panel",document.startViewTransition(()=>(R(),ue())).finished.finally(()=>{l.style.viewTransitionName="",i=!1})):R()}return B(()=>document.addEventListener("keydown",T,!0)),I(()=>document.removeEventListener("keydown",T,!0)),(y,l)=>{const R=fe,H=xe,te=we,se=Ke,oe=Xe;return u(),r("div",{ref_key:"root",ref:s,class:V(["studio-shell",{"studio-shell-docs":d(a).public.isDocsMode,"is-focused":t.value}])},[e("header",tt,[l[10]||(l[10]=e("div",{class:"studio-brand"},[e("div",null,[e("p",{class:"studio-eyebrow"},"@nullix/zod-mongoose"),e("h1",null,"Studio")])],-1)),e("div",st,[e("span",ot,S(d(a).public.isDocsMode?"Playground":"Local mode"),1),l[9]||(l[9]=e("span",{class:"studio-shortcut","aria-hidden":"true"},"⌘ / Ctrl + S or R",-1)),e("button",{type:"button",class:"studio-run",disabled:d($)||!d(a).public.isExecutionEnabled,onClick:l[0]||(l[0]=m=>d(w)())},S(d($)?"Running…":"Run"),9,at)])]),e("div",nt,[e("div",lt,[e("span",{class:V(["studio-pulse",{"is-busy":d($),error:d(z)}])},null,2),e("span",null,S(d($)?"Working through your schema…":d(z)?"Run failed":d(A)?d(M)?"Changes ready to run":"Schema and data in sync":"Waiting for first run"),1)]),e("label",it,[l[11]||(l[11]=e("span",null,"ACTIVE SCHEMA",-1)),e("select",{value:d(g),disabled:d(c).length<2,"aria-label":"Active schema",onChange:l[1]||(l[1]=m=>d(j)(m.target.value))},[d(c).length?L("",!0):(u(),r("option",dt," Run to find schemas ")),(u(!0),r(N,null,P(d(c),m=>(u(),r("option",{key:m,value:m},S(m),9,rt))),128))],40,ut)])]),e("nav",ct,[(u(),r(N,null,P(b,m=>e("button",{key:m.key,type:"button",class:V({"is-active":n.value===m.key}),onClick:xt=>n.value=m.key},S(m.label),11,mt)),64))]),d(z)?(u(),r("div",pt,[l[12]||(l[12]=e("strong",null,"Run failed",-1)),e("span",null,S(d(z)),1)])):L("",!0),d(v)?(u(),r("div",vt,[l[13]||(l[13]=e("strong",null,"Example unavailable",-1)),e("span",null,S(d(v)),1)])):L("",!0),e("main",ft,[e("div",_t,[k(H,{modelValue:d(x),"onUpdate:modelValue":l[3]||(l[3]=m=>G(x)?x.value=m:null),class:V({"is-mobile-active":n.value==="schema","is-expanded":t.value==="schema"})},{actions:O(()=>[k(R,{label:"schema editor",expanded:t.value==="schema",onToggle:l[2]||(l[2]=m=>f("schema"))},null,8,["expanded"])]),_:1},8,["modelValue","class"]),k(te,{modelValue:d(p),"onUpdate:modelValue":l[5]||(l[5]=m=>G(p)?p.value=m:null),"is-running":d($),"can-run":d(a).public.isExecutionEnabled,class:V({"is-mobile-active":n.value==="data","is-expanded":t.value==="data"}),onLoadExample:l[6]||(l[6]=m=>d(w)("example"))},{actions:O(()=>[k(R,{label:"data editor",expanded:t.value==="data",onToggle:l[4]||(l[4]=m=>f("data"))},null,8,["expanded"])]),_:1},8,["modelValue","is-running","can-run","class"])]),e("div",bt,[k(se,{class:V(["studio-result",{"is-mobile-active":n.value==="result","is-expanded":t.value==="result"}]),result:d(h),stale:d(M)},{actions:O(()=>[k(R,{label:"validation result",expanded:t.value==="result",onToggle:l[7]||(l[7]=m=>f("result"))},null,8,["expanded"])]),_:1},8,["class","result","stale"]),k(oe,{class:V(["studio-mongoose",{"is-mobile-active":n.value==="mongoose","is-expanded":t.value==="mongoose"}]),result:d(E)},{actions:O(()=>[k(R,{label:"Mongoose output",expanded:t.value==="mongoose",onToggle:l[8]||(l[8]=m=>f("mongoose"))},null,8,["expanded"])]),_:1},8,["class","result"])])])],2)}}}),ht=Object.assign(gt,{__name:"ZodMongooseStudio"}),yt={};function St(o,a){const s=ht;return u(),re(s,{class:"studio-standalone"})}const $t=de(yt,[["render",St]]);export{$t as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as e}from"./
|
|
1
|
+
import{l as e}from"./BC9tFNFa.js";import"./Czp4_2o-.js";const t=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],o={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,brackets:[["<!--","-->"],["<",">"],["{{","}}"],["{%","%}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"%",close:"%"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${t.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${t.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:"",tokenPostfix:"",builtinTags:["if","else","elseif","endif","render","assign","capture","endcapture","case","endcase","comment","endcomment","cycle","decrement","for","endfor","include","increment","layout","raw","endraw","render","tablerow","endtablerow","unless","endunless"],builtinFilters:["abs","append","at_least","at_most","capitalize","ceil","compact","date","default","divided_by","downcase","escape","escape_once","first","floor","join","json","last","lstrip","map","minus","modulo","newline_to_br","plus","prepend","remove","remove_first","replace","replace_first","reverse","round","rstrip","size","slice","sort","sort_natural","split","strip","strip_html","strip_newlines","times","truncate","truncatewords","uniq","upcase","url_decode","url_encode","where"],constants:["true","false"],operators:["==","!=",">","<",">=","<="],symbol:/[=><!]+/,identifier:/[a-zA-Z_][\w]*/,tokenizer:{root:[[/\{\%\s*comment\s*\%\}/,"comment.start.liquid","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@liquidState.root"}],[/\{\%/,{token:"@rematch",switchTo:"@liquidState.root"}],[/(<)([\w\-]+)(\/>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)([\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/</,"delimiter.html"],[/\{/,"delimiter.html"],[/[^<{]+/]],comment:[[/\{\%\s*endcomment\s*\%\}/,"comment.end.liquid","@pop"],[/./,"comment.content.liquid"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@liquidState.otherTag"}],[/\{\%/,{token:"@rematch",switchTo:"@liquidState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],liquidState:[[/\{\{/,"delimiter.output.liquid"],[/\}\}/,{token:"delimiter.output.liquid",switchTo:"@$S2.$S3"}],[/\{\%/,"delimiter.tag.liquid"],[/raw\s*\%\}/,"delimiter.tag.liquid","@liquidRaw"],[/\%\}/,{token:"delimiter.tag.liquid",switchTo:"@$S2.$S3"}],{include:"liquidRoot"}],liquidRaw:[[/^(?!\{\%\s*endraw\s*\%\}).+/],[/\{\%/,"delimiter.tag.liquid"],[/@identifier/],[/\%\}/,{token:"delimiter.tag.liquid",next:"@root"}]],liquidRoot:[[/\d+(\.\d+)?/,"number.liquid"],[/"[^"]*"/,"string.liquid"],[/'[^']*'/,"string.liquid"],[/\s+/],[/@symbol/,{cases:{"@operators":"operator.liquid","@default":""}}],[/\./],[/@identifier/,{cases:{"@constants":"keyword.liquid","@builtinFilters":"predefined.liquid","@builtinTags":"predefined.liquid","@default":"variable.liquid"}}],[/[^}|%]/,"variable.liquid"]]}};export{o as conf,r as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as D}from"./DKK0Mrrg.js";import{H as d,D as l,h as c,F as u,b as h,S as m,c as p,f as w,g as f,C as R}from"./YC-RLggm.js";import{a as b,e as y,d as T,R as U,i as x,j as M,t as j,k as O}from"./YC-RLggm.js";import{l as t}from"./BC9tFNFa.js";import"./Czp4_2o-.js";const I=120*1e3;class _{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL(""+new URL("html.worker-CwpTb9lJ.js",import.meta.url).href,import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(r=>e)}}class v extends R{constructor(n){super(n,[".",":","<",'"',"=","/"])}}function W(i){const n=new _(i),e=(...o)=>n.getLanguageServiceWorker(...o);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new d(e)),t.registerDocumentHighlightProvider(r,new l(e)),t.registerLinkProvider(r,new c(e)),t.registerFoldingRangeProvider(r,new u(e)),t.registerDocumentSymbolProvider(r,new h(e)),t.registerSelectionRangeProvider(r,new m(e)),t.registerRenameProvider(r,new p(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new f(e)))}function F(i){const n=[],e=[],r=new _(i);n.push(r);const o=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(o))),a.hovers&&e.push(t.registerHoverProvider(s,new d(o))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new l(o))),a.links&&e.push(t.registerLinkProvider(s,new c(o))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new h(o))),a.rename&&e.push(t.registerRenameProvider(s,new p(o))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new u(o))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new m(o))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(o))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new f(o)))}return P(),n.push(g(e)),g(n)}function g(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,b as DefinitionAdapter,y as DiagnosticsAdapter,T as DocumentColorAdapter,w as DocumentFormattingEditProvider,l as DocumentHighlightAdapter,c as DocumentLinkAdapter,f as DocumentRangeFormattingEditProvider,h as DocumentSymbolAdapter,u as FoldingRangeAdapter,d as HoverAdapter,U as ReferenceAdapter,p as RenameAdapter,m as SelectionRangeAdapter,_ as WorkerManager,x as fromPosition,M as fromRange,F as setupMode,W as setupMode1,j as toRange,O as toTextEdit};
|