UNPKG

schema-finder

Version:

A simple React component for viewing and exploring a JSONSchema

172 lines (151 loc) 14.3 kB
var We=Object.create;var v=Object.defineProperty,Te=Object.defineProperties,Ke=Object.getOwnPropertyDescriptor,Re=Object.getOwnPropertyDescriptors,Fe=Object.getOwnPropertyNames,Y=Object.getOwnPropertySymbols,Me=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty,Ae=Object.prototype.propertyIsEnumerable;var ee=(e,r,t)=>r in e?v(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,y=(e,r)=>{for(var t in r||(r={}))re.call(r,t)&&ee(e,t,r[t]);if(Y)for(var t of Y(r))Ae.call(r,t)&&ee(e,t,r[t]);return e},S=(e,r)=>Te(e,Re(r)),te=e=>v(e,"__esModule",{value:!0});var Ge=(e,r)=>{for(var t in r)v(e,t,{get:r[t],enumerable:!0})},oe=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Fe(r))!re.call(e,n)&&(t||n!=="default")&&v(e,n,{get:()=>r[n],enumerable:!(o=Ke(r,n))||o.enumerable});return e},w=(e,r)=>oe(te(v(e!=null?We(Me(e)):{},"default",!r&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),Ve=(e=>(r,t)=>e&&e.get(r)||(t=oe(te({}),r,1),e&&e.set(r,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var fr={};Ge(fr,{Finder:()=>xe});var J=e=>e!==null&&typeof e=="object"&&!!Object.keys(e).length;var W=e=>r=>!!r&&e.includes(r),He=["additionalItems","additionalProperties","allOf","anyOf","contains","else","if","items","not","oneOf","patternProperties","properties","propertyNames","then"],T=W(He),Le=["anyOf","oneOf","allOf"],ne=W(Le),qe=["$comment","$id","$ref","$schema","additionalItems","additionalProperties","allOf","anyOf","const","contains","contentEncoding","contentMediaType","default","definitions","dependencies","description","else","enum","examples","exclusiveMaximum","exclusiveMinimum","format","if","items","maxItems","maxLength","maxProperties","maximum","minItems","minLength","minProperties","minimum","multipleOf","not","oneOf","pattern","patternProperties","properties","propertyNames","readOnly","required","then","title","type","uniqueItems","writeOnly"],I=W(qe);var N=e=>!Number.isNaN(Number.parseInt(e))||I(e);var K=w(require("react")),R=w(require("styled-components"));var se=w(require("styled-components")),ie=se.default.button` outline: 0; border: none; margin: 0; padding: 0; width: auto; overflow: visible; background: transparent; color: inherit; font: inherit; line-height: normal; -webkit-font-smoothing: inherit; -moz-osx-font-smoothing: inherit; -webkit-appearance: none; &::-moz-focus-inner { border: 0; padding: 0; } &:focus:not(:focus-visible) { outline: none; } &:focus:not(:-moz-focusring) { outline: none; } `;var ze=R.default.div` display: flex; flex-flow: row nowrap; border: thin black solid; overflow-x: auto; `,Ue=(0,R.default)(ie)` cursor: pointer; padding: 0.1em 0.6em; position: relative; display: flex; align-items: center; &::after { content: ""; --tri-height: 5px; border-left: var(--tri-height) #0003 solid; border-top: var(--tri-height) transparent solid; border-bottom: var(--tri-height) transparent solid; width: 0; height: 0; position: absolute; right: -3px; } &:last-of-type::after { display: none; } &:hover, &:focus { text-decoration: underline; } `,F=({entries:e,setPath:r})=>e.length?K.default.createElement(ze,null,e.map(({key:t,name:o},n)=>{let s=()=>{r(i=>i.slice(0,n+1))};return K.default.createElement(Ue,{key:`bc-${n}-${t}`,onClick:s},N(t)?o:t)})):null;var g=w(require("react"));var ae="default",_e=(e,r)=>e!==ae&&r.length===1&&N(r[0].key)&&r[0].name!==e,M=({entries:e,isLast:r,selectedRow:t,clickHandler:o,idx:n,focus:s})=>{let i={};for(let p of e){let{group:h=ae}=p;h in i||(i[h]=[]),i[h].push(p)}let a=p=>{s&&(p==null||p.scrollIntoView({behavior:"smooth",block:"nearest",inline:"end"}))};return g.default.createElement(L,{id:`col-${n}`,ref:a},Object.entries(i).map(([p,h])=>g.default.createElement(q,{key:`gr-${n}-${p}`},_e(p,h)&&g.default.createElement(A,null,p),h.map(x=>g.default.createElement(Xe,{clickHandler:o,colIdx:n,entry:x,isLast:r,selectedRow:t})))))},Xe=({clickHandler:e,colIdx:r,entry:t,isLast:o,selectedRow:n})=>{let{key:s,hasChildren:i,isRequired:a,idx:p,name:h}=t,x=g.default.useRef(null);return g.default.useEffect(()=>{var m;o&&n===p&&((m=x.current)==null||m.focus())},[n,o]),g.default.createElement(G,{key:`row-${r}-${p}`,ref:x,tabIndex:-1,inPath:p===n,lastInPath:o&&p===n,isRequired:a,onClick:e(t)},g.default.createElement(V,null,N(s)?h:s),i&&g.default.createElement(H,null,">"))};var ce=w(require("react")),b=class extends ce.default.Component{constructor(r){super(r);this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,t){console.error(r,t)}render(){return this.state.hasError?null:this.props.children||null}};var c=w(require("react"));var Ze=({examples:e,path:r})=>e?c.default.createElement(c.default.Fragment,null,c.default.createElement("p",null,c.default.createElement(k,null,"Examples:")),Array.isArray(e)?e.map((t,o)=>c.default.createElement(j,{key:`ex-${r}-${o}`},JSON.stringify(t,null," "))):typeof e=="object"?c.default.createElement(j,null,JSON.stringify(e,null," ")):c.default.createElement(j,null,e)):null,Qe=({sConst:e,sEnum:r})=>{let t=[];if(e&&t.push(e),r&&t.push(...r),!t.length)return null;let o=t.map(n=>`"${n}"`).join(", ");return c.default.createElement("p",null,c.default.createElement(k,null,"Value:")," ",t.length>1&&c.default.createElement("i",null,"(oneOf)")," ",o)},U=({entry:e})=>{let{name:r,schema:t,isRequired:o,path:n}=e,{description:s,type:i,enum:a,const:p,examples:h,required:x}=t;return c.default.createElement(b,null,c.default.createElement(le,null,c.default.createElement(me,null,r),o&&c.default.createElement("p",null,c.default.createElement("i",null,"Required")),c.default.createElement(b,null,s&&c.default.createElement(pe,{s,path:n==null?void 0:n.join(".")})),c.default.createElement(z,null),c.default.createElement(b,null,c.default.createElement(Qe,{sConst:p,sEnum:a})),c.default.createElement(b,null,i&&c.default.createElement("p",null,c.default.createElement(k,null,"Type:")," ",Array.isArray(i)?i.join(", "):i)),c.default.createElement(b,null,x&&c.default.createElement("p",null,c.default.createElement(k,null,"Required Properties:")," ",x.join(", "))),c.default.createElement(b,null,c.default.createElement(Ze,{examples:h,path:n==null?void 0:n.join(".")})),c.default.createElement(z,null),!!(n==null?void 0:n.length)&&c.default.createElement("p",null,c.default.createElement(k,null,"Full Path:")," ",n.join("\u200B."))))};var E=w(require("react")),C=(e,r="")=>`desc-${r}-${e}`,pe=({s:e,path:r})=>{let t=[],o="",n=!1,s=!1,i=!1;for(let a=0;a<e.length;++a)switch(e[a]){case"`":{n?(t.push(E.default.createElement("code",{key:C(a,r)},o)),o=""):(t.push(o),o=""),n=!n;break}case"_":{e[a+1]==="_"?(s?(t.push(E.default.createElement("strong",{key:C(a,r)},o)),o=""):(t.push(o),o=""),s=!s,++a):(i?(t.push(E.default.createElement("i",{key:C(a,r)},o)),o=""):(t.push(o),o=""),i=!i);break}case"*":{e[a+1]==="*"?(s?(t.push(E.default.createElement("strong",{key:C(a,r)},o)),o=""):(t.push(o),o=""),s=!s,++a):(i?(t.push(E.default.createElement("i",{key:C(a,r)},o)),o=""):(t.push(o),o=""),i=!i);break}default:{o+=e[a];break}}return t.push(o),E.default.createElement("p",null,t)};var l=w(require("styled-components")),_=l.default.div` font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; display: flex; flex-direction: column; gap: 0.5rem; `,X=l.default.div` display: flex; flex-flow: row nowrap; border: thin black solid; font-size: 12px; height: 30em; `,Z=l.default.div` display: flex; flex-flow: row nowrap; flex: 2; overflow-x: auto; `,de=l.default.li` margin: 0; padding: 0.25em 0.5em; `,A=(0,l.default)(de)` font-style: italic; `,G=(0,l.default)(de)` margin: 0; padding: 0.25em 0.5em; display: flex; flex-flow: row nowrap; gap: 0.25em; overflow: hidden; font-style: ${({isKeyword:e})=>e&&"italic"}; &:hover, &:focus { cursor: pointer; background: #0003; } ${({inPath:e})=>e&&l.css` background: #0001; `} ${({lastInPath:e})=>e&&l.css` color: white; background: #000a !important; cursor: default !important; `} ${({isRequired:e})=>e&&l.css` font-weight: bold; `} `,V=l.default.span` text-overflow: ellipsis; flex: 1; max-width: 100%; white-space: nowrap; overflow: hidden; `,H=l.default.span``,L=l.default.div` display: flex; flex-direction: column; row-gap: 0.5em; width: 15em; min-width: 15em; border-right: thin #0002 solid; overflow-y: auto; `,q=l.default.ul` display: flex; flex-direction: column; list-style: none; margin: 0; padding: 0; `,le=l.default.div` padding: 1em; border-left: thin black solid; display: flex; flex-direction: column; gap: 0.5em; overflow-y: auto; flex: 1; p { margin: 0; } `,me=l.default.p` font-weight: bold; font-size: 1.5em; overflow-wrap: break-word; `,Hr=l.default.p` font-style: italic; `,k=l.default.span` font-weight: bold; `,j=l.default.code` font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; white-space: pre-wrap; tab-size: 2; `,z=l.default.hr` width: 80%; color: #0002; `;var ue=(e,r)=>async t=>{if(t===void 0)return[{}];let[o,n]=t.split(/\/?#\/?/),s=e;if(o.length&&(r==null?void 0:r.unsafeAllowRemoteUriResolution)){let[i,a]=await Ye(o);if(a!==void 0)return[{},a];s=i}return er(s,rr(n))};async function Ye(e){try{let r=await fetch(e);return r.ok?[await r.json()]:[{},new Error(`${r.status}: ${r.statusText}`)]}catch(r){return[{},r]}}function er(e,r){for(let t of r){if(!(t in e))return[e,new Error(`No key "${t}" in given object: ${JSON.stringify(e,void 0," ")}`)];e=e[t]}return[e]}function rr(e){return e.split("/").map(r=>r.replace("~1","/").replace("~0","~"))}function tr([e,r],t){return Promise.resolve({key:e,schema:r,name:e,deref:t})}var or=async e=>{let{schema:r,deref:t}=e,[o,n]=await t(r.$ref);return n&&console.warn("Error dereferencing entry",e,n),J(o)?S(y({},e),{schema:y(y({},r),o)}):e},nr=e=>{let{schema:r}=e;if(r.title)return S(y({},e),{name:r.title});if(r.$ref){let t=he(r.$ref);if(t)return S(y({},e),{name:t})}return e},sr=e=>{let{schema:r}=e,t=Object.entries(r).filter(([o])=>T(o)).some(([,o])=>J(o));return S(y({},e),{hasChildren:t})},ir=e=>r=>{let{key:t}=r,o=e==null?void 0:e.includes(t);return S(y({},r),{isRequired:o})},ar=(e=[])=>r=>S(y({},r),{path:[...e,r.key]}),cr=e=>r=>S(y({},r),{group:e}),pr=e=>r=>S(y({},r),{idx:e});function Q({entry:e,group:r,required:t,path:o,idx:n,deref:s,derefOptions:i}){if(s===void 0){let[,a]=e;s=ue(a,i)}return tr(e,s).then(or).then(nr).then(sr).then(cr(r)).then(ir(t)).then(ar(o)).then(pr(n))}async function fe(e){if(e===void 0)return Promise.reject("no entry");let{path:r,schema:t,deref:o}=e;if(!t||typeof t!="object")return console.error("parent schema is not a schema:",t),Promise.reject(new TypeError("parent schema not a schema"));let{required:n}=t,{additionalItems:s,additionalProperties:i,allOf:a,anyOf:p,contains:h,else:x,if:m,items:d,not:O,oneOf:P,patternProperties:B,properties:$,propertyNames:D,then:Se}=t,f=lr.bind(null,{required:n,path:r,deref:o}),ge=f($,"properties"),we=f(B,"patternProperties"),be=f({additionalProperties:i},"additionalProperties"),Ee=f({propertyNames:D},"propertyNames"),Oe=Array.isArray(d)?f(d,"items"):f({items:d},"items"),Pe=f({additionalItems:s},"additionalItems"),Ne=f({contains:h},"contains"),ke=f(a,"allOf"),ve=f(p,"anyOf"),Ce=f(P,"oneOf"),De=f({not:O},"not"),Je=f({if:m},"if"),Ie=f({then:Se},"then"),je=f({else:x},"else");return(await Promise.all([ge,we,be,Ee,Oe,Pe,Ne,ke,ve,Ce,De,Je,Ie,je])).flat().map((Be,$e)=>S(y({},Be),{idx:$e}))}function lr({required:e,path:r,deref:t},o,n){if(!o)return Promise.resolve([]);let s=Object.entries(o).flatMap(([i,a])=>typeof a!="object"?[]:[[i,a]]).map(i=>Q({entry:i,deref:t,path:r,required:e,group:n}));return Promise.all(s)}var u=w(require("react"));function mr({entries:e,lastCol:r,lastRow:t,path:o},n){switch(n.key){default:return;case"h":case"ArrowLeft":return o.slice(0,-1);case"l":case"ArrowRight":return o.length===e.length?o:[...o,0];case"k":case"ArrowUp":{let s;return n.ctrlKey?s=0:s=Math.max(t-1,0),[...o.slice(0,-1),s]}case"j":case"ArrowDown":{let s;if(n.ctrlKey||!o.length)s=e[Math.max(r,0)].length-1;else{let i=e[r].length;s=Math.min(t+1,i-1)}return[...o.slice(0,-1),s]}case"g":return[...o.slice(0,-1),0];case"G":return[...o.slice(0,-1),e[Math.max(r,0)].length-1];case"Home":return o.slice(0,1)}}function ye(e){let r=mr.bind(null,e),{setPath:t}=e;return function(n){let s=r(n);s!==void 0&&(t(s),n.preventDefault())}}var dr=({schemas:e,unsafeAllowRemoteUriResolution:r})=>{let[t,o]=u.default.useState([]),[n,s=0]=u.default.useMemo(()=>[t.length-1,...t.slice(-1)],[t]),[i,a]=u.default.useState([]),p=u.default.useMemo(()=>{var m;return(m=i[t.length-1])==null?void 0:m[s]},[t,s,i]);u.default.useEffect(()=>{Promise.all(Object.entries(e).map((m,d)=>Q({entry:m,idx:d,derefOptions:{unsafeAllowRemoteUriResolution:r}}))).then(m=>{a([m]),o([])}).catch(console.error)},[e,r]),u.default.useEffect(()=>{var d;let m=(d=i[n])==null?void 0:d[s];m!==void 0&&fe(m).then(O=>{!O.length||a(P=>[...P.slice(0,t.length),O])}).catch(console.error)},[t]);let h=u.default.useMemo(()=>i.map((m,d)=>{var P;let O=B=>()=>{o($=>{var D;return[...$.slice(0,d),(D=B.idx)!=null?D:0]})};return u.default.createElement(M,{key:`col-${d}-${(P=t[d-1])!=null?P:0}`,idx:d,entries:m,selectedRow:t[d],isLast:d===n,focus:d===i.length-1,clickHandler:O})}),[i,o,t]),x=u.default.useCallback(ye({entries:i,lastCol:n,lastRow:s,path:t,setPath:o}),[i,n,s,t,o]);return u.default.createElement(_,null,u.default.createElement(X,null,u.default.createElement(Z,{tabIndex:0,onKeyDown:x},h),p&&u.default.createElement(U,{entry:p})),u.default.createElement(F,{entries:t.map((m,d)=>i[d][m]),setPath:o}))},xe=e=>u.default.createElement("div",null,u.default.createElement(dr,y({},e)));var ur=e=>e==null?void 0:e.split("/").slice(1);var he=e=>{var r;return(r=ur(e))==null?void 0:r.slice(-1)[0]};module.exports=Ve(fr);0&&(module.exports={Finder}); //# sourceMappingURL=index.js.map