UNPKG

apipost-mock-schema

Version:

Simple utility to mock example objects based on JSON schema definitions

2 lines (1 loc) 7.5 kB
"use strict";function r(r,e,t){if(t||2===arguments.length)for(var n,i=0,a=e.length;i<a;i++)!n&&i in e||(n||(n=Array.prototype.slice.call(e,0,i)),n[i]=e[i]);return r.concat(n||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var e=require("lodash"),t=require("uuid"),n=require("@apidevtools/json-schema-ref-parser"),i=require("json2json-schema"),a=i.validatorJson,o=i.FORMAT_REGEXPS,u=require("minimatch").minimatch,c=require("mockjs5-pro").Mockjs;function l(r,t,n){return e.find(n,(function(n){if((null==n?void 0:n.type)!==t)return!1;var i=(null==n?void 0:n.match_case)>0?String(r):e.toLower(String(r)),a=(null==n?void 0:n.match_case)>0?String(null==n?void 0:n.match_rule):e.toLower(String(null==n?void 0:n.match_rule));return"exact"===(null==n?void 0:n.match_type)?i==a:u(i,a)}))}module.exports=function(i){void 0===i&&(i={}),"object"==typeof i&&null!==i||(i={});var u=function(r){var t;switch(e.toLower(r)){case"zh-cn":case"zh-hans":t=require("@faker-js/faker").fakerZH_CN;break;case"zh-tw":case"zh-hant":t=require("@faker-js/faker").fakerZH_TW;break;case"id":t=require("@faker-js/faker").fakerID_ID;break;case"ja":case"jp":t=require("@faker-js/faker").fakerJA;break;case"de":t=require("@faker-js/faker").fakerDE;break;case"fr":t=require("@faker-js/faker").fakerFR;break;default:t=require("@faker-js/faker").faker}return t}(e.get(i,"lang")||"en"),s=[];var m=["region","province","city","county","cfirst","clast","cname","cparagraph","csentence","cword","ctitle"];function f(r){return r=String(r),e.startsWith(r,"$")?m.includes(e.trimStart(r,"$"))?String(r):c.mock("@".concat(e.trimStart(r,"$"))):c.mock(r)}var d=function(){return Math.round(100*Math.random())%2==1},p=function(r,t){if(e.isBoolean(t))return t;var n=Array.isArray(r)?null==r?void 0:r[r.length-1]:void 0;return!!(Array.isArray(t)&&e.isString(n)&&t.includes(n))};function v(n,m,h,k){var y,g,b,O,A;void 0===n&&(n=[]);var j=e.isArray(m)?e.first(m.type):m.type,_=p(n,h),x=null!==(y=null==m?void 0:m.apipiost_allow_null)&&void 0!==y&&y,M=null!==(g=null==m?void 0:m.description)&&void 0!==g?g:"",S=m.required,w=function(r,e){s.push({path:n,value:r,type:e,allow_null:x,description:M,is_required:_})};if(x&&d())return w(null,j),null;var q=function(r){var e=r[Math.floor(Math.random()*r.length)];return v(n,e,S,k)};if(Array.isArray(m.oneOf))return q(m.oneOf);if(Array.isArray(m.anyOf))return q(m.anyOf);var F=function(r){if(void 0!==m[r]&&void 0===m.format&&void 0===m._format&&e.isEmpty(m.mock)){var t=m[r];switch(j){case"string":t=String(t);break;case"number":case"integer":t=Number(t);break;case"boolean":t=Boolean(t)}return w(t,j),t}},N=F("default");if(void 0!==N)return N;var E=F("example");if(void 0!==E)return E;if(Array.isArray(m.enum)){var D=m.enum[Math.floor(Math.random()*m.enum.length)];return w(D,j),D}switch(j){case"null":return w(null,j),null;case"boolean":var I=function(r){if("string"==typeof r){if("true"===r.trim())return!0;if("false"===r.trim())return!1}else if("number"==typeof r){if(1===r)return!0;if(0===r)return!1}else if("boolean"==typeof r)return r;return null}(null===(b=m.mock)||void 0===b?void 0:b.mock);return null===I&&(I=Math.random()<.5),w(String(I),j),I;case"object":w("-",j);var L={};if(m.properties&&Object.keys(m.properties).length>0)for(var P in m.properties)L[P]=v(r(r([],n,!0),[P],!1),m.properties[P],S,k);return L;case"array":if(w("-",j),!m.items)return[];var R=m.items,z=[];for(Array.isArray(R.anyOf)&&z.push(v(n,R.anyOf[Math.floor(Math.random()*R.anyOf.length)],S,k)),Array.isArray(R.oneOf)&&z.push(v(n,R.oneOf[Math.floor(Math.random()*R.oneOf.length)],S,k));z.length<(m.minItems||1);)z.push(v(n,R,S,k));return m.maxItems?z.slice(0,m.maxItems):z;case"string":var T=null;if(Array.isArray(m.enum))T=m.enum[Math.floor(Math.random()*m.enum.length)];else{var W=m.minLength,$=void 0===W?0:W,G=m.maxLength,J=void 0===G?36:G,B={};if(e.forEach(e.omit(e.assign(o,{email:function(){return u.internet.email({provider:"gmail.com"})},ipv4:function(){return u.internet.ipv4()},ipv6:function(){return u.internet.ipv6()},"ip-address":function(){return u.internet.ipv4()},alpha:function(){return u.word.sample()},"host-name":function(){return u.internet.domainName()},hostname:function(){return u.internet.domainName()},uri:function(){return u.internet.url()},phone:function(){return u.phone.number({style:"international"})},uuid:t.v4(),color:u.color.rgb({casing:"upper"}),date:u.date.anytime(),"date-time":u.date.anytime()}),["utc-millisec","regex","regexp","pattern"]),(function(r,t){if(e.isFunction(r))B[t]=r();else{var n=e.get(c.mock({regexp:r}),"regexp");e.isUndefined(n)||(B[t]=n)}})),B[m.format])T=B[m.format];else if(e.isObject(a[m._format])&&e.isFunction(a[m._format].get)&&e.isFunction(a[m._format].varify)&&a[m._format].varify(null==m?void 0:m.example))try{T=a[m._format].get(null==m?void 0:m.example,e.get(i,"lang")||"en")}catch(r){T=u.word.words({count:{min:$,max:J}})}else{if(K=m.mockField||(null===(O=m.mock)||void 0===O?void 0:O.mock)||"")T=K.startsWith("@")||K.startsWith("$")?String(f(K)):u.word.words({count:{min:1,max:5}});else try{T=!(V=l(n[n.length-1],m.type,k))||1!==V.mock_type&&2!==V.mock_type?u.word.words({count:{min:$,max:J}}):f(String(V.mock))}catch(r){T=u.word.words({count:{min:$,max:J}})}}}return w(T,j),T;case"number":case"integer":var H="integer"===j,X=null,Z=void 0!==m.minimum?m.exclusiveMinimum?m.minimum+1:m.minimum:Number.MIN_SAFE_INTEGER,C=void 0!==m.maximum?m.exclusiveMaximum?m.maximum-1:m.maximum:Number.MAX_SAFE_INTEGER;if(m.multipleOf)X=Math.floor(Math.random()*((C-Z)/m.multipleOf))*m.multipleOf+Z;else if(Array.isArray(m.enum)){var U=m.enum.filter((function(r){return r>=Z&&r<=C}));X=U.length>0?Number(U[Math.floor(Math.random()*U.length)]):null}else{var K;if(K=m.mockField||(null===(A=m.mock)||void 0===A?void 0:A.mock)||"")try{var Q=Number(f(K));isNaN(Q)||(X=Q)}catch(r){X=H?f("@integer(".concat(Z,", ").concat(C,")")):u.number.float({min:Z,max:C,fractionDigits:3})}else try{var V;X=!(V=l(n[n.length-1],m.type,k))||1!==V.mock_type&&2!==V.mock_type?H?f("@integer(".concat(Z,", ").concat(C,")")):u.number.float({min:Z,max:C,fractionDigits:3}):Number(f(String(V.mock)))}catch(r){X=H?f("@integer(".concat(Z,", ").concat(C,")")):u.number.float({min:Z,max:C,fractionDigits:3})}}return w(X,j),X;default:return{}}}function h(r){return r.allOf&&r.allOf[0]&&(r=e.reduce(r.allOf,(function(r,t){return e.merge({},r,h(t))}),r)),r}Object.defineProperty(this,"mock",{value:function(r,t){return s=[],r=e.cloneDeep(r),new Promise((function(i,a){r=h(r),n.dereference(r,(function(r,n){if(r)a({});else try{!function r(t){var n,i;if(e.isObject(t.properties))for(var a in t.properties)e.isObject(t.properties[a].mock)&&e.isString(t.properties[a].mock.mock)?t.properties[a].mockField=t.properties[a].mock.mock:t.properties[a].mockField="",t.properties&&e.isObject(t.properties[a])&&r(t.properties[a]);else if(e.isArray(t))for(var o=0,u=t;o<u.length;o++){var c=u[o];e.isObject(c.mock)&&e.isString(c.mock.mock)?c.mockField=c.mock.mock:c.mockField="",t.properties&&e.isObject(c)&&r(c)}else"array"===t.type&&e.isObject(t.items)?r(t.items):e.isString(null===(n=null==t?void 0:t.mock)||void 0===n?void 0:n.mock)&&(t.mockField=null===(i=null==t?void 0:t.mock)||void 0===i?void 0:i.mock),e.isArray(t.oneOf)&&r(t.oneOf),e.isArray(t.anyOf)&&r(t.anyOf),e.isArray(t.allOf)&&r(t.allOf)}(n),i(v([],n,!0,t))}catch(r){a({})}}))}))}}),Object.defineProperty(this,"intelligentMockJs",{value:f}),Object.defineProperty(this,"getMockDataList",{value:function(){return s}})};