From 43deedc18594179494b6aa2759915188fa6cc5f3 Mon Sep 17 00:00:00 2001 From: Bopanna Mj Date: Sun, 3 Sep 2023 18:21:28 +0530 Subject: [PATCH] Updated ReadMe --- README.md | 71 +++++ lib/bs/.bsdeps | 2 +- lib/bs/.compiler.log | 4 +- out/main.js | 75 ++++++ package-lock.json | 613 ++++++++++++++++++++++++++++++++++++++++--- package.json | 19 +- rescript-decode.png | Bin 0 -> 63538 bytes 7 files changed, 737 insertions(+), 47 deletions(-) create mode 100644 out/main.js create mode 100644 rescript-decode.png diff --git a/README.md b/README.md index e69de29..07b68e4 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,71 @@ +# Rescript Decode + +Rescript Decode is a sophisticated Visual Studio Code extension meticulously crafted to streamline the process of transforming complex JSON objects into type-safe Rescript data structures. With Rescript Decode, you can effortlessly decode intricate data structures into precise Rescript types, ensuring robust and error-free code. + +## Table of Contents + + +- [Usage](#usage) +- [Installation](#installation) +- [Features](#features) +- [Contributing](#contributing) + + +## Usage + +![Alt Text](./rescript-decode.png) + +For every Rescript type, a conveniently located interface button allows effortless generation of decode functions. A simple click on this button triggers the automatic creation of the function, which is then seamlessly copied to your clipboard for immediate and convenient integration into your codebase. + +- Utilize the `enableDecodeButton` command to activate the decode button, which will be displayed above Rescript types. + +## Installation + +To make the most of this extension, follow these installation steps: + +1. **Clone or Download**: + - Clone or download the extension's source code from the [GitHub repository](https://github.com/dilanbopanna/rescript-decode-vscode). + +2. **Main File and Commands**: + - In the extension's primary file (`execution.js`), two vital commands are available: `enableDecodeButton` and `generateDecode`. +### Generating Decode Functions + +- Upon clicking the decode button, it triggers the `generateDecode` command. +- This command invokes a Rescript function that dynamically generates decode functions for each Rescript type. +- The generated decode function is automatically copied to your clipboard for effortless integration into your codebase. + +## Features + +### 1. **Effortless Decoding** + +Easily decode complex JSON objects into precise Rescript types with just a few clicks. Say goodbye to manual decoding and reduce the risk of runtime errors. + +### 2. **Customizable Decoding Logic** + +Tailor decoding logic to your project's specific requirements. Handle optional and nested fields with ease and create reusable decoders for your data structures. + +### 3. **Seamless Integration** + +Effortlessly integrate the Rescript Decode extension into your existing Rescript projects. Ensure compatibility and consistency across your codebase. + +## Contributing + +I welcome any kind of contributions to make this extension even better. If you'd like to contribute, here's how you can get involved: + +1. **Fork the Repository**: Start by forking this repository to your GitHub account. + +2. **Clone the Repository**: Clone the forked repository to your local development environment. + +3. **Create a Branch**: Create a new branch for your contribution to keep your work isolated. + +4. **Make Changes**: Implement your improvements or fixes, and ensure your code adheres to our coding standards. + +5. **Test Thoroughly**: Test your changes to ensure they work as expected. + +6. **Submit a Pull Request**: When ready, submit a pull request to the main repository, detailing your changes and why they're valuable. + +7. **Collaborate**: Engage in discussions, address feedback, and work collaboratively to refine your contribution. + +By contributing, you help enhance the Rescript Decode extension for the entire community. We appreciate your valuable input and look forward to your contributions! + + diff --git a/lib/bs/.bsdeps b/lib/bs/.bsdeps index e728026..7af422a 100644 --- a/lib/bs/.bsdeps +++ b/lib/bs/.bsdeps @@ -4,4 +4,4 @@ bsconfig.json 0x1.93d1783cp+30 src 0x1.93d17908p+30 === -/Users/bopanna.mj/Code/rescript-decode/node_modules/rescript/darwinarm64/rescript.exe 0x1.93d17c1cp+30 +/Users/bopanna.mj/Code/rescript-decode/node_modules/rescript/darwinarm64/rescript.exe 0x1.93d196ap+30 diff --git a/lib/bs/.compiler.log b/lib/bs/.compiler.log index 9132096..eaa15aa 100644 --- a/lib/bs/.compiler.log +++ b/lib/bs/.compiler.log @@ -1,2 +1,2 @@ -#Start(1693736711537) -#Done(1693736711583) +#Start(1693738408333) +#Done(1693738408333) diff --git a/out/main.js b/out/main.js new file mode 100644 index 0000000..b3956d1 --- /dev/null +++ b/out/main.js @@ -0,0 +1,75 @@ +var y=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var j=y(d=>{"use strict";function tr(e,r){return er||e===e?1:r===r?-1:0}function or(e,r){return e===r?0:er?e:r}function dr(e,r){return e>r?e:r}function _r(e,r){return e>r?e:r}function Y(e,r){return e[1]===r[1]?e[0]===r[0]:!1}function x(e,r){var n=r[0],t=e[0];return t>n?!0:t=r[1]}function pr(e,r){return!Y(e,r)}function gr(e,r){return!x(e,r)}function C(e,r){return e[0]>r[0]?!0:e[0]r[1]}function hr(e,r){return!C(e,r)}function mr(e,r){return x(e,r)?r:e}function wr(e,r){return C(e,r)?e:r}d.int_compare=tr;d.bool_compare=ur;d.float_compare=ir;d.string_compare=or;d.bool_min=cr;d.int_min=fr;d.float_min=ar;d.string_min=lr;d.bool_max=sr;d.int_max=vr;d.float_max=dr;d.string_max=_r;d.i64_eq=Y;d.i64_neq=pr;d.i64_lt=gr;d.i64_gt=C;d.i64_le=hr;d.i64_ge=x;d.i64_min=mr;d.i64_max=wr});var q=y(A=>{"use strict";function Er(e,r,n){for(var t=new Array(n),u=0,i=r;u=e.length)throw{RE_EXN_ID:"Invalid_argument",_1:"index out of bounds",Error:new Error};e[r]=n}function Dr(e,r){if(r<0||r>=e.length)throw{RE_EXN_ID:"Invalid_argument",_1:"index out of bounds",Error:new Error};return e[r]}function Br(e,r){for(var n=new Array(e),t=0;t=0;--o)n[o+t|0]=e[o+r|0]}function Ir(e){return e.slice(0)}A.dup=Ir;A.sub=Er;A.concat=Ur;A.make=Br;A.make_float=Nr;A.blit=Mr;A.get=Dr;A.set=Or});var z=y(p=>{"use strict";var ee=q();function l(e,r){for(;;){var n=r,t=e,u=t.length,i=u===0?1:u,o=n.length,c=i-o|0;if(c===0)return t.apply(null,n);if(c>=0)return function(f,v){return function(h){return l(f,v.concat([h]))}}(t,n);r=ee.sub(n,i,-c|0),e=t.apply(null,ee.sub(n,0,i))}}function re(e,r){var n=e.length;if(n===1)return e(r);switch(n){case 1:return e(r);case 2:return function(t){return e(r,t)};case 3:return function(t,u){return e(r,t,u)};case 4:return function(t,u,i){return e(r,t,u,i)};case 5:return function(t,u,i,o){return e(r,t,u,i,o)};case 6:return function(t,u,i,o,c){return e(r,t,u,i,o,c)};case 7:return function(t,u,i,o,c,f){return e(r,t,u,i,o,c,f)};default:return l(e,[r])}}function br(e){var r=e.length;return r===1?e:function(n){return re(e,n)}}function ne(e,r,n){var t=e.length;if(t===2)return e(r,n);switch(t){case 1:return l(e(r),[n]);case 2:return e(r,n);case 3:return function(u){return e(r,n,u)};case 4:return function(u,i){return e(r,n,u,i)};case 5:return function(u,i,o){return e(r,n,u,i,o)};case 6:return function(u,i,o,c){return e(r,n,u,i,o,c)};case 7:return function(u,i,o,c,f){return e(r,n,u,i,o,c,f)};default:return l(e,[r,n])}}function kr(e){var r=e.length;return r===2?e:function(n,t){return ne(e,n,t)}}function te(e,r,n,t){var u=e.length;if(u===3)return e(r,n,t);switch(u){case 1:return l(e(r),[n,t]);case 2:return l(e(r,n),[t]);case 3:return e(r,n,t);case 4:return function(i){return e(r,n,t,i)};case 5:return function(i,o){return e(r,n,t,i,o)};case 6:return function(i,o,c){return e(r,n,t,i,o,c)};case 7:return function(i,o,c,f){return e(r,n,t,i,o,c,f)};default:return l(e,[r,n,t])}}function Sr(e){var r=e.length;return r===3?e:function(n,t,u){return te(e,n,t,u)}}function ue(e,r,n,t,u){var i=e.length;if(i===4)return e(r,n,t,u);switch(i){case 1:return l(e(r),[n,t,u]);case 2:return l(e(r,n),[t,u]);case 3:return l(e(r,n,t),[u]);case 4:return e(r,n,t,u);case 5:return function(o){return e(r,n,t,u,o)};case 6:return function(o,c){return e(r,n,t,u,o,c)};case 7:return function(o,c,f){return e(r,n,t,u,o,c,f)};default:return l(e,[r,n,t,u])}}function Fr(e){var r=e.length;return r===4?e:function(n,t,u,i){return ue(e,n,t,u,i)}}function ie(e,r,n,t,u,i){var o=e.length;if(o===5)return e(r,n,t,u,i);switch(o){case 1:return l(e(r),[n,t,u,i]);case 2:return l(e(r,n),[t,u,i]);case 3:return l(e(r,n,t),[u,i]);case 4:return l(e(r,n,t,u),[i]);case 5:return e(r,n,t,u,i);case 6:return function(c){return e(r,n,t,u,i,c)};case 7:return function(c,f){return e(r,n,t,u,i,c,f)};default:return l(e,[r,n,t,u,i])}}function Tr(e){var r=e.length;return r===5?e:function(n,t,u,i,o){return ie(e,n,t,u,i,o)}}function oe(e,r,n,t,u,i,o){var c=e.length;if(c===6)return e(r,n,t,u,i,o);switch(c){case 1:return l(e(r),[n,t,u,i,o]);case 2:return l(e(r,n),[t,u,i,o]);case 3:return l(e(r,n,t),[u,i,o]);case 4:return l(e(r,n,t,u),[i,o]);case 5:return l(e(r,n,t,u,i),[o]);case 6:return e(r,n,t,u,i,o);case 7:return function(f){return e(r,n,t,u,i,o,f)};default:return l(e,[r,n,t,u,i,o])}}function Wr(e){var r=e.length;return r===6?e:function(n,t,u,i,o,c){return oe(e,n,t,u,i,o,c)}}function ce(e,r,n,t,u,i,o,c){var f=e.length;if(f===7)return e(r,n,t,u,i,o,c);switch(f){case 1:return l(e(r),[n,t,u,i,o,c]);case 2:return l(e(r,n),[t,u,i,o,c]);case 3:return l(e(r,n,t),[u,i,o,c]);case 4:return l(e(r,n,t,u),[i,o,c]);case 5:return l(e(r,n,t,u,i),[o,c]);case 6:return l(e(r,n,t,u,i,o),[c]);case 7:return e(r,n,t,u,i,o,c);default:return l(e,[r,n,t,u,i,o,c])}}function Jr(e){var r=e.length;return r===7?e:function(n,t,u,i,o,c,f){return ce(e,n,t,u,i,o,c,f)}}function fe(e,r,n,t,u,i,o,c,f){var v=e.length;if(v===8)return e(r,n,t,u,i,o,c,f);switch(v){case 1:return l(e(r),[n,t,u,i,o,c,f]);case 2:return l(e(r,n),[t,u,i,o,c,f]);case 3:return l(e(r,n,t),[u,i,o,c,f]);case 4:return l(e(r,n,t,u),[i,o,c,f]);case 5:return l(e(r,n,t,u,i),[o,c,f]);case 6:return l(e(r,n,t,u,i,o),[c,f]);case 7:return l(e(r,n,t,u,i,o,c),[f]);default:return l(e,[r,n,t,u,i,o,c,f])}}function Rr(e){var r=e.length;return r===8?e:function(n,t,u,i,o,c,f,v){return fe(e,n,t,u,i,o,c,f,v)}}p.app=l;p._1=re;p.__1=br;p._2=ne;p.__2=kr;p._3=te;p.__3=Sr;p._4=ue;p.__4=Fr;p._5=ie;p.__5=Tr;p._6=oe;p.__6=Wr;p._7=ce;p.__7=Jr;p._8=fe;p.__8=Rr});var ae=y(T=>{"use strict";function xr(e,r){return e===r}var Cr=2147483647,qr=-2147483648;T.equal=xr;T.max=Cr;T.min=qr});var se=y(N=>{"use strict";var B=ae();function zr(e){return Math.ceil(e)}function le(e){return e>B.max?B.max:eB.max?B.max:e{"use strict";function Xr(e){return e.BS_PRIVATE_NESTED_SOME_NONE!==void 0}function W(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function Gr(e){if(e!=null)return W(e)}function $r(e){if(e!==void 0)return W(e)}function Kr(e){if(e!==null)return W(e)}function ve(e){if(!(e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0))return e;var r=e.BS_PRIVATE_NESTED_SOME_NONE;if(r!==0)return{BS_PRIVATE_NESTED_SOME_NONE:r-1|0}}function Hr(e){if(e!==void 0)return ve(e)}function Qr(e){return e!==void 0?e.VAL:e}U.nullable_to_opt=Gr;U.undefined_to_opt=$r;U.null_to_opt=Kr;U.valFromOption=ve;U.some=W;U.isNested=Xr;U.option_get=Hr;U.option_unwrap=Qr});var xe=y(a=>{"use strict";var E=j(),s=z(),Yr=se(),P=Z();function jr(e,r){if(r>=0&&r=0&&r=0&&r=0&&rt?n-t|0:0,i=new Array(u),o=0;o=0;--o)n[o+t|0]=e[o+r|0]}function wn(e,r,n,t,u){var i=e.length,o=n.length,c=r<0?E.int_max(i+r|0,0):r,f=t<0?E.int_max(o+t|0,0):t,v=E.int_min(u,E.int_min(i-c|0,o-f|0));if(f<=c){for(var h=0;h=0;--D)n[D+f|0]=e[D+c|0]}function ge(e,r){for(var n=0,t=e.length;n=0;--u)t=n(t,e[u]);return t}function Sn(e,r,n){return De(e,r,s.__2(n))}function Be(e,r,n,t){for(var u=n,i=E.int_min(e.length,r.length),o=i-1|0;o>=0;--o)u=t(u,e[o],r[o]);return u}function Fn(e,r,n,t){return Be(e,r,n,s.__3(t))}function Ne(e,r,n){for(var t=r,u=0,i=e.length;uu)return 1;if(t{"use strict";var M=z(),w=Z();function Ce(e,r){if(e!==void 0&&r(w.valFromOption(e)))return e}function Vn(e,r){return Ce(e,M.__1(r))}function qe(e,r){if(e!==void 0)return r(w.valFromOption(e))}function Xn(e,r){qe(e,M.__1(r))}function Gn(e){if(e!==void 0)return w.valFromOption(e);throw{RE_EXN_ID:"Not_found",Error:new Error}}function ze(e,r,n){return e!==void 0?n(w.valFromOption(e)):r}function $n(e,r,n){return ze(e,r,M.__1(n))}function Le(e,r){if(e!==void 0)return w.some(r(w.valFromOption(e)))}function Kn(e,r){return Le(e,M.__1(r))}function Ze(e,r){if(e!==void 0)return r(w.valFromOption(e))}function Hn(e,r){return Ze(e,M.__1(r))}function Qn(e,r){return e!==void 0?w.valFromOption(e):r}function Yn(e,r){return e!==void 0?e:r}function jn(e){return e!==void 0}function et(e){return e===void 0}function Pe(e,r,n){return e!==void 0?r!==void 0?n(w.valFromOption(e),w.valFromOption(r)):!1:r===void 0}function rt(e,r,n){return Pe(e,r,M.__2(n))}function Ve(e,r,n){return e!==void 0?r!==void 0?n(w.valFromOption(e),w.valFromOption(r)):1:r!==void 0?-1:0}function nt(e,r,n){return Ve(e,r,M.__2(n))}_.keepU=Ce;_.keep=Vn;_.forEachU=qe;_.forEach=Xn;_.getExn=Gn;_.mapWithDefaultU=ze;_.mapWithDefault=$n;_.mapU=Le;_.map=Kn;_.flatMapU=Ze;_.flatMap=Hn;_.getWithDefault=Qn;_.orElse=Yn;_.isSome=jn;_.isNone=et;_.eqU=Pe;_.eq=rt;_.cmpU=Ve;_.cmp=nt});var er=y(g=>{"use strict";var S=xe(),I=q(),tt=Xe();function ut(e){return e.length>0?e.charAt(0).toLowerCase()+e.slice(1):e}function O(e){return e.length>0?e.charAt(0).toUpperCase()+e.slice(1):e}function R(e,r){var n=new RegExp("(type\\s"+r+`+)\\s[=] +*\\s+({([a-zA-Z0-9_ :., +*\\s<>]+)})+`),t=new RegExp("type\\s+"+r+"+\\s*=\\s*(|[^|]+)"),u=new RegExp("type\\s+"+r+`\\s*=\\s*([A-Z][a-zA-Z0-9()\\s|]+) +`),i=e.match(n);if(i!==null)return[1,I.get(S.keepMap(i,function(f){return f}),2)];var o=e.match(t);if(o===null)return[1,"// Unable to find type"];var c=e.match(u);return c!==null?[0,I.get(S.keepMap(c,function(f){return f}),1)]:[0,"// Unable to find type"]}function Ge(e){return e.startsWith("option")?"None":e.startsWith("array")?"[]":"default"+O(e)}function $e(e){switch(e){case"Js.Json.t":return"Js.Dict.empty()->Js.Json.object_";case"array":case"array":return"[]";case"bool":return"false";case"float":return"0.0";case"int":return"0";case"option":case"option>":case"option>":case"option":case"option":case"option":case"option":return"None";case"string":return'""';default:return Ge(e)}}function $(e){return e.replace(/array<([a-zA-Z\.<>.]+)>/g,"$1").replace(/option<([a-zA-Z\.<>.]+)>/g,"$1")}function Ke(e,r){var n=$(r),t=R(e,n),u=t[1],i=u.replace(/([A-Za-z0-9_^]+)+\s*[:]\s+([a-zA-Z0-9_.<>]+)/g,function(c,f,v,h,D){var k=$e(v);return""+f+" : "+k});if(t[0])return"let default"+O(n)+" = "+i+` + +`;var o=S.get(u.split("|"),1);return o!==void 0?"let default"+O(n)+" = "+o+` +`:""}function K(e){return e.replace(/\|\s\"[A-Z][A-Za-z0-9]+[\(]+[a-zA-Z0-9_]+[\)]+\"\s=>\s([A-Z][A-Za-z0-9]+)[\(]+([a-zA-Z0-9_]+)[\)]+/g,function(r,n,t,u,i){return'| "'+n+'" => get'+O(t)+"() // Call you custom function here"})}function He(e){return e.replace(/(\([a-zA-Z0-9_\",\s]+\))/g,"")}function H(e,r){switch(e){case"Js.Json.t":return'getJsonObjectFromDict(dict, "'+r+'")';case"array":return'getIntArrayFromDict(dict, "'+r+'", [])';case"array":return'getStrArrayFromDict(dict, "'+r+'", [])';case"bool":return'getBool(dict, "'+r+'", false)';case"float":return'getFloat(dict, "'+r+'", 0.0)';case"int":return'getInt(dict, "'+r+'", 0)';case"option":return'getOptionalJsonFromDict(dict, "'+r+'")';case"option>":return'getOptionIntArrayFromDict(dict, "'+r+'")';case"option>":return'getOptionStrArrayFromDict(dict, "'+r+'")';case"option":return'getOptionBool(dict, "'+r+'")';case"option":return'getOptionFloat(dict, "'+r+'")';case"option":return'getOptionInt(dict, "'+r+'")';case"option":return'getOptionString(dict, "'+r+'")';case"string":return'getString(dict, "'+r+'", "")';default:return"||get"+O(r)+'(dict, "'+r+'")**'+e+"**||"}}function Qe(e,r,n,t){var u="let "+e+` = (dict, key) => { + dict + ->Js.Dict.get(key)`,i="->Belt.Option.flatMap(Js.Json.decodeObject)";if(/^option<([a-zA-Z0-9]+)>/.test(r)&&t===1)return""+u+` + `+i+` + ->Belt.Option.map(dict => { +`+n+` + }) +} +`;if(/^option<([a-zA-Z0-9]+)>/.test(r)&&t===0)return""+u+` + ->Belt.Option.flatMap(Js.Json.decodeString) + ->Belt.Option.map(str => { + +`+n+` + }) +} +`;if(/^array<([a-zA-Z0-9.]+)>/.test(r)){var o=!1;return""+u+` + ->Belt.Option.flatMap(Js.Json.decodeArray) + ->Belt.Option.getWithDefault([]) + ->Belt.Array.keepMap(Js.Json.decodeObject) + ->Js.Array2.map(dict => { + `+n+` + })`+(o?"->Some":"")+` +} +`}else return/^option>/.test(r)?"let "+e+` = (dict, key) => { + switch dict->Js.Dict.get(key)->Belt.Option.flatMap(Js.Json.decodeArray) { + | Some(arr) => + arr + `+i+` + ->Js.Array2.map(dict => { + `+n+` + }) + ->Some + | None => None + } +} +`:t===1?""+u+` + `+i+` + ->Belt.Option.map(dict => { + `+n+` + })->Belt.Option.getWithDefault(default`+O(r)+`) +} +`:""+u+` + ->Belt.Option.flatMap(Js.Json.decodeString) + ->Belt.Option.map(str => { + +`+n+` + })->Belt.Option.getWithDefault(default`+O(r)+`) +} +`}function Ye(e,r,n){var t=$(n),u=R(e,t),i=u[1],o=u[0],c;if(o)c=i.replace(/([A-Za-z0-9_^]+)+\s*[:]\s+([a-zA-Z0-9_.<>]+)/g,function(k,b,F,st,vt){var nr=H(F,b);return" "+b+" : "+nr+" "});else{var f=i.split("|"),v=K(f.reduce(function(k,b){var F=b.replace(` +`,"");return k+('| "'+F.trim()+'" => '+F+` +`)},"")),h=tt.getWithDefault(S.get(f,0),"No Default Varient found (Please Provide one)");c=` switch str { + +`+v+` +| _ => `+h+` //Ensure that appropriate default values are provided. + + }`}var D=He(r);return Qe(D,n,c,o)}function je(e,r){for(var n={contents:e},t=e;;){var u=t,i=u.match(/\|\|(.*?)\*\*(.*?)\*\*\|\|/);if(i===null)return n.contents;var o=S.keepMap(i,function(v){return v}),c=Ke(r,I.get(o,2)),f=Ye(r,I.get(o,1),I.get(o,2));n.contents=(c+` +`+f+` +`+n.contents).replace(I.get(o,0),I.get(o,1)),t=n.contents}}function it(e,r){var n=R(r,e),t=n[1],u=n[0],i;if(u)i=t.replace(/([A-Za-z0-9_^]+)+\s*[:]\s+([a-zA-Z0-9_.<>]+)/g,function(f,v,h,D,k){var b=H(h,v);return" "+v+" : "+b});else{var o=K(t.split("|").reduce(function(f,v){var h=v.replace(` +`,"");return f+('| "'+h.trim()+'" => '+h+` +`)},""));i=` switch str { + +`+o+` + }`}var c=u?`let itemToObjectMapper = dict => { +`+i+` +} + `:"let get"+O(e)+` = str => { +`+i+` +} + `;return je(c,r)}g.replaceFirstLetterLower=ut;g.replaceFirstLetterUpper=O;g.getRecordType=R;g.defaultUserTypedValue=Ge;g.defaultValueMapper=$e;g.filterTypeName=$;g.getDefaultValue=Ke;g.funcWarning=K;g.getFunctionName=He;g.typeFunctionMapper=H;g.getFuntionStr=Qe;g.getObjectFunction=Ye;g.generateNestedObject=je;g.generateDecode=it});var m=require("vscode"),{languages:ot,commands:rr,workspace:ct}=m,ft=er(),Q=class{constructor(){this.codeLenses=[],this.regex=/type\s+(\w+)\s+=\s+\{/g,this._onDidChangeCodeLenses=new m.EventEmitter,this.onDidChangeCodeLenses=this._onDidChangeCodeLenses.event,m.workspace.onDidChangeConfiguration(r=>{this._onDidChangeCodeLenses.fire()})}provideCodeLenses(r,n){if(m.workspace.getConfiguration("rescript-decode").get("enableDecodeButton",!0)){this.codeLenses=[];let t=new RegExp(this.regex),u=r.getText(),i;for(;(i=t.exec(u))!==null;){let o=r.lineAt(r.positionAt(i.index).line),c=o.text.indexOf(i[0]),f=new m.Position(o.lineNumber,c),v=r.getWordRangeAtPosition(f,new RegExp(this.regex));v&&this.codeLenses.push(new m.CodeLens(v))}return this.codeLenses}return[]}resolveCodeLens(r,n){if(m.workspace.getConfiguration("rescript-decode").get("enableDecodeButton",!0)){let u=m.window.activeTextEditor.document.lineAt(r.range.start.line).text;return r.command={title:"Generate Decode",tooltip:"Click to generate decode function",command:"rescript-decode.generateDecode",arguments:[u,!1]},r}return null}};function at(e){let r=new Q;ot.registerCodeLensProvider("*",r),rr.registerCommand("rescript-decode.enableDecodeButton",()=>{ct.getConfiguration("rescript-decode").update("enableDecodeButton",!0,!0)}),rr.registerCommand("rescript-decode.generateDecode",n=>{let t=/type\s+(\w+)\s+=/,u=m.window.activeTextEditor;if(!u){m.window.showErrorMessage("No active editor found.");return}let i=n.match(t);if(i){let o=i[1],c=u.document.getText(),f=ft.generateDecode(o,c);m.env.clipboard.writeText(f).then(()=>{m.window.showInformationMessage(`${o} : Generated code copied to clipboard.`)})}else m.window.showErrorMessage("No Type Found")})}function lt(){}module.exports={activate:at,deactivate:lt}; diff --git a/package-lock.json b/package-lock.json index 0e6b78f..9cbc988 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,8 @@ "rescript": "^10.1.4" }, "devDependencies": { - "@types/mocha": "^10.0.1", - "@types/node": "16.x", - "@types/vscode": "^1.81.0", "@vscode/test-electron": "^2.3.4", + "esbuild": "^0.19.2", "eslint": "^8.47.0", "glob": "^10.3.3", "mocha": "^10.2.0", @@ -33,6 +31,358 @@ "node": ">=0.10.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", + "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", + "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", + "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", + "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", + "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", + "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", + "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", + "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", + "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", + "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", + "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", + "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", + "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", + "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", + "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", + "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", + "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", + "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", + "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", + "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", + "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", + "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -220,24 +570,6 @@ "node": ">= 6" } }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.18.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.48.tgz", - "integrity": "sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.81.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.81.0.tgz", - "integrity": "sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w==", - "dev": true - }, "node_modules/@vscode/test-electron": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.4.tgz", @@ -633,6 +965,43 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/esbuild": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", + "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.2", + "@esbuild/android-arm64": "0.19.2", + "@esbuild/android-x64": "0.19.2", + "@esbuild/darwin-arm64": "0.19.2", + "@esbuild/darwin-x64": "0.19.2", + "@esbuild/freebsd-arm64": "0.19.2", + "@esbuild/freebsd-x64": "0.19.2", + "@esbuild/linux-arm": "0.19.2", + "@esbuild/linux-arm64": "0.19.2", + "@esbuild/linux-ia32": "0.19.2", + "@esbuild/linux-loong64": "0.19.2", + "@esbuild/linux-mips64el": "0.19.2", + "@esbuild/linux-ppc64": "0.19.2", + "@esbuild/linux-riscv64": "0.19.2", + "@esbuild/linux-s390x": "0.19.2", + "@esbuild/linux-x64": "0.19.2", + "@esbuild/netbsd-x64": "0.19.2", + "@esbuild/openbsd-x64": "0.19.2", + "@esbuild/sunos-x64": "0.19.2", + "@esbuild/win32-arm64": "0.19.2", + "@esbuild/win32-ia32": "0.19.2", + "@esbuild/win32-x64": "0.19.2" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2313,6 +2682,160 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, + "@esbuild/android-arm": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", + "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", + "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", + "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", + "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", + "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", + "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", + "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", + "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", + "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", + "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", + "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", + "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", + "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", + "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", + "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", + "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", + "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", + "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", + "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", + "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", + "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", + "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "dev": true, + "optional": true + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2444,24 +2967,6 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "@types/node": { - "version": "16.18.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.48.tgz", - "integrity": "sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==", - "dev": true - }, - "@types/vscode": { - "version": "1.81.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.81.0.tgz", - "integrity": "sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w==", - "dev": true - }, "@vscode/test-electron": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.4.tgz", @@ -2758,6 +3263,36 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "esbuild": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", + "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.19.2", + "@esbuild/android-arm64": "0.19.2", + "@esbuild/android-x64": "0.19.2", + "@esbuild/darwin-arm64": "0.19.2", + "@esbuild/darwin-x64": "0.19.2", + "@esbuild/freebsd-arm64": "0.19.2", + "@esbuild/freebsd-x64": "0.19.2", + "@esbuild/linux-arm": "0.19.2", + "@esbuild/linux-arm64": "0.19.2", + "@esbuild/linux-ia32": "0.19.2", + "@esbuild/linux-loong64": "0.19.2", + "@esbuild/linux-mips64el": "0.19.2", + "@esbuild/linux-ppc64": "0.19.2", + "@esbuild/linux-riscv64": "0.19.2", + "@esbuild/linux-s390x": "0.19.2", + "@esbuild/linux-x64": "0.19.2", + "@esbuild/netbsd-x64": "0.19.2", + "@esbuild/openbsd-x64": "0.19.2", + "@esbuild/sunos-x64": "0.19.2", + "@esbuild/win32-arm64": "0.19.2", + "@esbuild/win32-ia32": "0.19.2", + "@esbuild/win32-x64": "0.19.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", diff --git a/package.json b/package.json index 5c9ebbd..1a9551a 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,14 @@ { "name": "rescript-decode", "displayName": "Rescript Decode", - "description": "", + "description": "Precision JSON-to-Rescript type conversion for generating efficient decode functions in Visual Studio Code.", "version": "0.0.1", + "author": "Dilan Bopanna", + "publisher": "dilanBopanna", + "repository": { + "type": "git", + "url": "https://github.com/dilanbopanna/rescript-decode-vscode.git" + }, "engines": { "vscode": "^1.73.0" }, @@ -36,13 +42,16 @@ "test": "node ./test/runTest.js", "re:build": "rescript", "re:clean": "rescript clean", - "re:start": "rescript build -w" + "re:start": "rescript build -w", + "vscode:prepublish": "npm run esbuild-base -- --minify", + "esbuild-base": "esbuild ./extension.js --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node", + "esbuild": "npm run esbuild-base -- --sourcemap", + "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch", + "test-compile": "tsc -p ./" }, "devDependencies": { - "@types/mocha": "^10.0.1", - "@types/node": "16.x", - "@types/vscode": "^1.81.0", "@vscode/test-electron": "^2.3.4", + "esbuild": "^0.19.2", "eslint": "^8.47.0", "glob": "^10.3.3", "mocha": "^10.2.0", diff --git a/rescript-decode.png b/rescript-decode.png new file mode 100644 index 0000000000000000000000000000000000000000..daf84e9e80154af14fb13f4a4e5472b7e74b7260 GIT binary patch literal 63538 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

IFXkzkm32CeC{LvvV@`D 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 Zjw|ZG&$eSqyp96?l;zc7rLqr${|B@uf0qCN literal 0 HcmV?d00001