UNPKG

@ayka/domistrukt

Version:

A TypeScript library for creating structured data objects with ease.

2 lines 10.8 kB
var M=Object.defineProperty;var pt=Object.getOwnPropertyDescriptor;var n=(s,t)=>M(s,"name",{value:t,configurable:!0});var i=(s,t)=>{for(var e in t)M(s,e,{get:t[e],enumerable:!0})};var U=(s,t,e,r)=>{for(var a=r>1?void 0:r?pt(t,e):t,o=s.length-1,c;o>=0;o--)(c=s[o])&&(a=(r?c(t,e,a):c(a))||a);return r&&a&&M(t,e,a),a};var O={};i(O,{klass:()=>ht,lazy:()=>_,makeConstructor:()=>yt,promiseObject:()=>dt,redefineAsAccessors:()=>R,selectKeys:()=>N});var ht=n(()=>class{},"klass"),N=n((s,t)=>{let e={};for(let r of t)e[r]=s[r];return e},"selectKeys"),yt=n(s=>(...t)=>Reflect.construct(s,t),"makeConstructor"),H=n((s,t,e)=>{Object.defineProperty(s,t,{get(){return e}})},"defineGetter"),R=n((s,t)=>{for(let e of t){let r=s[e];H(s,e,r),Object.defineProperty(s,e,{set(a){H(s,e,a)}})}return s},"redefineAsAccessors"),_=n(s=>{let{useValue:t=!0,configurable:e=!0,writable:r=!0,enumerable:a=!0}=s??{};return(o,c,u)=>{if(u.get==null)return;let it=u.get;u.get=n(function(){let E=it.call(this);return Object.defineProperty(this,c,t?{value:E,writable:r,enumerable:a,configurable:e}:{get(){return E},set(lt){E=lt},configurable:e,enumerable:a}),E},"lazy")}},"lazy"),dt=n(async s=>{let t=Object.entries(s).map(([r,a])=>a.then(o=>[r,o])),e=await Promise.all(t);return Object.fromEntries(e)},"promiseObject");var tt={};i(tt,{init:()=>W,initBasic:()=>X,isBasicStrukt:()=>Z,isStrukt:()=>Y});var F={};i(F,{BasicStrukt:()=>y,StruktBase:()=>k,construct:()=>f,t:()=>k});import*as Q from"immutable";var f=n(s=>{let t={...s.data};return Reflect.deleteProperty(t,"__proto__"),Object.assign(s.target,t),R(s.target,s.hidden),s.target},"construct"),y=class{static{n(this,"BasicStrukt")}constructor(t){f({target:this,data:t.data,hidden:t.hidden})}},k=class extends y{static{n(this,"StruktBase")}#t;#r;constructor(t){super(t),this.#t=Q.List(Object.keys(t.data)),this.#r=[...t.hidden]}get $$argsT(){}get $$args1T(){}get $$dataT(){}$dataKeys(){return this.#t.toArray()}$data(){let t={};return this.#t.forEach(e=>{t[e]=Reflect.get(this,e)}),t}$selectKeys(t){return N(this,t)}$clone(){let t=f({target:{},data:this,hidden:this.#r});return Object.setPrototypeOf(t,Object.getPrototypeOf(this)),t}$update(t){let e=f({target:{},data:{...this,...t},hidden:this.#r});return Object.setPrototypeOf(e,Object.getPrototypeOf(this)),e}$patch(t){let e=t(this.$clone());return this.$update(e)}$create(...t){return new this.constructor(...t)}};var W=n(s=>{let t=s.constructor,e=s.hidden??[];class r extends k{static{n(this,"Strukt")}constructor(...o){let c=t(...o);super({data:c,hidden:e})}}return r},"init"),X=n(s=>{let t=s.constructor,e=s.hidden??[];class r extends y{static{n(this,"Strukt")}constructor(...o){let c=t(...o);super({data:c,hidden:e})}}return r},"initBasic"),Y=n(s=>s instanceof k,"isStrukt"),Z=n(s=>s instanceof y,"isBasicStrukt");var D={};i(D,{Switch:()=>v,SwitchContext:()=>$,SwitchNoMatch:()=>d,compileSwitch:()=>P,continueSymbol:()=>z,switchCase:()=>j,t:()=>v});import*as I from"immutable";var S={};i(S,{ErrorStruktBase:()=>x,init:()=>h,isErrorStrukt:()=>rt,staticError:()=>et});var x=class extends Error{static{n(this,"ErrorStruktBase")}message;meta;constructor(t,e){let r={...e},a=r.message??t;super(a,r.cause==null?void 0:{cause:r.cause}),this.message=a,this.name=this.constructor.name,delete r.cause,delete r.message,this.meta=r}},et=n(s=>{let t=s?.message??"";class e extends x{static{n(this,"StaticStruktError")}constructor(a,o){let c=typeof a=="string"?o:a,u=typeof a=="string"?a:t;super(u,c)}}return e},"staticError"),h=n(s=>{let t=s.constructor;class e extends x{static{n(this,"StruktError")}data;constructor(a,o){let{data:c,message:u}=t(a);super(u??"",o),this.data=c}}return e},"init"),rt=n(s=>s instanceof x,"isErrorStrukt");var z=Symbol("switch/continue"),$=class{static{n(this,"SwitchContext")}data;target;constructor(t){this.target=t.target,this.data=t.data??{}}continue(){return z}};var v=class s{static{n(this,"Switch")}target;#t;#r;constructor(t){this.target=t?.target,this.#t=I.List(t?.dispatchers),this.#r=t?.mapper}clone(){return this.#s()}#s(t){return new s({target:t?.target??this.target,dispatchers:t?.dispatchers??this.#t,mapper:t?.mapper??this.#r})}#n(){return this.#s({target:void 0})}save(){let t=this.#n();return(e,r)=>t.run(e,r)}run(t,e){if(t==null)return this.run(this.target,e);let r=new $({data:e,target:t});for(let a of this.#t){if(!a.test(t,r))continue;let o=a.callback(t,r);if(o!==z)return this.#r!=null?this.#r(o,r):o}throw new d(t)}verify(...t){return this}saveStrict(...t){return this.save()}runStrict(...t){return this.run()}#e(t){return this.#s({dispatchers:this.#t.push(t)})}when(t,e){return typeof t=="boolean"?this.#e({test:n(()=>t,"test"),callback:e}):this.#e({test:t,callback:e})}otherwise(t){return this.#e({test:n(()=>!0,"test"),callback:t})}otherwiseThrow(t){return t==null?this.otherwise(()=>{throw new d(this.target)}):t instanceof Error?this.otherwise(()=>{throw t}):this.otherwise((e,r)=>{let a=new d(this.target);throw t({target:e,ctx:r,cause:a})})}whenValue(t,e){if(!Array.isArray(t))return this.#e({test:n(a=>a===t,"test"),callback:e});let r=I.Set(t);return this.#e({test:n(a=>r.has(a),"test"),callback:e})}whenInstance(t,e){return Array.isArray(t)?this.#e({test:n(r=>t.some(a=>r instanceof a),"test"),callback:e}):this.#e({test:n(r=>r instanceof t,"test"),callback:e})}whenString(t){return this.whenTypeOf("string",t)}whenNumber(t){return this.whenTypeOf("number",t)}whenBoolean(t){return this.whenTypeOf("boolean",t)}whenSymbol(t){return this.whenTypeOf("symbol",t)}whenBigint(t){return this.whenTypeOf("bigint",t)}whenTypeOf(t,e){return this.#e({test:n(r=>typeof r===t,"test"),callback:e})}whenUndefined(t){return this.#e({test:n(e=>e===void 0,"test"),callback:t})}whenNull(t){return this.#e({test:n(e=>e===null,"test"),callback:t})}whenOptional(t){return this.#e({test:n(e=>e==null,"test"),callback:t})}whenTrue(t){return this.#e({test:n(()=>!0,"test"),callback:t})}whenFalse(t){return this.#e({test:n(()=>!1,"test"),callback:t})}map(t){if(this.#r==null)return this.#s({mapper:t});let e=this.#r;return this.#s({mapper:n((r,a)=>t(e(r,a),a),"mapper")})}},j=n(s=>new v({target:s}),"switchCase"),P=n(()=>new v,"compileSwitch"),d=class extends h({constructor(t){return{data:{value:t},message:`No match found and no default provided for ${t}`}}}){static{n(this,"SwitchNoMatch")}};var ot={};i(ot,{DispatchMapKeyNotFound:()=>g,EnumAssertionError:()=>b,SwitchNoMatch:()=>d});var nt={};i(nt,{DispatchMap:()=>V,DispatchMapKeyNotFound:()=>g,DispatchMapSearchFailed:()=>L,init:()=>st,t:()=>V});var B=class B{static{n(this,"DispatchMap")}#t;constructor(t){this.#t={...t}}get shape(){return this.#t}get $$key(){}get $$value(){}get $$entry(){}has(t){return t in this.#t}keys(){return Object.keys(this.#t)}values(){return Object.values(this.#t)}entries(){return Object.entries(this.#t).map(([t,e])=>({key:t,value:e}))}get(t){if(!this.has(t))throw new g({key:t,map:this});return this.#t[t]}getSafe(t,e){return this.has(t)?this.get(t):e}index(t){return this.get(t)}indexSafe(t,e){return this.getSafe(t,e)}get reverse(){let t={};for(let{key:e,value:r}of this.entries())r in t||(t[r]=e);return new B(t)}reverseFind(t){return this.entries().find(r=>t(r))?.key}reverseFindOne(t){for(let e of this.entries())if(t(e))return e.key;throw new L({map:this})}reverseFindMany(t){return this.entries().filter(e=>t(e)).map(({key:e})=>e)}};U([_()],B.prototype,"reverse",1);var V=B,st=n(s=>new V(s),"init"),g=class extends h({constructor(t){let{key:e,map:r}=t,a=r.keys(),o={key:e,map:r,keys:a},c=a.join(", "),u=`Key not found: ${e}. Available keys: ${c}`;return{data:o,message:u}}}){static{n(this,"DispatchMapKeyNotFound")}},L=class extends h({constructor(t){let{map:e}=t;return{data:{map:e},message:"Search failed"}}}){static{n(this,"DispatchMapSearchFailed")}};var at={};i(at,{Enum:()=>A,EnumAssertionError:()=>b,init:()=>T,t:()=>A});import*as q from"immutable";var A=class{static{n(this,"Enum")}#t;constructor(t){this.#t=q.Set(t);let e={};for(let r of t)e[r]=r;f({target:this,data:e,hidden:[]})}get $$t(){}get $values(){return this.#t}[Symbol.iterator](){return this.#t[Symbol.iterator]()}$has(t){return this.#t.has(t)}$is(t,e){return t===e}$assert(t,e){let r=e?q.Set(e):this.#t;if(!r.has(t))throw new b({target:t,expected:r.toArray()});return t}$toArray(){return this.#t.toArray()}$subEnum(t){return T(t)}$add(...t){return T(this.#t.union(t))}$remove(...t){let e=this.#t.subtract(t);return T(e)}$switchCase(t){return j(t)}$assertSwitchCase(t){return this.$switchCase(this.$assert(t))}$compileSwitch(){return P()}},T=n(s=>new A(s),"init"),b=class extends h({constructor(t){let{target:e,expected:r}=t,a={target:e,expected:r};return{message:`Invalid enum value: ${e}. Expected one of: ${r.join(", ")}`,data:a}}}){static{n(this,"EnumAssertionError")}};var ut={};i(ut,{FlatObject:()=>K,copy:()=>ct,flatObject:()=>C,fromObject:()=>J,isTrueObject:()=>G,makeKeys:()=>w,t:()=>K,toFlatObject:()=>J});import*as m from"immutable";var J=n(s=>{let t=m.Map(),e=m.Stack(Object.keys(s).map(r=>w([r])));for(;!e.isEmpty();){let r=e.peek();e=e.pop();let a=r.reduce((c,u)=>c[u],s);if(!G(a)){t=t.set(r,a);continue}let o=Object.keys(a).map(c=>r.push(c));if(o.length===0){t=t.set(r,a);continue}e=e.pushAll(o)}return C(t)},"fromObject"),ct=n(s=>J(s).toJS(),"copy"),C=n(s=>new K(s??m.Map()),"flatObject"),w=n(s=>m.List(s),"makeKeys"),G=n(s=>s!=null&&s.__proto__===Object.prototype,"isTrueObject");var K=class{static{n(this,"FlatObject")}#t;constructor(t){this.#t=t}get index(){return this.#t}get(t){return this.#t.get(w(t))}set(t,e){let r=this.#t.set(w(t),e);return C(r)}setMut(t,e){return this.#t=this.#t.set(w(t),e),this}has(t){return this.#t.has(w(t))}toJS(){let t={};return this.entries().forEach(e=>{let r=t;e.keys.butLast().forEach(o=>{o in r||(r[o]={}),r=r[o]});let a=e.keys.last();a!=null&&(r[a]=e.value)}),t}transform(t){let e=t(this.#t);return C(e)}map(t){return this.transform(e=>e.map(t))}filter(t){return this.transform(e=>e.filter(t))}merge(t){return this.transform(e=>e.merge(t.index))}keys(){return this.#t.keySeq().toList()}values(){return this.#t.valueSeq().toList()}entries(){return this.#t.entrySeq().map(([t,e])=>({value:e,keys:t})).toList()}get size(){return this.#t.size}isEmpty(){return this.#t.isEmpty()}isNotEmpty(){return!this.isEmpty()}};export{k as Base,y as Basic,nt as DispatchMap,at as Enum,S as Error,ot as Errors,ut as FlatObject,O as Lib,tt as Strukt,F as StruktBase,D as Switch,P as compileSwitch,ct as copy,st as dispatchMap,h as error,W as init,X as initBasic,T as initEnum,C as initFlatObject,Z as isBasicStrukt,rt as isErrorStrukt,Y as isStrukt,G as isTrueObject,ht as klass,_ as lazy,yt as makeConstructor,dt as promiseObject,R as redefineAsAccessors,N as selectKeys,et as staticError,j as switchCase,J as toFlatObject}; //# sourceMappingURL=Main.js.map