@standard-community/standard-openapi
Version:
[](https://npmjs.org/package/@standard-community/standard-openapi "View this project on NPM") [ • 4.17 kB
JavaScript
var a=Object.defineProperty;var r=(e,t)=>a(e,"name",{value:t,configurable:!0});import{Walker as f}from"json-schema-walker";import{toJsonSchema as d}from"@standard-community/standard-json";const y=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];class c extends Error{static{r(this,"InvalidTypeError")}constructor(t){super(t),this.name="InvalidTypeError",this.message=t}}const u="x-",v=r(async(e,t)=>{if(typeof e!="object")return e;if(e.type){const i=new f;return await i.loadSchema({definitions:t.definitions||[],...e,$schema:t.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(s,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(e)){const i=e;if(i.includes("null")){const o=i.filter(p=>p!=="null");return{type:o.length===1?o[0]:o,nullable:!0}}}return e},"handleDefinition"),x=r(async e=>{const t=new f;await t.loadSchema(e),await t.walk(s,t.vocabularies.DRAFT_07);const n=t.rootSchema;if(n?.definitions)for(const i in n.definitions){const l=n.definitions[i];n.definitions[i]=await v(l,e)}return n},"convert");function w(e){return typeof e!="object"||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}r(w,"stripIllegalKeywords");function s(e){let t=e;return t&&(t=w(t),t=g(t),t=m(t),t=O(t),t=S(t),t=M(t),t=T(t),t=j(t),typeof t.patternProperties=="object"&&(t=k(t)),t.type==="array"&&typeof t.items>"u"&&(t.items={}),t=P(t),t)}r(s,"convertSchema");const b=new Set(["null","boolean","object","array","number","string","integer"]);function A(e){if(typeof e=="object"&&!Array.isArray(e)&&(e&&"$ref"in e&&e.$ref||e&&"properties"in e&&e.properties))return;const t=Array.isArray(e)?e:[e];for(const n of t)if(n&&!b.has(n))throw new c(`Type "${n}" is not a valid type`)}r(A,"validateType");function O(e){const t=e.dependencies;if(typeof t!="object")return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}r(O,"convertDependencies");function S(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n)||!n.some(o=>o.type==="null"))return e;const l=n.filter(o=>o.type!=="null");for(const o of l)o.nullable=!0;e[t]=l}return e}r(S,"convertNullable");function g(e){if(typeof e!="object"||e.type===void 0)return e;if(A(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter(n=>n!=="null");t.length===0?e.type=void 0:t.length===1?e.type=t[0]:(e.type=void 0,e.anyOf=t.map(n=>({type:n})))}else e.type==="null"&&(e.type=void 0,e.nullable=!0);return e}r(g,"convertTypes");function k(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}r(k,"convertPatternProperties");function P(e){const t=Object.keys(e);for(const n of t)if(!n.startsWith(u)&&!y.includes(n)){const i=`${u}${n}`;e[i]=e[n],e[n]=void 0}return e}r(P,"convertIllegalKeywordsAsExtensions");function j(e){return e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0),e}r(j,"convertExamples");function m(e){return typeof e.const<"u"&&(e.enum=[e.const],e.const=void 0),e}r(m,"rewriteConst");function M(e){return typeof e!="object"||"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0),e}r(M,"rewriteIfThenElse");function T(e){return typeof e.exclusiveMaximum=="number"&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0),typeof e.exclusiveMinimum=="number"&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0),e}r(T,"rewriteExclusiveMinMax");const $=r(async e=>{const t=d(e);return{schema:await x(t)}},"generator");export{$ as generator};