iron-enum
Version: 
Rust like enums for Typescript
1 lines • 3.54 kB
JavaScript
;function r(r,t,e,o){if("_"===t)throw new Error("'_' is reserved as a fallback key.");const n={},s={tag:t,data:e,instance:o,toJSON:()=>({tag:t,data:e}),is:r=>r===t,if:(r,o,s)=>{if(r===t){if(o){const r=o(e,n);return void 0===r||r}return!0}if(s){const r=s(n);return void 0!==r&&r}return!1},ifNot:(r,o,s)=>{if(r!==t){if(o){const r=o(n);return void 0===r||r}return!0}if(s){const r=s(e,n);return void 0!==r&&r}return!1},match:r=>{const o=r[t],s=o??r._;if(!s)throw new Error(`No handler for '${String(t)}' and no '_' fallback`);return o?s(e,n):s(n)},matchAsync:async r=>{const o=r[t],s=o??r._;if(!s)throw new Error(`No handler for '${String(t)}' and no '_' fallback`);return o?s(e,n):s(n)},matchExhaustive:r=>(0,r[t])(e,n)};return Object.assign(n,s),n}function t(t){const e=t?.keys;let o={};const n=t=>{const n=t.tag;if(e?.length&&!e.includes(n))throw new Error(`Unexpected variant '${n}'`);return r(0,n,t.data,o)},s={typeTags:void 0,typeData:void 0,typeOf:void 0,typeJson:void 0,parse:n,fromJSON:n,reviver:r=>r&&"object"==typeof r&&"tag"in r&&"data"in r?n(r):r};if(e?.length){o={_:s};for(const t of e)o[t]=(...e)=>r(0,t,e[0],o);return o}const p=new Set(["toString","valueOf","inspect","constructor"]);return o=new Proxy({},{get:(t,e)=>{if("_"===e)return s;if("string"==typeof e){if(p.has(e)){const r=Object.prototype[e];return"function"==typeof r?r.bind(o):void 0}return(...t)=>{const n=t[0];return r(0,e,n,o)}}}}),o}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=t;exports.Result=()=>(()=>{const r=t({keys:["Err","Ok"]});return{_:r._,Ok:t=>{const e=r.Ok(t);return Object.assign(e,{unwrap:()=>t,unwrap_or:()=>t,unwrap_or_else:()=>t,isOk:()=>!0,isErr:()=>!1,ok:()=>(0,exports.Option)().Some(t),map:r=>(0,exports.Result)().Ok(r(t)),mapErr:r=>(0,exports.Result)().Ok(t),andThen:r=>r(t)})},Err:t=>{const e=r.Err(t);return Object.assign(e,{unwrap:()=>{throw t instanceof Error?t:new Error(String(t??"Err"))},unwrap_or:r=>r,unwrap_or_else:r=>r(),isOk:()=>!1,isErr:()=>!0,ok:()=>(0,exports.Option)().None(),map:r=>(0,exports.Result)().Err(t),mapErr:r=>(0,exports.Result)().Err(r(t)),andThen:r=>(0,exports.Result)().Err(t)})}}})();exports.Ok=r=>(0,exports.Result)().Ok(r);exports.Err=r=>(0,exports.Result)().Err(r);exports.Option=()=>(()=>{const r=t({keys:["None","Some"]});return{_:r._,Some:t=>{const e=r.Some(t);return Object.assign(e,{isSome:()=>!0,isNone:()=>!1,unwrap:()=>t,unwrap_or:()=>t,unwrap_or_else:()=>t,ok_or:r=>(0,exports.Result)().Ok(t),ok_or_else:r=>(0,exports.Result)().Ok(t),map:r=>(0,exports.Option)().Some(r(t)),andThen:r=>r(t),filter:r=>r(t)?(0,exports.Option)().Some(t):(0,exports.Option)().None()})},None:()=>{const t=r.None();return Object.assign(t,{isSome:()=>!1,isNone:()=>!0,unwrap:()=>{throw new Error("Called unwrap() on Option.None")},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()),map:r=>(0,exports.Option)().None(),andThen:r=>(0,exports.Option)().None(),filter:r=>(0,exports.Option)().None()})}}})();exports.Some=r=>(0,exports.Option)().Some(r);exports.None=()=>(0,exports.Option)().None(),exports.Try={sync(r){const t=(0,exports.Result)();try{return t.Ok(r())}catch(r){return t.Err(r)}},async async(r){const t=(0,exports.Result)();try{return t.Ok(await r())}catch(r){return t.Err(r)}}},exports.TryInto={sync:r=>(...t)=>exports.Try.sync(()=>r(...t)),async:r=>async(...t)=>exports.Try.async(()=>r(...t))};