UNPKG

mimicry-js

Version:

TS library for generating fake data for tests

2 lines (1 loc) 4.55 kB
class t{constructor(t){this.value=t}}function n(n){return new t(n)}function e(t){if("object"!=typeof t||null===t||Array.isArray(t))return!1;const n=Object.getPrototypeOf(t);return null!==n&&n!==Object.prototype}function r(t){return"object"==typeof t&&null!==t&&"function"==typeof(null==t?void 0:t.next)}function i(t){return!(!t||"object"!=typeof t||Array.isArray(t)||e(t)||r(t)||"[object Object]"!==Object.prototype.toString.call(t))}function o(t,n){if(!i(t)||!i(n))return n;const e=Object.assign({},t);return Object.keys(n).forEach((t=>{const r=e[t],s=n[t];i(s)&&i(r)?e[t]=o(r,s):e[t]=s})),e}class s{constructor(t){this.generator=t}}function l(t){return new s(t)}const u=t=>{const n=t instanceof s;const e=i(t),r=function(t){return"function"==typeof t}(t);return{originFields:e?t:{},originFieldsFunction:r?t:null,originFieldsGenerator:n?t.generator:null}};class c{constructor(){this._listeners=new Set}listen(t){this._listeners.has(t)||this._listeners.add(t)}}class a extends c{constructor(){super()}reset(){for(const t of this._listeners.keys())t()}get listenersCount(){return this._listeners.size}}const f=function(n){const s=u(n.fields),l=n.traits,c=n.postBuild;let f,d=null,h=null;const y=new a,v=(t,n)=>{if(!i(t))return t;const e=function(t){var n;return null!==(n=null==t?void 0:t.overrides)&&void 0!==n?n:{}}(n),r=function(t){const n=null==t?void 0:t.traits;return Array.isArray(n)?n:n?[n]:[]}(n).reduce(((t,n)=>{var e;(null==l?void 0:l[n])||console.warn(`Trait "${String(n)}" is not specified in buildConfig!`);return o(t,null!==(e=(l?l[n]:{}).overrides)&&void 0!==e?e:{})}),{}),s=o(t,r),u=o(s,e);return c=u,a=t=>p(t),Object.keys(c).reduce(((t,n)=>(t[n]=a(c[n],n,t),t)),{});var c,a},g=t=>{if(null!==d)return d;const n={};for(const e in t){const o=t[e];if(r(o))n[e]=o;else if(i(o)){const t=g(o);Object.keys(t).length&&(n[e]=t)}}return d=n,d},p=n=>null==n?n:n instanceof t?n.value:function(t){return"function"==typeof t&&!/^class\s+/.test(Function.prototype.toString.call(t))}(n)?n():r(n)?n.next(y).value:e(n)?n:Array.isArray(n)?n.map((t=>p(t))):i(n)?v(n):n,w=t=>{if(!s.originFieldsGenerator)return;const n=(e=null==t?void 0:t.initialParameters,Array.isArray(e)?e:[]);var e;h=s.originFieldsGenerator(...n)},A=t=>{let n;if(s.originFieldsFunction){const t=s.originFieldsFunction(f);n=o(t,g(t))}else if(s.originFieldsGenerator){if(!h)throw Error("The fields GeneratorFunction isn't initialized!");const t=h.next(f).value;n=o(t,g(t))}else n=s.originFields;const e=v(n,t);f=e;const r=c?c(e):e;return(null==t?void 0:t.postBuild)?t.postBuild(r):r};return{one:t=>(w(t),A(t)),many:(t,n)=>(w(n),Array(t).fill(0).map((()=>A(n)))),reset:()=>{y.reset()}}},d=624;class h{constructor(t){this.MT=new Array(d),this.index=d,this.seed(t)}seed(t){this.MT[0]=t>>>0;for(let t=1;t<d;t++)this.MT[t]=1812433253*(this.MT[t-1]^this.MT[t-1]>>>30)+t>>>0;this.index=d}twist(){for(let t=0;t<d;t++){const n=(2147483648&this.MT[t])+(2147483647&this.MT[(t+1)%d]);this.MT[t]=this.MT[(t+397)%d]^n>>>1,n%2!=0&&(this.MT[t]^=2567483615)}this.index=0}random(){this.index>=d&&this.twist();let t=this.MT[this.index++];return t^=t>>>11,t^=t<<7&2636928640,t^=t<<15&4022730752,t^=t>>>18,(t>>>0)/4294967296}}function y(){return Math.floor(1e3*Math.random())}let v=y(),g=new h(v);function p(t=y()){v=t,g=new h(v)}function w(){return v}function A(){return g.random()}function b(t,n){var e;if(t=void 0!==t&&void 0!==n?t:1,n=null!==(e=null!=n?n:t)&&void 0!==e?e:1e3,!Number.isInteger(t)||!Number.isInteger(n))throw new Error("int() expects integer arguments!");t>n&&([t,n]=[n,t]);const r=n-t+1;return Math.floor(A()*r)+t}function*F(t,...n){const e=Array.isArray(t)?t:[t,...n];for(;;)yield e[b(0,e.length-1)]}function M(t){let n,e=t;function r(){e=t}return{val:()=>e,set:t=>(e=t,e),use(t){if(!t)throw Error("An instance of `ResetSignal` was not provided!");return n!==t&&(n=t,n.listen(r)),n}}}function*T(t){const{val:n,set:e,use:r}=M(0);for(;;)r(yield t?t(e(n()+1)):e(n()+1))}function j(t){return function*(){let n;for(;;)n=t(n),yield n}()}function x(){return F(!0,!1)}function*m(t,...n){const e=Array.isArray(t)?t:[t,...n],{val:r,set:i,use:o}=M(e.concat());for(;;){const t=r().concat();if(!t.length)throw new Error("No unique options left!");const n=b(0,t.length-1),e=t[n];t.splice(n,1),i(t),o(yield e)}}function O(t,n){var e;return(t=void 0!==t&&void 0!==n?t:0)>(n=null!==(e=null!=n?n:t)&&void 0!==e?e:1)&&([t,n]=[n,t]),A()*(n-t)+t}export{x as bool,f as build,n as fixed,O as float,l as generate,w as getSeed,b as int,F as oneOf,M as resetable,p as seed,T as sequence,m as unique,j as withPrev};