iron-enum
Version:
Rust like enums for Typescript
1 lines • 3.19 kB
JavaScript
;function enumFactory(r,t,e){if("_"===t)throw new Error('Variant key "_" is reserved; cannot use "_" as a variant name.');return{tag:t,data:e,payload:e,toJSON:()=>({[t]:e}),key:()=>t,if:new Proxy({},{get:(r,o)=>(r,n)=>{if(o===t){if(r){const t=r(e);return void 0===t||t}return!0}if(n){const r=n({[t]:e});return void 0!==r&&r}return!1}}),ifNot:new Proxy({},{get:(r,o)=>(r,n)=>{if(o!==t){if(r){const o=r({[t]:e});return void 0===o||o}return!0}if(n){const r=n({[t]:e});return void 0!==r&&r}return!1}}),match:r=>{const o=r[t];if(o)return o(e);const n=r._;if(n)return n();throw new Error(`No handler for variant "${String(t)}" and no "_" fallback`)},matchAsync:async r=>{const o=r[t];if(o)return await o(e);const n=r._;if(n)return await n();throw new Error(`No handler for variant "${String(t)}" and no "_" fallback`)}}}function IronEnum(){return new Proxy({},{get:(r,t)=>"_"===t?new Proxy({},{get:(r,t)=>{if("parse"==t)return r=>{const t=Object.keys(r);if(1!==t.length)throw new Error(`Expected exactly 1 variant key, got ${t.length}`);const e=t[0];return enumFactory({},e,r[e])};throw new Error(`Property '${t}' not availalbe at runtime!`)}}):(...r)=>{const e=0===r.length?{}:r[0];return enumFactory({},t,e)}})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.TryInto=exports.Try=exports.None=exports.Some=exports.Option=exports.Err=exports.Ok=exports.Result=void 0,exports.IronEnum=IronEnum;const Result=()=>(()=>{const r=IronEnum();return{_:r._,Ok:t=>({...r.Ok(t),unwrap:()=>t,unwrap_or:r=>t,isOk:()=>!0,isErr:()=>!1,unwrap_or_else:r=>t,ok:()=>(0,exports.Option)().Some(t)}),Err:t=>({...r.Err(t),unwrap:()=>{throw t instanceof Error?t:"string"==typeof t?new Error(t):null!=t&&"function"==typeof t.toString?new Error(t.toString()):new Error("Called .unwrap() on an Result.Err enum!")},isOk:()=>!1,isErr:()=>!0,unwrap_or:r=>r,unwrap_or_else:r=>r(),ok:()=>(0,exports.Option)().None()})}})();exports.Result=Result;const Ok=r=>(0,exports.Result)().Ok(r);exports.Ok=Ok;const Err=r=>(0,exports.Result)().Err(r);exports.Err=Err;const Option=()=>(()=>{const r=IronEnum();return{_:r._,Some:t=>({...r.Some(t),isSome:()=>!0,isNone:()=>!1,unwrap:()=>t,unwrap_or:r=>t,unwrap_or_else:r=>t,ok_or:r=>(0,exports.Result)().Ok(t),ok_or_else:r=>(0,exports.Result)().Ok(t),_try:()=>null}),None:()=>({...r.None(),isSome:()=>!1,isNone:()=>!0,unwrap:()=>{throw new Error("Called .unwrap() on an Option.None enum!")},unwrap_or:r=>r,unwrap_or_else:r=>r(),ok_or:r=>(0,exports.Result)().Err(r),ok_or_else:r=>(0,exports.Result)().Err(r()),_try:()=>null})}})();exports.Option=Option;const Some=r=>(0,exports.Option)().Some(r);exports.Some=Some;const None=()=>(0,exports.Option)().None();exports.None=None,exports.Try={sync:r=>{try{const t=r();return(0,exports.Result)().Ok(t)}catch(r){return(0,exports.Result)().Err(r)}},async:async r=>{try{const t=await r();return(0,exports.Result)().Ok(t)}catch(r){return(0,exports.Result)().Err(r)}}},exports.TryInto={sync:r=>(...t)=>{try{const e=r(...t);return(0,exports.Result)().Ok(e)}catch(r){return(0,exports.Result)().Err(r)}},async:r=>async(...t)=>{try{const e=await r(...t);return(0,exports.Result)().Ok(e)}catch(r){return(0,exports.Result)().Err(r)}}};