").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
-//@ sourceMappingURL=jquery.min.map
diff --git a/quagga2/quagga2-1.12.1/docs/explanation/algorithm-overview.md b/quagga2/quagga2-1.12.1/docs/explanation/algorithm-overview.md
deleted file mode 100644
index 8057319..0000000
--- a/quagga2/quagga2-1.12.1/docs/explanation/algorithm-overview.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Algorithm Overview {#algorithm-overview}
-
-This page provides a high-level overview of how Quagga2 processes images to detect and decode barcodes.
-
-## Processing Pipeline {#processing-pipeline}
-
-Quagga2 processes each frame through a multi-stage pipeline:
-
-```
-Input Image â Preprocessing â Localization â Decoding â Result
-```
-
-### 1. Preprocessing {#preprocessing}
-
-- **Scaling**: Image is resized based on `inputStream.size`
-- **Grayscale conversion**: Color image converted to grayscale
-- **Area cropping**: If `inputStream.area` is set, crop to that region
-
-### 2. Localization {#localization}
-
-When `locate: true` (default):
-
-1. **Binarization**: Convert to black/white using Otsu's method
-2. **Grid division**: Split image into patches
-3. **Skeletonization**: Extract line structures
-4. **Pattern analysis**: Find barcode-like patterns
-5. **Bounding box**: Calculate barcode region
-
-See [How Barcode Localization Works](how-barcode-localization-works.md) for detailed explanation.
-
-### 3. Decoding {#decoding}
-
-1. **Scanline extraction**: Sample pixels along detected barcode
-2. **Pattern matching**: Match bar/space patterns to barcode format
-3. **Character decoding**: Convert patterns to characters
-4. **Checksum validation**: Verify barcode integrity
-
-## Key Algorithms {#key-algorithms}
-
-### Otsu's Method {#otsus-method}
-
-Automatic threshold selection for binarization. Adapts to varying lighting conditions by analyzing the image histogram.
-
-### Connected Component Labeling {#connected-component-labeling}
-
-Groups adjacent pixels into distinct regions. Used during localization to identify potential barcode patterns.
-
-### Image Moments {#image-moments}
-
-Mathematical technique to calculate orientation and position of detected patterns.
-
-## Performance Characteristics {#performance-characteristics}
-
-| Factor | Impact | Mitigation |
-|--------|--------|------------|
-| Image size | Linear increase | Use `inputStream.size` |
-| Number of readers | Linear increase | Only enable needed readers |
-| Localization | ~60% of processing time | Use `locate: false` if position known |
-| Half sampling | 4x faster | Keep `halfSample: true` |
-
-## Related {#related}
-
-- [How Barcode Localization Works](how-barcode-localization-works.md) - Detailed localization explanation
-- [Architecture](architecture.md) - Code structure overview
-- [Optimize Performance](../how-to-guides/optimize-performance.md) - Performance tuning
-
----
-
-[â Back to Explanation](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/explanation/architecture.md b/quagga2/quagga2-1.12.1/docs/explanation/architecture.md
deleted file mode 100644
index 4d011c8..0000000
--- a/quagga2/quagga2-1.12.1/docs/explanation/architecture.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# Architecture {#architecture}
-
-This page describes Quagga2's code structure and design decisions.
-
-## Project Structure {#project-structure}
-
-```
-quagga2/
-âââ src/
-â âââ quagga.ts # Main entry point
-â âââ config/ # Configuration handling
-â âââ decoder/ # Barcode decoding
-â â âââ barcode_decoder.ts
-â â âââ readers/ # Individual barcode readers
-â âââ locator/ # Barcode localization
-â â âââ barcode_locator.ts
-â â âââ skeletonizer.ts
-â âââ input/ # Input handling
-â â âââ camera_access.ts
-â â âââ frame_grabber.ts
-â âââ common/ # Shared utilities
-â âââ cv_utils.ts # Computer vision utilities
-â âââ image_wrapper.ts
-âââ dist/ # Browser builds
-âââ lib/ # Node.js build
-âââ type-definitions/ # TypeScript types
-```
-
-## Core Components {#core-components}
-
-### Quagga (Main API) {#main-api}
-
-The main entry point (`src/quagga.ts`) exposes the public API:
-
-- `init()` / `start()` / `stop()`
-- `decodeSingle()`
-- `onDetected()` / `onProcessed()`
-- `CameraAccess` namespace
-
-### Barcode Locator {#barcode-locator}
-
-Located in `src/locator/`, responsible for finding barcode regions in images:
-
-- **barcode_locator.ts**: Main localization logic
-- **skeletonizer.ts**: Line structure extraction (asm.js optimized)
-
-### Barcode Decoder {#barcode-decoder}
-
-Located in `src/decoder/`, handles barcode decoding:
-
-- **barcode_decoder.ts**: Coordinates decoding process
-- **readers/**: Individual reader implementations
- - Each reader extends `BarcodeReader` base class
- - Implements format-specific pattern matching
-
-### Input Handling {#input-handling}
-
-Located in `src/input/`:
-
-- **camera_access.ts**: Camera enumeration and control
-- **frame_grabber_browser.ts**: Browser frame capture
-- **frame_grabber_node.ts**: Node.js image loading
-
-## Data Flow {#data-flow}
-
-```
-Camera/Image
- â
-FrameGrabber (captures frame)
- â
-ImageWrapper (grayscale conversion)
- â
-BarcodeLocator (finds barcode region)
- â
-BarcodeDecoder (decodes barcode)
- â
-Result callbacks
-```
-
-## Design Decisions {#design-decisions}
-
-### Bundle Everything {#bundle-everything}
-
-All dependencies are bundled into the final build. This means:
-
-- Consumers never install dependencies directly
-- All packages go in `devDependencies`
-- Builds are self-contained
-
-### Dual Build Targets {#dual-build-targets}
-
-- **Browser**: `dist/quagga.min.js` - UMD bundle
-- **Node.js**: `lib/quagga.js` - CommonJS module
-
-### Reader Architecture {#reader-architecture}
-
-Readers are pluggable:
-
-- Built-in readers in `src/decoder/readers/`
-- External readers via `Quagga.registerReader()`
-- All readers extend common `BarcodeReader` class
-
-## Build System {#build-system}
-
-- **Webpack 4**: Module bundling
-- **Babel**: ES6+ transpilation
-- **TypeScript**: Type checking (but source is mixed JS/TS)
-
-## Related {#related}
-
-- [Algorithm Overview](algorithm-overview.md) - How the algorithms work
-- [Create External Readers](../how-to-guides/external-readers.md) - Extend Quagga2
-- [Contributing](../contributing.md) - Development setup
-
----
-
-[â Back to Explanation](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/explanation/how-barcode-localization-works.md b/quagga2/quagga2-1.12.1/docs/explanation/how-barcode-localization-works.md
deleted file mode 100644
index 521f7ff..0000000
--- a/quagga2/quagga2-1.12.1/docs/explanation/how-barcode-localization-works.md
+++ /dev/null
@@ -1,197 +0,0 @@
-# How Barcode Localization Works {#how-barcode-localization-works}
-
-> **Note on Terminology**: "Localization" in this context refers to finding the **physical location** (position, bounding box) of a barcode within an image - not language localization (i18n). This is standard computer vision terminology.
-
-This article explains the technical details of how Quagga2 locates and decodes barcodes in images. Understanding this can help you optimize performance and troubleshoot issues.
-
-## Overview {#overview}
-
-Quagga2 uses a two-stage process:
-
-1. **Barcode Locator** (blue box in the images below) - Finds regions that look like barcodes
-2. **Barcode Decoder** (red line in the images below) - Reads the actual barcode data
-
-This approach is based on the paper [Locating and decoding EAN-13 barcodes from images captured by digital cameras](http://www.icics.org/2005/download/P0840.pdf) by Douglas et al., with adaptations and modifications for web browsers.
-
-## Stage 1: Barcode Locator {#stage-1-barcode-locator}
-
-The locator finds patterns that look like barcodes. A barcode is typically characterized by:
-
-- **Lines** (black bars and white gaps)
-- That are **close to each other**
-- With a **similar angle** (parallel lines)
-
-### Step 1: Creating a Binary Image {#step-1-binary-image}
-
-The first step is converting the color image to binary (black and white). Instead of using a simple threshold (e.g., everything below 127 is black), Quagga2 uses **Otsu's method**, which adapts to lighting changes across the image.
-
-
-
-Otsu's method analyzes the image histogram and automatically separates foreground (barcode) from background, even with uneven lighting.
-
-### Step 2: Slicing into a Grid {#step-2-slicing-grid}
-
-The binary image is divided into a **20Ã15 grid** (assuming 4:3 aspect ratio). Each cell is analyzed independently to determine if it contains barcode-like patterns.
-
-### Step 3: Extract Skeleton {#step-3-extract-skeleton}
-
-Each cell undergoes **skeletonization** - reducing bars to their centerline (1px width). This is done through iterative erosion and dilation.
-
-
-
-The skeleton clearly shows where parallel lines exist, making it easier to identify barcode regions.
-
-### Step 4: Component Labeling {#step-4-component-labeling}
-
-Using **connected-component labeling**, each line in the skeletonized image is separated into individual components. This is done with a fast algorithm based on the paper ["A Linear-Time Component-Labeling Algorithm Using Contour Tracing Technique"](http://www.iis.sinica.edu.tw/papers/fchang/1362-F.pdf) by Fu Chang et al.
-
-
-
-Each color represents a distinct labeled component (line). Notice how each cell is processed independently.
-
-Here are zoomed examples of two cells:
-
-
-*Good: Parallel lines indicate a possible barcode*
-
-
-*Bad: Random components indicate noise/text*
-
-### Step 5: Determining Orientation {#step-5-determining-orientation}
-
-For each component, Quagga2 calculates its orientation using **central image moments**. This is a mathematical technique to extract the angle of a shape.
-
-The orientation (θ) is calculated as:
-
-
-
-Where Îŧ (mu) are central moments calculated from raw moments (M):
-
-
-
-The centroid (xĖ, Čŗ) is calculated from raw moments:
-
-
-
-And the raw moments (M) are computed as:
-
-
-
-Where I(x,y) is the pixel value at position (x,y) - either 0 or 1 in a binary image.
-
-Don't worry if the math looks intimidating - the key insight is that these formulas calculate **which direction each line is pointing**.
-
-### Step 6: Determining Cell Quality {#step-6-determining-cell-quality}
-
-Cells are evaluated based on how parallel their lines are:
-
-1. **Filter out noise**: Discard cells with fewer than 2 components, or components smaller than 6 pixels
-2. **Cluster angles**: Group similar angles together
-3. **Select dominant cluster**: Pick the cluster with the most members
-4. **Quality threshold**: Only accept cells where âĨ75% of components share the same angle
-
-Cells that pass this test are called **patches** and contain:
-
-- Unique index
-- Bounding box
-- All components with their angles
-- Average angle
-- Direction vector
-
-
-
-Yellow boxes show patches that were classified as possible barcode areas. Note some false positives (text regions).
-
-### Step 7: Finding Connected Cells {#step-7-finding-connected-cells}
-
-Patches are grouped together if they're neighbors with similar orientation (within 5% angle difference). This is done using recursive component labeling.
-
-
-
-Each color represents a distinct group. Sometimes adjacent patches have different colors due to angle differences exceeding the 5% threshold.
-
-### Step 8: Selecting Groups {#step-8-selecting-groups}
-
-Groups are sorted by size (number of patches) and only the largest groups are kept - these are most likely to be actual barcodes.
-
-
-
-Small groups and false positives have been filtered out.
-
-### Step 9: Create Bounding Box {#step-9-create-bounding-box}
-
-For each group, a **minimum bounding box** is calculated:
-
-1. Calculate average angle of all patches in the group
-2. Rotate all patches by this angle
-3. Find outermost corners (min/max x and y)
-4. Create bounding box
-5. Rotate box back to original orientation
-
-
-*Patches rotated to horizontal, bounding box calculated*
-
-
-*Final bounding box rotated back to match barcode orientation*
-
-The bounding box now precisely outlines the barcode, including its rotation and scale. This information is passed to the decoder.
-
-## Stage 2: Barcode Decoder {#stage-2-barcode-decoder}
-
-With the bounding box and orientation known, the decoder:
-
-1. Samples pixel intensities along scan lines within the box
-2. Detects transitions from black to white (edges of bars)
-3. Calculates bar widths
-4. Matches patterns against the selected barcode format(s)
-5. Validates checksums
-6. Returns the decoded data
-
-## Why This Approach? {#why-this-approach}
-
-Unlike simpler barcode scanners that require the barcode to be:
-
-- Horizontal (aligned with the viewport)
-- At a specific distance (scale)
-- Centered in the frame
-
-Quagga2's localization algorithm is **invariant to rotation and scale**. It can find and decode barcodes:
-
-- At any angle
-- At any size (within reason)
-- Anywhere in the image
-- Even with multiple barcodes present
-
-This makes it much more practical for real-world camera scanning where users can't always position the camera perfectly.
-
-## Performance Considerations {#performance-considerations}
-
-The localization algorithm is computationally intensive. Key factors affecting performance:
-
-- **Image size**: Smaller images process faster. Consider downscaling if speed is critical.
-- **Grid size**: The default 20Ã15 grid balances accuracy and speed
-- **Patch filtering**: Aggressive filtering reduces false positives but may miss difficult barcodes
-- **Number of readers**: Enabling multiple barcode formats increases decode time
-
-See [Optimize Performance](../how-to-guides/optimize-performance.md) for practical tips.
-
-## Related Reading {#related-reading}
-
-- **Original Paper**: [Locating and decoding EAN-13 barcodes from images captured by digital cameras](http://www.icics.org/2005/download/P0840.pdf)
-- **Otsu's Method**: [Wikipedia - Otsu's method](http://en.wikipedia.org/wiki/Otsu%27s_method)
-- **Skeletonization**: [Wikipedia - Morphological skeleton](http://en.wikipedia.org/wiki/Morphological_skeleton)
-- **Component Labeling**: [Wikipedia - Connected-component labeling](http://en.wikipedia.org/wiki/Connected-component_labeling)
-- **Image Moments**: [Wikipedia - Image moment](http://en.wikipedia.org/wiki/Image_moment#Central_moments)
-- **Fast Labeling Algorithm**: [A Linear-Time Component-Labeling Algorithm (PDF)](http://www.iis.sinica.edu.tw/papers/fchang/1362-F.pdf)
-- **CodeProject Implementation**: [Connected Component Labeling and Vectorization](http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization)
-
-## Source Code {#source-code}
-
-The localization algorithm is implemented in:
-
-- `src/locator/barcode_locator.js` - Main locator logic
-- `src/locator/skeletonizer.js` - Skeletonization algorithm (asm.js)
-- `src/common/cluster.js` - Clustering algorithms
-- `src/common/cv_utils.js` - Computer vision utilities
-
-Contributions and improvements are welcome!
diff --git a/quagga2/quagga2-1.12.1/docs/explanation/index.md b/quagga2/quagga2-1.12.1/docs/explanation/index.md
deleted file mode 100644
index d12ca87..0000000
--- a/quagga2/quagga2-1.12.1/docs/explanation/index.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Explanation
-
-Background knowledge and context about Quagga2. These articles explain *why* things work the way they do, providing deeper understanding beyond just how to use the library.
-
-## Algorithm & Theory
-
-### [How Barcode Localization Works](how-barcode-localization-works.md) â Featured
-
-Deep dive into the computer vision algorithms that find barcodes in images. Covers:
-
-- Binary image creation with Otsu's method
-- Skeletonization
-- Component labeling
-- Orientation detection using image moments
-- Why this approach is rotation/scale invariant
-
-**Read this if**: You want to understand the "magic" behind barcode detection, optimize performance, or contribute to the localization code.
-
-## Architecture
-
-### [How Input Streams Work](input-streams.md)
-
-Technical deep dive into the three input stream types and their initialization flow. Covers:
-
-- LiveStream, VideoStream, and ImageStream differences
-- The async initialization sequence
-- Why `framegrabber` indicates init completion
-- Race conditions and how to avoid them
-
-**Read this if**: You're debugging initialization issues, dealing with React StrictMode, or want to understand the media pipeline.
-
-### [Algorithm Overview](algorithm-overview.md) *(Coming Soon)*
-
-High-level overview of Quagga2's processing pipeline from input to output.
-
-### [Code Architecture](architecture.md)
-
-Structure of the codebase, module organization, and design decisions.
-
-## Concepts
-
-### [Why asm.js for Skeletonization](why-asmjs.md) *(Coming Soon)*
-
-Explanation of why performance-critical code uses asm.js and what that means.
-
-### [Reader Design Patterns](reader-patterns.md) *(Coming Soon)*
-
-How barcode readers are implemented and how to create custom ones.
-
-## Differences from Other Doc Types
-
-**Explanation** articles:
-
-- Provide context and background
-- Discuss alternatives and trade-offs
-- Explain historical decisions
-- Connect concepts together
-- Are OK to read casually
-
-**Tutorials**: Step-by-step learning by doing
-**How-To Guides**: Task-focused, get things done
-**Reference**: Precise technical specifications
-
-## When to Read Explanations
-
-Read these articles when you:
-
-- Want to **understand** how things work under the hood
-- Need to **debug** complex issues
-- Want to **contribute** to the codebase
-- Are **curious** about design decisions
-- Want to **optimize** beyond basic tuning
-
-## Contributing
-
-Have insights to share about how Quagga2 works? We welcome explanation articles! See the [Contributing Guide](../contributing.md).
-
----
-
-[â Back to Documentation Home](../index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/explanation/input-streams.md b/quagga2/quagga2-1.12.1/docs/explanation/input-streams.md
deleted file mode 100644
index 115fffd..0000000
--- a/quagga2/quagga2-1.12.1/docs/explanation/input-streams.md
+++ /dev/null
@@ -1,270 +0,0 @@
-# How Input Streams Work {#how-input-streams-work}
-
-This article explains the technical details of how Quagga2's input stream system works. Understanding this is helpful for troubleshooting initialization issues and understanding async behavior.
-
-## Overview {#overview}
-
-Quagga2 supports three types of input streams for reading barcode data:
-
-| Type | Use Case | Input Source |
-|------|----------|--------------|
-| **LiveStream** | Real-time camera scanning | Device camera via getUserMedia |
-| **VideoStream** | Pre-recorded video files | Video file via `
` element |
-| **ImageStream** | Static images or image sequences | Image file(s) via URL |
-
-All three stream types share the same interface (`InputStream`) and follow a common initialization pattern, but differ in how they acquire media.
-
-## The InputStream Interface {#inputstream-interface}
-
-Every input stream implements these core methods:
-
-```typescript
-interface InputStream {
- // Dimensions
- getWidth(): number;
- getHeight(): number;
- getRealWidth(): number;
- getRealHeight(): number;
- setWidth(width: number): void;
- setHeight(height: number): void;
-
- // Frame access
- getFrame(): HTMLVideoElement | HTMLImageElement | null;
-
- // Event handling
- addEventListener(event: string, handler: Function): void;
- clearEventHandlers(): void;
- trigger(eventName: string, args?: any): void;
-
- // Playback control
- play(): void;
- pause(): void;
- ended(): boolean;
-
- // Configuration
- setInputStream(config: any): void;
- getConfig(): any;
-}
-```
-
-## Initialization Flow {#initialization-flow}
-
-All stream types follow the same initialization sequence:
-
-```
-init() â initInputStream() â [async media access] â 'canrecord' event â canRecord() â framegrabber created
-```
-
-Here's what happens at each step:
-
-### 1. `init()` is called {#step-1-init}
-
-The static `Quagga.init(config, callback)` function starts the process:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: 'LiveStream', // or 'VideoStream' or 'ImageStream'
- target: document.querySelector('#scanner'),
- // ... other options
- },
- // ... decoder config
-}, (err) => {
- if (err) {
- console.error('Init failed:', err);
- return;
- }
- Quagga.start();
-});
-```
-
-### 2. `initInputStream()` creates the stream {#step-2-initinputstream}
-
-Based on the `type` configuration, the appropriate stream factory is called:
-
-- `LiveStream` â `createLiveStream(video)`
-- `VideoStream` â `createVideoStream(video)`
-- `ImageStream` â `createImageStream()`
-
-### 3. Async media access begins {#step-3-async-media}
-
-This is where the streams diverge:
-
-**LiveStream**: Calls `CameraAccess.request()` which uses `navigator.mediaDevices.getUserMedia()`. This is async because:
-- Browser shows a permission prompt
-- Camera hardware needs to spin up
-- Video dimensions aren't known until stream starts
-
-**VideoStream**: Creates a `` element and waits for the video to load metadata. Async because the video file must be fetched.
-
-**ImageStream**: Uses `ImageLoader` to fetch and decode image(s). Async because images must be downloaded.
-
-### 4. `canrecord` event fires {#step-4-canrecord}
-
-When the media is ready, the stream triggers the `canrecord` event. This is the signal that:
-- Media dimensions are now available
-- Frames can be grabbed
-- Processing can begin
-
-### 5. `canRecord()` completes initialization {#step-5-canrecord-callback}
-
-The `canRecord()` callback:
-1. Validates the input stream is properly initialized
-2. Calls `checkImageConstraints()` to validate/adjust dimensions
-3. Creates the canvas for drawing frames
-4. Creates the **framegrabber** (the component that extracts frames)
-5. Sets up worker threads (if configured)
-6. Calls the user's callback to signal init is complete
-
-### 6. Framegrabber indicates completion {#step-6-framegrabber}
-
-The `framegrabber` being non-null is the reliable indicator that initialization completed successfully. This is why:
-
-- The static `start()` function checks `if (!_context.framegrabber)` before proceeding
-- The `stop()` function uses `!framegrabber` to detect if init was still in progress
-
-## Stream Type Details {#stream-type-details}
-
-### LiveStream {#livestream}
-
-**Purpose**: Real-time barcode scanning using the device camera.
-
-**How it works**:
-1. Creates or finds a `` element in the target container
-2. Requests camera access via `getUserMedia()`
-3. Attaches the camera stream to the video element
-4. Sets `autoplay="true"` so the video starts immediately
-5. Triggers `canrecord` when camera is ready
-
-**Key characteristics**:
-- `ended()` always returns `false` (camera never "ends")
-- Requires HTTPS in production (browser security requirement)
-- Can specify camera constraints (facing mode, resolution)
-
-**Configuration example**:
-```javascript
-inputStream: {
- type: 'LiveStream',
- target: document.querySelector('#camera'),
- constraints: {
- facingMode: 'environment', // Back camera
- width: { min: 640 },
- height: { min: 480 }
- }
-}
-```
-
-### VideoStream {#videostream}
-
-**Purpose**: Scanning barcodes from pre-recorded video files.
-
-**How it works**:
-1. Creates a new `` element
-2. Sets the `src` attribute to the video URL
-3. Waits for video metadata to load
-4. Triggers `canrecord` when dimensions are known
-
-**Key characteristics**:
-- `ended()` returns the video element's ended state
-- Supports seeking via `setCurrentTime()`
-- Video plays frame-by-frame during scanning
-
-**Configuration example**:
-```javascript
-inputStream: {
- type: 'VideoStream',
- src: '/path/to/video.mp4'
-}
-```
-
-### ImageStream {#imagestream}
-
-**Purpose**: Scanning barcodes from static images or image sequences.
-
-**How it works**:
-1. Parses the image URL configuration
-2. Uses `ImageLoader` to fetch the image(s)
-3. Reads EXIF data to handle image orientation
-4. Calculates dimensions based on size config
-5. Triggers `canrecord` when image(s) are loaded
-
-**Key characteristics**:
-- Can process a single image or a sequence
-- Handles EXIF orientation automatically
-- `ended()` returns true after all images are processed
-- Used internally by `decodeSingle()`
-
-**Configuration example (single image)**:
-```javascript
-inputStream: {
- type: 'ImageStream',
- src: '/path/to/barcode.jpg',
- sequence: false
-}
-```
-
-**Configuration example (image sequence)**:
-```javascript
-inputStream: {
- type: 'ImageStream',
- src: '/path/to/images/img_%d.jpg', // %d is replaced with frame number
- sequence: true,
- length: 10 // Number of images
-}
-```
-
-## Race Conditions and Async Behavior {#race-conditions}
-
-Because initialization involves async operations (camera access, file loading), race conditions can occur if:
-
-1. **`stop()` is called during `init()`**: The `canrecord` event may fire after `stop()` has begun cleanup. Quagga2 handles this with an `initAborted` flag.
-
-2. **React StrictMode double-invocation**: StrictMode mounts, unmounts, and remounts components, causing rapid `init() â stop() â init()` sequences.
-
-3. **Component unmounting before camera ready**: User navigates away before `getUserMedia()` resolves.
-
-**Best practices to avoid issues**:
-
-```javascript
-useLayoutEffect(() => {
- let cancelled = false;
-
- Quagga.init(config, (err) => {
- if (cancelled) return; // Ignore if unmounted
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
- });
-
- return () => {
- cancelled = true;
- Quagga.stop();
- };
-}, []);
-```
-
-## Source Code {#source-code}
-
-The input stream system is implemented in:
-
-- `src/input/input_stream/input_stream_browser.ts` - Browser stream implementations
-- `src/input/input_stream/input_stream.ts` - Node.js stream implementation
-- `src/input/input_stream/input_stream.d.ts` - TypeScript interface
-- `src/quagga/setupInputStream.ts` - Stream factory selection
-- `src/input/camera_access.ts` - Camera permission handling
-- `src/input/frame_grabber.js` - Frame extraction for Node.js (uses ndarray)
-- `src/input/frame_grabber_browser.js` - Frame extraction for browsers (uses canvas)
-
-> **Note**: Webpack replaces `frame_grabber.js` with `frame_grabber_browser.js` when building the browser bundle. The Node.js version uses `ndarray` for image manipulation, while the browser version uses the Canvas API.
-
-## Related Reading {#related-reading}
-
-- [How Barcode Localization Works](how-barcode-localization-works.md) - What happens after frames are grabbed
-- [Camera Access Reference](../reference/camera-access.md) - Camera configuration options
-- [Configuration Reference](../reference/configuration.md) - Full config documentation
-
----
-
-[â Back to Explanation Index](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/getting-started.md b/quagga2/quagga2-1.12.1/docs/getting-started.md
deleted file mode 100644
index 5910061..0000000
--- a/quagga2/quagga2-1.12.1/docs/getting-started.md
+++ /dev/null
@@ -1,213 +0,0 @@
-# Getting Started with Quagga2 {#getting-started}
-
-This guide will help you install Quagga2 and get your first barcode scanner running quickly.
-
-## What is Quagga2? {#what-is-quagga2}
-
-Quagga2 is a JavaScript barcode scanner library that works in both browsers and Node.js. It can:
-
-- **Scan barcodes in real-time** using your device's camera
-- **Decode barcodes from images** (photos, screenshots, etc.)
-- **Support multiple formats**: EAN, CODE 128, CODE 39, EAN 8, UPC-A, UPC-C, I2of5, 2of5, CODE 93, CODE 32, CODABAR, and PHARMACODE
-- **Work offline** - all processing happens in the browser/Node.js, no server required
-
-Unlike some libraries, Quagga2 includes a barcode **locator** that can find and decode barcodes regardless of their rotation or scale in the image.
-
-## Installation {#installation}
-
-### Using NPM (Recommended) {#using-npm}
-
-```bash
-npm install --save @ericblade/quagga2
-```
-
-Then import it in your project:
-
-```javascript
-// ES6 modules
-import Quagga from '@ericblade/quagga2';
-
-// CommonJS (important: note the .default)
-const Quagga = require('@ericblade/quagga2').default;
-```
-
-### Using CDN (Script Tag) {#using-cdn}
-
-Add one of these script tags to your HTML:
-
-**Unminified version** (useful for development):
-
-```html
-
-```
-
-**Minified version** (recommended for production):
-
-```html
-
-```
-
-**Specific version** (recommended to avoid breaking changes):
-
-```html
-
-```
-
-The script tag exposes the library globally as `Quagga`.
-
-## Basic Usage - Live Camera Scanning {#live-camera-scanning}
-
-Here's a minimal example to scan barcodes using your device's camera:
-
-### HTML {#html-example}
-
-```html
-
-
-
-
- Quagga2 Barcode Scanner
-
-
-
-
-
-
-
-```
-
-### JavaScript (app.js) {#javascript-example}
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner-container')
- },
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- console.log("Initialization finished. Ready to start");
- Quagga.start();
-});
-
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
- console.log("Barcode detected:", code);
- alert("Found barcode: " + code);
-});
-```
-
-That's it! This will:
-
-1. Request camera access
-2. Display the camera feed in `#scanner-container`
-3. Continuously scan for CODE 128 barcodes
-4. Alert you when a barcode is detected
-
-## Basic Usage - Static Image Scanning {#static-image-scanning}
-
-To decode a barcode from an existing image:
-
-```javascript
-Quagga.decodeSingle({
- src: "path/to/your/image.jpg",
- decoder: {
- readers: ["code_128_reader"]
- }
- // Note: Images are scaled to 800px (longest side) by default.
- // See inputStream.size in the Configuration Reference for details.
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Barcode found:", result.codeResult.code);
- } else {
- console.log("No barcode found");
- }
-});
-```
-
-## Important Notes {#important-notes}
-
-### HTTPS Required {#https-required}
-
-For security reasons, browsers require **HTTPS** to access the camera, except on `localhost`. If you host your app on a domain, you must use `https://`.
-
-### Browser Compatibility {#browser-compatibility}
-
-Quagga2 works in modern browsers that support:
-
-- Canvas API
-- Typed Arrays
-- MediaDevices API (for camera access)
-
-See the [Browser Support](reference/browser-support.md) page for detailed compatibility information.
-
-### Polyfill Recommendation {#polyfill-recommendation}
-
-Different browsers implement camera APIs differently. We recommend including [webrtc-adapter](https://github.com/webrtc/adapter) for better compatibility:
-
-```html
-
-```
-
-## Next Steps {#next-steps}
-
-Now that you have the basics working:
-
-- **[Try a complete tutorial](tutorials/first-scan.md)** - Build a working barcode scanner step-by-step
-- **[Learn about configuration options](reference/configuration.md)** - Customize behavior
-- **[Explore supported barcode types](reference/readers.md)** - Enable different formats
-- **[Check out live examples](https://serratus.github.io/quaggaJS/examples)** - See Quagga2 in action
-
-## Common Issues {#common-issues}
-
-### Camera Permission Denied {#camera-permission-denied}
-
-If the user denies camera access, the `init` callback will receive an error. Always handle this gracefully:
-
-```javascript
-Quagga.init(config, function(err) {
- if (err) {
- if (err.name === 'NotAllowedError') {
- alert('Please allow camera access to scan barcodes');
- }
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-### Camera Not Found {#camera-not-found}
-
-Some devices don't have a camera (desktops, VMs). Check for camera availability:
-
-```javascript
-if (navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') {
- // Camera API available
- Quagga.init(config, callback);
-} else {
- // Fallback to file upload
- alert('Camera not available, please upload an image');
-}
-```
-
-### No Barcode Detected {#no-barcode-detected}
-
-If Quagga2 isn't detecting your barcode:
-
-- Make sure you've enabled the correct reader (e.g., `ean_reader` for EAN-13)
-- Ensure good lighting
-- Try holding the barcode steady and filling most of the camera view
-- See [How to Handle Difficult Barcodes](how-to-guides/handle-difficult-barcodes.md)
-
-## Getting Help {#getting-help}
-
-- **[GitHub Issues](https://github.com/ericblade/quagga2/issues)** - Report bugs or request features
-- **[Gitter Chat](https://gitter.im/quaggaJS/Lobby)** - Ask questions and get help from the community
-- **[API Documentation](reference/api.md)** - Complete API reference
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/configure-readers.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/configure-readers.md
deleted file mode 100644
index b7d47c6..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/configure-readers.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# Configure Barcode Readers {#configure-readers}
-
-This guide explains how to configure which barcode formats Quagga2 will detect.
-
-## Basic Configuration {#basic-configuration}
-
-Specify readers in the `decoder.readers` array:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- }
-});
-```
-
-## Available Readers {#available-readers}
-
-| Reader | Format | Common Uses |
-|--------|--------|-------------|
-| `code_128_reader` | Code 128 | Shipping, packaging |
-| `ean_reader` | EAN-13 | Retail products |
-| `ean_8_reader` | EAN-8 | Small products |
-| `upc_reader` | UPC-A | North American retail |
-| `upc_e_reader` | UPC-E | Small products |
-| `code_39_reader` | Code 39 | Industrial |
-| `code_39_vin_reader` | Code 39 VIN | Vehicle identification |
-| `codabar_reader` | Codabar | Libraries, blood banks |
-| `i2of5_reader` | Interleaved 2 of 5 | Warehouse |
-| `2of5_reader` | Standard 2 of 5 | Industrial |
-| `code_93_reader` | Code 93 | Logistics |
-| `code_32_reader` | Code 32 | Italian pharmaceuticals |
-
-## Reader Priority {#reader-priority}
-
-Readers are processed in order. Put most likely formats first:
-
-```javascript
-decoder: {
- readers: [
- "ean_reader", // Most common - checked first
- "upc_reader", // Second most common
- "code_128_reader" // Fallback
- ]
-}
-```
-
-## EAN Supplements {#ean-supplements}
-
-To read EAN-2 or EAN-5 extension supplements:
-
-```javascript
-decoder: {
- readers: [
- "ean_reader", // Regular EAN without supplements
- {
- format: "ean_reader",
- config: {
- supplements: ["ean_5_reader", "ean_2_reader"]
- }
- }
- ]
-}
-```
-
-## Best Practices {#best-practices}
-
-1. **Only enable needed readers** - More readers = slower performance
-2. **Order by frequency** - Put most common formats first
-3. **Test thoroughly** - Some formats can conflict
-
-## Related {#related}
-
-- [Supported Barcode Types](../reference/readers.md) - Complete reader documentation
-- [Configuration Reference](../reference/configuration.md) - All configuration options
-
----
-
-[â Back to How-To Guides](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/external-readers.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/external-readers.md
deleted file mode 100644
index e631490..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/external-readers.md
+++ /dev/null
@@ -1,234 +0,0 @@
-# How-To: Create and Use External Readers {#create-and-use-external-readers}
-
-This guide explains how to create custom barcode reader plugins and integrate them into Quagga2.
-
-## Using Existing External Readers {#using-existing-external-readers}
-
-### QR Code Reader {#qr-code-reader}
-
-The most common external reader is [quagga2-reader-qr](https://github.com/ericblade/quagga2-reader-qr) for QR code support:
-
-```javascript
-import Quagga from '@ericblade/quagga2';
-import QRReader from 'quagga2-reader-qr';
-
-// Register the external reader
-Quagga.registerReader('qr', QRReader);
-
-// Use it in your config
-Quagga.init({
- decoder: {
- readers: ['qr']
- }
-});
-```
-
-## External Reader Priority {#external-reader-priority}
-
-External readers follow the **same priority rules** as built-in readers:
-
-1. **Registration first**: Call `Quagga.registerReader(name, ReaderClass)` before using the reader
-2. **Position determines priority**: The reader's position in the `readers` array determines when it attempts to decode
-3. **First success wins**: The first reader to return a valid result is used
-
-### Example: Prioritizing External Readers {#prioritizing-external-readers}
-
-```javascript
-// Register external reader
-Quagga.registerReader('my_custom_reader', MyCustomReader);
-
-// External reader tried first, then built-in readers
-Quagga.init({
- decoder: {
- readers: ['my_custom_reader', 'ean_reader', 'code_128_reader']
- }
-});
-```
-
-### Example: External Reader as Fallback {#external-reader-fallback}
-
-```javascript
-// Register external reader
-Quagga.registerReader('my_fallback_reader', MyFallbackReader);
-
-// Built-in readers tried first, external as fallback
-Quagga.init({
- decoder: {
- readers: ['ean_reader', 'code_128_reader', 'my_fallback_reader']
- }
-});
-```
-
-## Creating Custom Readers {#creating-custom-readers}
-
-Quagga2 exports the `BarcodeReader` prototype that you can extend to create custom readers.
-
-### Basic Reader Structure {#basic-reader-structure}
-
-```javascript
-import { Readers } from '@ericblade/quagga2';
-
-const { BarcodeReader } = Readers;
-
-class MyCustomReader extends BarcodeReader {
- FORMAT = 'my_custom_format';
-
- constructor(config, supplements) {
- super(config, supplements);
- // Custom initialization
- }
-
- decode(row, start) {
- // Implement barcode decoding logic
- // row: Array - binary line data
- // start: number - starting position
-
- // Return null if no barcode found
- // Return Barcode object if successful
- return null;
- }
-}
-
-export default MyCustomReader;
-```
-
-### Reader Return Format {#reader-return-format}
-
-Your `decode()` method should return either `null` (no match) or a result object:
-
-```javascript
-{
- code: '1234567890', // The decoded barcode value
- start: 0, // Start position in the row
- end: 100, // End position in the row
- startInfo: { start: 0, end: 10 }, // Start pattern info
- format: 'my_custom_format', // Your reader's format name
- decodedCodes: [...] // Optional: decoded character info
-}
-```
-
-### Pattern Matching Utilities {#pattern-matching-utilities}
-
-BarcodeReader provides useful methods for pattern matching:
-
-- `_nextSet(line, offset)` - Find next set (1) bit
-- `_nextUnset(line, offset)` - Find next unset (0) bit
-- `_matchPattern(counter, code, maxSingleError)` - Match bar patterns
-- `_fillCounters(offset, end, isWhite)` - Count consecutive bars/spaces
-
-### Example: Simple Pattern Reader {#simple-pattern-reader}
-
-```javascript
-class SimpleBarReader extends BarcodeReader {
- FORMAT = 'simple_bar';
- START_PATTERN = [1, 1, 1]; // Three bars pattern
-
- decode(row, start) {
- if (row) {
- this._row = row;
- }
-
- // Find start pattern
- const startInfo = this._findPattern(this.START_PATTERN, 0, false);
- if (!startInfo) {
- return null;
- }
-
- // Decode the barcode content
- const result = this._decodeContent(startInfo.end);
- if (!result) {
- return null;
- }
-
- return {
- code: result.code,
- start: startInfo.start,
- end: result.end,
- startInfo: startInfo,
- format: this.FORMAT
- };
- }
-
- _decodeContent(offset) {
- // Implement your decoding logic
- return null;
- }
-}
-```
-
-## Image-Based Readers {#image-based-readers}
-
-For non-linear barcodes (like QR codes), implement `decodeImage()` instead:
-
-```javascript
-class MyImageReader extends BarcodeReader {
- FORMAT = 'my_image_format';
-
- // Override decode to return null (not a linear barcode)
- decode() {
- return null;
- }
-
- // Implement image-based decoding
- async decodeImage(imageWrapper) {
- // imageWrapper.data - pixel data
- // imageWrapper.size - { x, y } dimensions
-
- // Process the image and decode
- const result = await this.processImage(imageWrapper);
-
- if (!result) {
- return null;
- }
-
- return {
- codeResult: {
- code: result.data,
- format: this.FORMAT
- }
- };
- }
-}
-```
-
-## Testing Your Reader {#testing-your-reader}
-
-1. **Unit tests**: Test pattern matching and decoding logic in isolation
-2. **Integration tests**: Use `Quagga.decodeSingle()` with test images
-3. **Live testing**: Test with real camera input
-
-### Example Test {#example-test}
-
-```javascript
-import Quagga from '@ericblade/quagga2';
-import MyCustomReader from './my-custom-reader';
-
-Quagga.registerReader('my_custom', MyCustomReader);
-
-const result = await Quagga.decodeSingle({
- src: './test-image.jpg',
- decoder: {
- readers: ['my_custom']
- }
-});
-
-console.log('Result:', result?.codeResult?.code);
-```
-
-## Best Practices {#best-practices}
-
-1. **Set unique FORMAT**: Use a distinctive format name to identify your reader
-2. **Handle edge cases**: Return `null` gracefully when patterns don't match
-3. **Validate checksums**: Implement checksum validation when the format supports it
-4. **Consider performance**: Optimize pattern matching for real-time scanning
-5. **Test thoroughly**: Test with various image qualities and conditions
-
-## Related {#related}
-
-- [Supported Barcode Types](../reference/readers.md) - Built-in readers
-- [Configuration Reference](../reference/configuration.md) - Full config options
-- [quagga2-reader-qr](https://github.com/ericblade/quagga2-reader-qr) - Example external reader
-
----
-
-[â Back to How-To Guides](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/handle-difficult-barcodes.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/handle-difficult-barcodes.md
deleted file mode 100644
index aeae639..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/handle-difficult-barcodes.md
+++ /dev/null
@@ -1,127 +0,0 @@
-# Handle Difficult Barcodes {#handle-difficult-barcodes}
-
-This guide provides techniques for improving barcode detection in challenging conditions.
-
-## Common Challenges {#common-challenges}
-
-- Poor lighting or shadows
-- Blurry or out-of-focus images
-- Small or distant barcodes
-- Damaged or partially obscured barcodes
-- Low contrast between bars and background
-
-## Improving Detection {#improving-detection}
-
-### Adjust Patch Size {#adjust-patch-size}
-
-For small or distant barcodes, use a smaller patch size:
-
-```javascript
-locator: {
- patchSize: "small" // or "x-small" for very small barcodes
-}
-```
-
-### Increase Resolution {#increase-resolution}
-
-Higher resolution provides more detail:
-
-```javascript
-inputStream: {
- size: 1280, // Larger processing size
- constraints: {
- width: { ideal: 1920 },
- height: { ideal: 1080 }
- }
-}
-```
-
-### Disable Half Sampling {#disable-half-sampling}
-
-For fine details, process at full resolution:
-
-```javascript
-locator: {
- halfSample: false
-}
-```
-
-## Handling False Positives {#handling-false-positives}
-
-### Validate Results {#validate-results}
-
-Check result confidence and format:
-
-```javascript
-Quagga.onDetected(function(result) {
- // Check if result has expected format
- if (result.codeResult.format !== 'ean_13') {
- return; // Ignore unexpected formats
- }
-
- // Validate checksum externally if needed
- if (!validateBarcode(result.codeResult.code)) {
- return;
- }
-
- processBarcode(result.codeResult.code);
-});
-```
-
-### Require Multiple Reads {#require-multiple-reads}
-
-Confirm detection across multiple frames:
-
-```javascript
-let lastCode = null;
-let readCount = 0;
-
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
-
- if (code === lastCode) {
- readCount++;
- if (readCount >= 3) {
- // Confirmed detection
- processBarcode(code);
- readCount = 0;
- }
- } else {
- lastCode = code;
- readCount = 1;
- }
-});
-```
-
-## Using Debug Flags {#using-debug-flags}
-
-Enable visual debugging to understand detection issues:
-
-```javascript
-Quagga.init({
- debug: true,
- decoder: {
- debug: {
- drawBoundingBox: true,
- drawScanline: true
- }
- },
- locator: {
- debug: {
- showFoundPatches: true
- }
- }
-});
-```
-
-See [Use Debug Flags](use-debug-flags.md) for complete details.
-
-## Related {#related}
-
-- [Configuration Reference](../reference/configuration.md) - All configuration options
-- [Optimize Performance](optimize-performance.md) - Balance accuracy vs speed
-- [Use Debug Flags](use-debug-flags.md) - Diagnostic tools
-
----
-
-[â Back to How-To Guides](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/index.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/index.md
deleted file mode 100644
index ec214d2..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# How-To Guides
-
-Task-oriented guides for solving specific problems with Quagga2. These assume you have basic familiarity with the library and focus on getting things done.
-
-## Configuration & Setup
-
-### [Configure Barcode Readers](configure-readers.md)
-
-Select which barcode formats to scan (EAN, CODE 128, UPC, etc.) and understand the trade-offs.
-
-### [Use Debug Flags](use-debug-flags.md) đ
-
-Enable diagnostic output to troubleshoot issues with localization, decoding, or camera setup.
-
-## Performance & Quality
-
-### [Optimize Performance](optimize-performance.md)
-
-Improve scanning speed and reduce CPU usage through configuration tuning.
-
-### [Handle Difficult Barcodes](handle-difficult-barcodes.md)
-
-Techniques for decoding barcodes with poor lighting, damage, rotation, or small size.
-
-## Advanced Features
-
-### [Create External Readers](external-readers.md)
-
-Build custom barcode decoder plugins to support additional formats.
-
-## Camera & Input
-
-### [Select Specific Camera](select-camera.md) *(Coming Soon)*
-
-Choose between front/back cameras on mobile devices or select from multiple USB cameras.
-
-### [Adjust Camera Settings](camera-settings.md) *(Coming Soon)*
-
-Control focus, zoom, flash/torch, and other camera parameters.
-
-## Drawing & Visualization
-
-### [Working with Box Coordinates](working-with-coordinates.md) đ
-
-Understand how `box`, `boxes`, and `line` coordinates relate to processed vs. original image dimensions, and how to properly scale coordinates for overlay rendering on video elements.
-
-## Tips & Best Practices
-
-### [Tips and Tricks](tips-and-tricks.md)
-
-Practical advice for getting the best results with Quagga2, including camera setup, user experience, and handling results.
-
-## Integration
-
-### [Handle Multiple Barcodes](multiple-barcodes.md) *(Coming Soon)*
-
-Detect and decode several barcodes in a single frame simultaneously.
-
-### [Scan in Background](background-scanning.md) *(Coming Soon)*
-
-Continue scanning while users interact with other UI elements.
-
-## Differences from Tutorials
-
-**Tutorials** are for learning - they're comprehensive, beginner-friendly, and explain *why* you're doing each step.
-
-**How-To Guides** are for doing - they're focused, assume knowledge, and show *how* to accomplish specific goals.
-
-If you're new to Quagga2, start with [Tutorials](../tutorials/) instead.
-
-## Contributing
-
-Have a useful technique or solution to share? We welcome contributions! See the [Contributing Guide](../contributing.md).
-
----
-
-[â Back to Documentation Home](../index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/optimize-performance.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/optimize-performance.md
deleted file mode 100644
index 7d966af..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/optimize-performance.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# Optimize Performance {#optimize-performance}
-
-This guide covers techniques to improve Quagga2's barcode scanning performance.
-
-## Overview {#overview}
-
-Performance optimization in Quagga2 involves balancing accuracy against speed. The key areas to optimize are:
-
-- Input resolution and scaling
-- Locator configuration
-- Reader selection
-- Processing frequency
-
-## Input Resolution {#input-resolution}
-
-### Using `inputStream.size` {#inputstream-size}
-
-Reducing the processing resolution is the most effective way to improve performance:
-
-```javascript
-Quagga.init({
- inputStream: {
- size: 640 // Process at 640px max dimension instead of full resolution
- }
-});
-```
-
-**Recommended values:**
-- **1280px** - High quality, slower (good for static images)
-- **800px** - Balanced (default for `decodeSingle`)
-- **640px** - Fast (recommended for live scanning)
-- **480px** - Very fast (may reduce accuracy)
-
-### Camera Constraints {#camera-constraints}
-
-Request only the resolution you need:
-
-```javascript
-inputStream: {
- constraints: {
- width: { ideal: 1280 },
- height: { ideal: 720 }
- }
-}
-```
-
-## Locator Configuration {#locator-configuration}
-
-### Half Sampling {#half-sampling}
-
-Keep `halfSample: true` (default) for faster localization:
-
-```javascript
-locator: {
- halfSample: true // Processes at half resolution
-}
-```
-
-### Patch Size {#patch-size}
-
-Larger patch sizes are faster but may miss small barcodes:
-
-```javascript
-locator: {
- patchSize: "large" // Options: x-small, small, medium, large, x-large
-}
-```
-
-## Reader Selection {#reader-selection}
-
-Only enable the barcode formats you need:
-
-```javascript
-decoder: {
- readers: ["code_128_reader"] // Don't enable all readers
-}
-```
-
-## Processing Frequency {#processing-frequency}
-
-Limit scan rate to reduce CPU usage:
-
-```javascript
-Quagga.init({
- frequency: 10 // Max 10 scans per second
-});
-```
-
-## Disable Localization {#disable-localization}
-
-If barcode position is fixed, disable localization entirely:
-
-```javascript
-Quagga.init({
- locate: false,
- inputStream: {
- area: {
- top: "25%",
- right: "25%",
- bottom: "25%",
- left: "25%"
- }
- }
-});
-```
-
-## Related {#related}
-
-- [Configuration Reference](../reference/configuration.md) - All configuration options
-- [How Barcode Localization Works](../explanation/how-barcode-localization-works.md) - Understanding the algorithm
-
----
-
-[â Back to How-To Guides](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/tips-and-tricks.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/tips-and-tricks.md
deleted file mode 100644
index 77d0ddf..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/tips-and-tricks.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Tips and Tricks {#tips-and-tricks}
-
-Practical advice for getting the best results with Quagga2.
-
-## Camera Setup {#camera-setup}
-
-### Choosing the Right Camera {#choosing-camera}
-
-- Use the **back camera** on mobile devices (higher resolution, autofocus)
-- Request environment-facing camera: `facingMode: "environment"`
-- Avoid wide-angle cameras for barcode scanning
-
-### Optimal Distance {#optimal-distance}
-
-- Barcode should fill 50-80% of the frame width
-- Too close: barcode may be out of focus
-- Too far: insufficient resolution for small bars
-
-## Lighting {#lighting}
-
-- Ensure even lighting across the barcode
-- Avoid harsh shadows or reflections
-- Enable torch/flash for dark environments:
-
-```javascript
-await Quagga.CameraAccess.enableTorch();
-```
-
-## User Experience {#user-experience}
-
-### Visual Feedback {#visual-feedback}
-
-Show users the scan area:
-
-```javascript
-inputStream: {
- area: {
- top: "25%",
- right: "10%",
- bottom: "25%",
- left: "10%",
- borderColor: "rgba(0, 255, 0, 0.7)",
- borderWidth: 2
- }
-}
-```
-
-### Audio Feedback {#audio-feedback}
-
-Play a sound on successful scan:
-
-```javascript
-Quagga.onDetected(function(result) {
- new Audio('/beep.mp3').play();
- processBarcode(result.codeResult.code);
-});
-```
-
-## Performance {#performance}
-
-### Reduce CPU Usage {#reduce-cpu-usage}
-
-```javascript
-Quagga.init({
- frequency: 10, // Limit to 10 scans/second
- inputStream: {
- size: 640 // Reduce processing resolution
- }
-});
-```
-
-### Stop When Not Needed {#stop-when-not-needed}
-
-```javascript
-// Stop scanning when modal closes
-Quagga.stop();
-
-// Remove event handlers
-Quagga.offDetected();
-Quagga.offProcessed();
-```
-
-## Handling Results {#handling-results}
-
-### Debounce Detections {#debounce-detections}
-
-Avoid processing the same barcode multiple times:
-
-```javascript
-let lastScanned = '';
-let lastTime = 0;
-
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
- const now = Date.now();
-
- if (code === lastScanned && now - lastTime < 2000) {
- return; // Same barcode within 2 seconds
- }
-
- lastScanned = code;
- lastTime = now;
- processBarcode(code);
-});
-```
-
-## Related {#related}
-
-- [Optimize Performance](optimize-performance.md) - Detailed performance guide
-- [Handle Difficult Barcodes](handle-difficult-barcodes.md) - Improve detection
-- [Camera Access API](../reference/camera-access.md) - Camera control
-
----
-
-[â Back to How-To Guides](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/use-debug-flags.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/use-debug-flags.md
deleted file mode 100644
index c0e5697..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/use-debug-flags.md
+++ /dev/null
@@ -1,776 +0,0 @@
-# How to Use Debug Flags {#how-to-use-debug-flags}
-
-Quagga2 includes several debug flags that enable diagnostic console output to help troubleshoot issues with barcode detection and decoding. This guide explains when and how to use them.
-
-## Overview {#overview}
-
-Debug flags control what information Quagga2 logs to the browser console. By default, **all debug output is suppressed** to keep your console clean. Enable specific flags when you need to diagnose problems.
-
-## Important Note {#important-note}
-
-Debug flags only work when `ENV.development` is `true` (development builds). Production builds strip out all debug code to minimize bundle size.
-
-## Available Debug Flags {#available-debug-flags}
-
-Debug flags are organized into three categories:
-
-1. **Console logging flags** - Print diagnostic information to the console
-2. **Visual canvas overlays** - Draw debugging information on the canvas
-3. **Performance analysis** - Display frequency and pattern data
-
-### Console Logging Flags {#console-logging-flags}
-
-#### `inputStream.debug.showImageDetails` {#inputstream-debug-showimagedetails}
-
-**What it shows**: Image loading and frame grabber operations
-
-**Console output example**:
-
-```text
-*** frame_grabber_browser: willReadFrequency=undefined canvas=
-Image Loader: Loaded 3 images from /path/to/image.jpg
-```
-
-**When to use**:
-
-- Camera feed not showing
-- Images not loading from file input
-- Canvas-related issues
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- inputStream: {
- // ... your input config
- debug: {
- showImageDetails: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `decoder.debug.printReaderInfo` {#decoder-debug-printreaderinfo}
-
-**What it shows**: Barcode reader registration and initialization
-
-**Console output example**:
-
-```text
-* ImageWrapper getCanvasAndContext
-Registering reader: code_128_reader
-Before registering reader: EANReader
-Registered Readers: code_128, ean
-```
-
-**When to use**:
-
-- Verifying which readers are active
-- Reader not detecting expected barcode type
-- Multiple reader configuration issues
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: ["code_128_reader", "ean_reader"],
- debug: {
- printReaderInfo: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showPatchSize` {#locator-debug-showpatchsize}
-
-**What it shows**: Patch dimensions during barcode localization
-
-**Console output example**:
-
-```text
-Patch-Size: 320x240
-```
-
-**When to use**:
-
-- Barcode locator not finding barcodes
-- Understanding what image size the locator is processing
-- Performance optimization (smaller patches = faster)
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- patchSize: "medium",
- debug: {
- showPatchSize: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showImageDetails` {#locator-debug-showimagedetails}
-
-**What it shows**: Canvas and image wrapper initialization for locator
-
-**Console output example**:
-
-```text
-* initCanvas getCanvasAndContext
-* ImageWrapper getCanvasAndContext
-```
-
-**When to use**:
-
-- Locator canvas not rendering
-- Debugging locator initialization failures
-- Understanding when canvas contexts are created
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- // ... your locator config
- debug: {
- showImageDetails: true
- }
- },
- // ... rest of config
-});
-```
-
-### Visual Canvas Overlay Flags {#visual-canvas-overlay-flags}
-
-These flags draw debugging information directly on the canvas, allowing you to visualize the barcode detection algorithm's internal state.
-
-Note: The scan area overlay (defined via `inputStream.area`) is not a debug flag. When `locate: false`, Quagga draws the scan area on the overlay canvas each processed frame. You can also draw it manually using `Quagga.drawScannerArea()`. See the [Configuration Reference](../reference/configuration.md#inputstream-area-drawing) and [API](../reference/api.md#quagga-drawscannerarea).
-
-#### `decoder.debug.drawBoundingBox` {#decoder-debug-drawboundingbox}
-
-**What it shows**: Draws a box around the detected barcode location
-
-**When to use**:
-
-- Verify barcode is being located correctly
-- Debug positioning issues
-- Understand where the decoder thinks the barcode is
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- decoder: {
- debug: {
- drawBoundingBox: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `decoder.debug.drawScanline` {#decoder-debug-drawscanline}
-
-**What it shows**: Draws the scanline path used for decoding
-
-**When to use**:
-
-- Verify scanner is reading through the barcode correctly
-- Debug angle/orientation issues
-- Understand why certain barcodes fail to decode
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- decoder: {
- debug: {
- drawScanline: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showCanvas` {#locator-debug-showcanvas}
-
-**What it shows**: Displays the locator's internal canvas used for image processing
-
-**When to use**:
-
-- Debug localization algorithm
-- Verify image preprocessing is working
-- Understand what the locator "sees"
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showCanvas: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showPatches` {#locator-debug-showpatches}
-
-**What it shows**: Draws all patches extracted during the localization phase
-
-**When to use**:
-
-- Debug patch extraction issues
-- Verify patch size is appropriate
-- Understand what regions are being analyzed
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showPatches: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showFoundPatches` {#locator-debug-showfoundpatches}
-
-**What it shows**: Highlights patches where potential barcodes were found
-
-**When to use**:
-
-- Verify barcode candidates are being identified
-- Debug false positives/negatives in patch detection
-- Optimize patch threshold settings
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showFoundPatches: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showSkeleton` {#locator-debug-showskeleton}
-
-**What it shows**: Displays the skeleton structure extracted from patches
-
-**When to use**:
-
-- Debug advanced localization algorithm
-- Understand structure detection
-- Verify skeleton extraction is working
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showSkeleton: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showLabels` {#locator-debug-showlabels}
-
-**What it shows**: Displays component labels during connected component analysis
-
-**When to use**:
-
-- Debug component labeling phase
-- Verify components are being identified correctly
-- Understand clustering behavior
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showLabels: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showPatchLabels` {#locator-debug-showpatchlabels}
-
-**What it shows**: Shows labels assigned to individual patches
-
-**When to use**:
-
-- Debug patch classification
-- Verify patches are being labeled correctly
-- Understand patch grouping
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showPatchLabels: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.showRemainingPatchLabels` {#locator-debug-showremainingpatchlabels}
-
-**What it shows**: Displays labels for patches remaining after filtering
-
-**When to use**:
-
-- Debug patch filtering logic
-- Verify correct patches survive filtering
-- Optimize filter thresholds
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showRemainingPatchLabels: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.boxFromPatches.showTransformed` {#locator-debug-boxfrompatches-showtransformed}
-
-**What it shows**: Shows transformed patch coordinates during box calculation
-
-**When to use**:
-
-- Debug coordinate transformation
-- Verify spatial transformations are correct
-- Understand box calculation from patches
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- boxFromPatches: {
- showTransformed: true
- }
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.boxFromPatches.showTransformedBox` {#locator-debug-boxfrompatches-showtransformedbox}
-
-**What it shows**: Displays the bounding box after transformation
-
-**When to use**:
-
-- Debug box transformation
-- Verify box coordinates after spatial transform
-- Understand final box positioning
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- boxFromPatches: {
- showTransformedBox: true
- }
- }
- },
- // ... rest of config
-});
-```
-
-#### `locator.debug.boxFromPatches.showBB` {#locator-debug-boxfrompatches-showbb}
-
-**What it shows**: Displays the final bounding box around detected barcode region
-
-**When to use**:
-
-- Verify final bounding box is correct
-- Debug box calculation from patches
-- Optimize localization accuracy
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- boxFromPatches: {
- showBB: true
- }
- }
- },
- // ... rest of config
-});
-```
-
-### Performance Analysis Flags {#performance-analysis-flags}
-
-#### `decoder.debug.showFrequency` {#decoder-debug-showfrequency}
-
-**What it shows**: Displays frequency data from the barcode scanline
-
-**When to use**:
-
-- Analyze barcode signal quality
-- Debug decoding issues at the signal level
-- Understand why certain barcodes fail to decode
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- decoder: {
- debug: {
- showFrequency: true
- }
- },
- // ... rest of config
-});
-```
-
-#### `decoder.debug.showPattern` {#decoder-debug-showpattern}
-
-**What it shows**: Displays the pattern data extracted from the barcode
-
-**When to use**:
-
-- Analyze pattern recognition issues
-- Debug specific barcode format problems
-- Understand pattern extraction process
-
-**How to enable**:
-
-```javascript
-Quagga.init({
- decoder: {
- debug: {
- showPattern: true
- }
- },
- // ... rest of config
-});
-```
-
-## Common Debugging Scenarios {#common-debugging-scenarios}
-
-### "No barcodes detected" {#no-barcodes-detected}
-
-Enable console logging first, then add visual overlays if needed:
-
-```javascript
-Quagga.init({
- inputStream: {
- target: document.querySelector('#scanner'),
- debug: {
- showImageDetails: true
- }
- },
- decoder: {
- readers: ["code_128_reader"],
- debug: {
- printReaderInfo: true,
- drawBoundingBox: true, // Visual: see if barcode is located
- drawScanline: true // Visual: see scan path
- }
- },
- locator: {
- debug: {
- showPatchSize: true,
- showImageDetails: true,
- showFoundPatches: true // Visual: see candidate patches
- }
- }
-}, function(err) {
- if (err) {
- console.error("Init error:", err);
- return;
- }
- console.log("Starting Quagga...");
- Quagga.start();
-});
-```
-
-Check console for:
-
-- â
Readers registered correctly?
-- â
Images loading?
-- â
Patch size reasonable (not 0x0)?
-- â
Canvas contexts created?
-
-Check canvas overlay for:
-
-- â
Are patches being detected? (green highlights)
-- â
Is a bounding box drawn?
-- â
Is the scanline visible and passing through the barcode?
-
-### "Camera not working" {#camera-not-working}
-
-Enable input stream debugging:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- debug: {
- showImageDetails: true // Shows camera/canvas setup
- }
- },
- // ... rest of config
-});
-```
-
-### "Wrong barcode type detected" {#wrong-barcode-type}
-
-Enable reader info to verify configuration:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: [
- "code_128_reader", // Did you enable the right readers?
- "ean_reader"
- ],
- debug: {
- printReaderInfo: true // Shows which readers are active
- }
- },
- // ... rest of config
-});
-```
-
-### "Deep-dive localization debugging" {#deep-dive-debugging}
-
-For advanced debugging of the localization algorithm, enable all visual overlays:
-
-```javascript
-Quagga.init({
- locator: {
- debug: {
- showCanvas: true,
- showPatches: true,
- showFoundPatches: true,
- showSkeleton: true,
- showLabels: true,
- showPatchLabels: true,
- showRemainingPatchLabels: true,
- boxFromPatches: {
- showTransformed: true,
- showTransformedBox: true,
- showBB: true
- }
- }
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-This will display every step of the localization process visually on the canvas. Use this to:
-
-- Understand the complete localization pipeline
-- Optimize patch size and thresholds
-- Debug complex barcode positioning issues
-- Learn how the algorithm works
-
-**Warning**: Enabling all visual overlays may impact performance and make the canvas cluttered. Enable only what you need.
-
-## Performance Impact {#performance-impact}
-
-Debug flags have varying performance impacts:
-
-**Console logging flags** (minimal impact):
-
-- `showImageDetails`, `printReaderInfo`, `showPatchSize` - negligible overhead
-- Only execute when enabled and only in development builds
-
-**Visual canvas overlays** (moderate to high impact):
-
-- Drawing operations on canvas can slow down real-time detection
-- More overlays = more draw calls = slower performance
-- Consider disabling in production or using only for development/debugging
-
-**Performance analysis flags** (high impact):
-
-- `showFrequency`, `showPattern` - can generate large amounts of data
-- Best used sparingly when diagnosing specific decoding issues
-
-**Recommendation**: Enable only the flags you need. Disable all visual overlays for production.
-
-## Disabling Debug Output {#disabling-debug-output}
-
-To turn off all debug output, either:
-
-**Option 1**: Remove debug properties entirely
-
-```javascript
-Quagga.init({
- inputStream: {
- // debug property removed
- },
- // ...
-});
-```
-
-**Option 2**: Set flags to `false`
-
-```javascript
-Quagga.init({
- inputStream: {
- debug: {
- showImageDetails: false
- }
- },
- decoder: {
- debug: {
- printReaderInfo: false,
- drawBoundingBox: false,
- drawScanline: false,
- showFrequency: false,
- showPattern: false
- }
- },
- locator: {
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- showPatchSize: false,
- showImageDetails: false,
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false
- }
- }
- }
-});
-```
-
-## Using in Node.js {#using-in-nodejs}
-
-Debug flags work in Node.js too! Output goes to `console.log`:
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-Quagga.decodeSingle({
- src: './barcode.jpg',
- decoder: {
- readers: ['code_128_reader'],
- debug: {
- printReaderInfo: true // Shows reader registration
- }
- }
-}, (result) => {
- // Check console for debug output
- if (result) {
- console.log('Decoded:', result.codeResult.code);
- }
-});
-```
-
-## Development vs Production {#development-vs-production}
-
-**Development builds** (`dist/quagga.js` or when using webpack dev server):
-
-- Debug flags work
-- Console output visible
-- Larger file size
-
-**Production builds** (`dist/quagga.min.js`):
-
-- Debug flags are stripped out (no-op)
-- No console output
-- Smaller file size
-
-To enable debug output in production:
-
-1. Use the development build (`quagga.js` instead of `quagga.min.js`)
-2. Set `ENV.development = true` before importing Quagga
-
-## Summary {#summary}
-
-Quagga2 provides **19 debug flags** organized into three categories:
-
-**Console logging** (4 flags) - Minimal performance impact:
-
-- `inputStream.debug.showImageDetails` - Frame grabber and image loading
-- `decoder.debug.printReaderInfo` - Reader registration
-- `locator.debug.showPatchSize` - Patch dimensions
-- `locator.debug.showImageDetails` - Canvas initialization
-
-**Visual canvas overlays** (13 flags) - Moderate to high performance impact:
-
-- `decoder.debug.drawBoundingBox` - Barcode location box
-- `decoder.debug.drawScanline` - Scan path
-- `locator.debug.showCanvas` - Locator's internal canvas
-- `locator.debug.showPatches` - All extracted patches
-- `locator.debug.showFoundPatches` - Candidate patches
-- `locator.debug.showSkeleton` - Skeleton structure
-- `locator.debug.showLabels` - Component labels
-- `locator.debug.showPatchLabels` - Patch labels
-- `locator.debug.showRemainingPatchLabels` - Post-filter labels
-- `locator.debug.boxFromPatches.showTransformed` - Transformed coordinates
-- `locator.debug.boxFromPatches.showTransformedBox` - Transformed box
-- `locator.debug.boxFromPatches.showBB` - Final bounding box
-
-**Performance analysis** (2 flags) - High impact:
-
-- `decoder.debug.showFrequency` - Signal frequency data
-- `decoder.debug.showPattern` - Pattern extraction data
-
-**Debugging strategy**: Start with console logging flags, then add visual overlays as needed. Disable all flags in production.
-
-## Related {#related}
-
-- [Configuration Reference](../reference/configuration.md) - Complete config documentation
-- [Optimize Performance](optimize-performance.md) - Speed up barcode detection
-- [Handle Difficult Barcodes](handle-difficult-barcodes.md) - Improve detection accuracy
-
-## Changelog {#changelog}
-
-**v1.8.4+** (November 2025): Debug flags introduced to replace always-on console spam
-
-Prior versions logged debug information unconditionally, making it difficult to debug application code. The new flag system provides fine-grained control over diagnostic output.
-
----
-
-**Questions?** Ask in [Gitter Chat](https://gitter.im/quaggaJS/Lobby) or [open an issue](https://github.com/ericblade/quagga2/issues).
diff --git a/quagga2/quagga2-1.12.1/docs/how-to-guides/working-with-coordinates.md b/quagga2/quagga2-1.12.1/docs/how-to-guides/working-with-coordinates.md
deleted file mode 100644
index 9da6aa1..0000000
--- a/quagga2/quagga2-1.12.1/docs/how-to-guides/working-with-coordinates.md
+++ /dev/null
@@ -1,254 +0,0 @@
-# Working with Box Coordinates {#working-with-box-coordinates}
-
-This guide explains how Quagga2's coordinate system works and how to properly use `box`, `boxes`, and `line` coordinates for overlay rendering, especially when using `inputStream.size` to scale processing.
-
-## Understanding the Coordinate System {#understanding-coordinate-system}
-
-Quagga2 returns `box`, `boxes`, and `line` coordinates in **processed canvas coordinates**, not original image/video coordinates. This is important to understand when:
-
-- Drawing overlay boxes on a video element
-- Using `inputStream.size` to reduce processing resolution
-- Cropping detected barcode regions from the original image
-
-### Key Concepts {#key-concepts}
-
-| Term | Description |
-|------|-------------|
-| **Real Size** | The actual dimensions of the source image/video |
-| **Processed Size** | The scaled dimensions used for barcode detection (controlled by `inputStream.size`) |
-| **Canvas Size** | The dimensions of the processing canvas (typically matches processed size) |
-
-### How Coordinates are Generated {#how-coordinates-generated}
-
-1. **Image Scaling**: When `inputStream.size` is set, the image is scaled so the longest side equals that value
-2. **Localization**: Barcode regions are found in the scaled image
-3. **Box Coordinates**: Returned coordinates are relative to the scaled/processed image
-4. **halfSample Adjustment**: If `halfSample: true`, coordinates are automatically scaled 2x
-
-## Converting Coordinates to Original Image Space {#converting-coordinates}
-
-When you need to draw boxes on the original video/image (not the processed canvas), you must scale the coordinates.
-
-### For Live Video Streams {#live-video-streams}
-
-```javascript
-Quagga.onDetected(function(result) {
- if (!result.box) return;
-
- // Get the video element
- const video = document.querySelector('video');
- const videoWidth = video.videoWidth; // Real video dimensions
- const videoHeight = video.videoHeight;
-
- // Get processed dimensions from Quagga
- const canvas = Quagga.canvas.dom.image;
- const processedWidth = canvas.width;
- const processedHeight = canvas.height;
-
- // Calculate scale factors
- const scaleX = videoWidth / processedWidth;
- const scaleY = videoHeight / processedHeight;
-
- // Convert box coordinates to video space
- const scaledBox = result.box.map(function(point) {
- return [
- point[0] * scaleX,
- point[1] * scaleY
- ];
- });
-
- // Now use scaledBox for drawing on video overlay
- drawBoxOnVideo(scaledBox);
-});
-```
-
-### For Static Images with decodeSingle {#static-images-decodesingle}
-
-```javascript
-Quagga.decodeSingle({
- src: './barcode.jpg',
- inputStream: {
- size: 800 // Process at 800px max dimension
- },
- // ... other config
-}, function(result) {
- if (!result || !result.box) return;
-
- // Load original image to get real dimensions
- const img = new Image();
- img.onload = function() {
- const realWidth = img.naturalWidth;
- const realHeight = img.naturalHeight;
-
- // Calculate what the processed size was
- const aspectRatio = realWidth / realHeight;
- let processedWidth, processedHeight;
-
- if (aspectRatio > 1) {
- // Landscape: width is the longest side
- processedWidth = 800;
- processedHeight = Math.floor(800 / aspectRatio);
- } else {
- // Portrait: height is the longest side
- processedHeight = 800;
- processedWidth = Math.floor(800 * aspectRatio);
- }
-
- // Calculate scale factors
- const scaleX = realWidth / processedWidth;
- const scaleY = realHeight / processedHeight;
-
- // Convert coordinates
- const scaledBox = result.box.map(function(point) {
- return [
- point[0] * scaleX,
- point[1] * scaleY
- ];
- });
-
- // Use scaledBox for original image operations
- cropBarcodeFromOriginal(scaledBox);
- };
- img.src = './barcode.jpg';
-});
-```
-
-## Complete Example: Drawing Boxes on Live Video {#complete-example}
-
-Here's a complete example showing how to draw accurate bounding boxes on a live video stream:
-
-```javascript
-// Initialize Quagga with reduced processing size for performance
-Quagga.init({
- inputStream: {
- name: "Live",
- type: "LiveStream",
- target: document.querySelector('#scanner-container'),
- constraints: {
- width: 1280,
- height: 720,
- facingMode: "environment"
- },
- size: 640 // Process at 640px for better performance
- },
- locator: {
- patchSize: "medium",
- halfSample: true
- },
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-
-// Handle detections with coordinate scaling
-Quagga.onDetected(function(result) {
- const video = document.querySelector('video');
- const overlay = document.querySelector('#overlay-canvas');
- const ctx = overlay.getContext('2d');
-
- // Match overlay to video size
- overlay.width = video.videoWidth;
- overlay.height = video.videoHeight;
-
- // Get processed canvas size
- const processedCanvas = Quagga.canvas.dom.image;
-
- // Calculate scale factors
- const scaleX = video.videoWidth / processedCanvas.width;
- const scaleY = video.videoHeight / processedCanvas.height;
-
- // Clear previous drawings
- ctx.clearRect(0, 0, overlay.width, overlay.height);
-
- // Draw all detected boxes
- if (result.boxes) {
- result.boxes.forEach(function(box) {
- drawScaledBox(ctx, box, scaleX, scaleY, '#00ff00');
- });
- }
-
- // Highlight the successfully decoded box
- if (result.box) {
- drawScaledBox(ctx, result.box, scaleX, scaleY, '#ff0000');
- }
-});
-
-function drawScaledBox(ctx, box, scaleX, scaleY, color) {
- ctx.strokeStyle = color;
- ctx.lineWidth = 2;
- ctx.beginPath();
-
- // Scale and draw each point
- const scaledPoints = box.map(p => [p[0] * scaleX, p[1] * scaleY]);
-
- ctx.moveTo(scaledPoints[0][0], scaledPoints[0][1]);
- for (let i = 1; i < scaledPoints.length; i++) {
- ctx.lineTo(scaledPoints[i][0], scaledPoints[i][1]);
- }
- ctx.closePath();
- ctx.stroke();
-}
-```
-
-## When Coordinates Don't Need Scaling {#no-scaling-needed}
-
-If you're drawing on Quagga's own overlay canvas (`Quagga.canvas.dom.overlay`), coordinates are already in the correct space:
-
-```javascript
-Quagga.onDetected(function(result) {
- const ctx = Quagga.canvas.ctx.overlay;
- const canvas = Quagga.canvas.dom.overlay;
-
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- // No scaling needed - coordinates match the overlay canvas
- if (result.box) {
- Quagga.ImageDebug.drawPath(result.box, { x: 0, y: 1 }, ctx, {
- color: "#00ff00",
- lineWidth: 2
- });
- }
-});
-```
-
-## Common Pitfalls {#common-pitfalls}
-
-### 1. Forgetting halfSample Adjustment {#forgetting-halfsample}
-
-If you're manually calculating processed size, remember that `halfSample: true` doesn't affect the returned coordinates (they're already adjusted).
-
-### 2. Using Wrong Canvas Reference {#wrong-canvas-reference}
-
-```javascript
-// â Wrong - using overlay canvas for scale calculation
-const wrongWidth = Quagga.canvas.dom.overlay.width;
-
-// â
Correct - using image canvas for scale calculation
-const correctWidth = Quagga.canvas.dom.image.width;
-```
-
-### 3. Assuming Square Pixels {#assuming-square-pixels}
-
-Always calculate scaleX and scaleY separately, as aspect ratios may differ:
-
-```javascript
-// â Wrong - using single scale factor
-const scale = videoWidth / canvasWidth;
-
-// â
Correct - separate scale factors
-const scaleX = videoWidth / canvasWidth;
-const scaleY = videoHeight / canvasHeight;
-```
-
-## Performance Tips {#performance-tips}
-
-1. **Use smaller `inputStream.size`** (e.g., 640-800) for live video to reduce CPU usage
-2. **Cache scale factors** - recalculate only when video dimensions change
-3. **Use requestAnimationFrame** for smooth overlay rendering
-4. **Consider using Quagga's built-in overlay** when possible to avoid manual scaling
diff --git a/quagga2/quagga2-1.12.1/docs/index.md b/quagga2/quagga2-1.12.1/docs/index.md
deleted file mode 100644
index f8286be..0000000
--- a/quagga2/quagga2-1.12.1/docs/index.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# Quagga2 Documentation
-
-
-Welcome to the Quagga2 documentation! Quagga2 is a JavaScript barcode scanner library supporting real-time location (localization) and decoding of various barcode types in both browser and Node.js environments.
-
-
-[](https://gitter.im/quaggaJS/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-## Quick Links
-
-- [GitHub Repository](https://github.com/ericblade/quagga2)
-- [Changelog](https://github.com/ericblade/quagga2/releases)
-- [npm Package](https://www.npmjs.com/package/@ericblade/quagga2)
-- [Live Examples](examples/)
-
-## Getting Started
-
-New to Quagga2? Start here:
-
-- **[Installation & Quick Start](getting-started.md)** - Get up and running in minutes
-
----
-
-## Documentation Structure
-
-This documentation follows the [Divio Documentation System](https://documentation.divio.com/), organizing content into four types based on what you need:
-
-### đ [Tutorials](tutorials/) - *Learning-oriented*
-
-Step-by-step lessons to help you learn by doing. Perfect if you're just getting started.
-
-- [Your First Barcode Scan](tutorials/first-scan.md) - Scan barcodes with your camera
-- [Decoding Static Images](tutorials/static-image.md) - Process image files
-- [Using with React](tutorials/react-integration.md) - React integration guide
-- [Using with Node.js](tutorials/node-usage.md) - Server-side barcode scanning
-
-### đ ī¸ [How-To Guides](how-to-guides/) - *Task-oriented*
-
-Practical guides for accomplishing specific goals. Use these when you have a problem to solve.
-
-- [Configure Barcode Readers](how-to-guides/configure-readers.md) - Select which barcode types to scan
-- [Optimize Performance](how-to-guides/optimize-performance.md) - Improve speed and accuracy
-- [Handle Difficult Barcodes](how-to-guides/handle-difficult-barcodes.md) - Deal with poor lighting, rotation, etc.
-- [Use Debug Flags](how-to-guides/use-debug-flags.md) - Enable diagnostic output
-- [Create External Readers](how-to-guides/external-readers.md) - Build custom barcode decoder plugins
-
-### đ [Reference](reference/) - *Information-oriented*
-
-Technical descriptions and API documentation. Look here when you need precise details.
-
-- [API Documentation](reference/api.md) - Complete API reference
-- [Configuration Options](reference/configuration.md) - All config parameters explained
-- [Camera Access API](reference/camera-access.md) - Camera control methods
-- [Supported Barcode Types](reference/readers.md) - Available decoders
-- [Browser Support](reference/browser-support.md) - Compatibility information
-- [Dependencies](reference/dependencies.md) - Package dependencies explained
-
-### đĄ [Explanation](explanation/) - *Understanding-oriented*
-
-Background, context, and deeper understanding. Read these to learn *why* things work the way they do.
-
-- [How Barcode Localization Works](explanation/how-barcode-localization-works.md) - The algorithm behind barcode detection
-- [Algorithm Overview](explanation/algorithm-overview.md) - Image processing pipeline
-- [Architecture](explanation/architecture.md) - Code structure and design decisions
-
----
-
-## Additional Resources
-
-- [Contributing Guide](contributing.md) - How to contribute to Quagga2
-- [Gitter Chat](https://gitter.im/quaggaJS/Lobby) - Ask questions and get help
-
----
-
-## Framework Integration
-
-Using Quagga2 with a specific framework?
-
-- **React**: [quagga2-react-example](https://github.com/ericblade/quagga2-react-example/) and [quagga2-redux-middleware](https://github.com/ericblade/quagga2-redux-middleware/)
-- **Angular**: [ngx-barcode-scanner](https://github.com/julienboulay/ngx-barcode-scanner) or [mobile-scanning-demo](https://github.com/classycodeoss/mobile-scanning-demo)
-- **Vue 2**: [vue-quagga-2](https://github.com/DevinNorgarb/vue-quagga-2)
-- **Vue 3**: [vue3-quagga-2](https://github.com/nick-0101/vue3-quagga-2)
-- **ThingWorx**: [ThingworxBarcodeScannerWidget](https://github.com/ptc-iot-sharing/ThingworxBarcodeScannerWidget)
-
----
-
-## External Readers and Other Related Projects {#external-readers}
-
-- **DataMatrix Reader**: [hackathi/quagga2-reader-datamatrix](https://github.com/hackathi/quagga2-reader-datamatrix)
-- **QR Code Reader**: [ericblade/quagga2-qr-code-reader](https://github.com/ericblade/quagga2-qr-code-reader)
-- **PDFBarcodeJS**: [rexshijaku/PDFBarcodeJS](https://github.com/rexshijaku/PDFBarcodeJS)
-
----
-
-## Who Uses Quagga2? {#who-uses}
-Quagga2 is used by developers worldwide in various applications, including inventory management, retail point-of-sale systems, library systems, and mobile scanning apps. If you're using Quagga2 in your project, let us know!
-
-- **Internet Archive Open Library**: [internetarchive/openlibrary](https://github.com/internetarchive/openlibrary)
-- **Grocy**: [grocy/grocy](https://github.com/grocy/grocy)
-- **German Federal Agency For Technical Relief**: [mziech/thw-inventory](https://github.com/mziech/thw-inventory)
-- **Food Coop Shop**: [foodcoopshop/foodcoopshop](https://github.com/foodcoopshop/foodcoopshop)
-- **Rintagi**: [Rintagi/Low-Code-Development-Platform](https://github.com/Rintagi/Low-Code-Development-Platform)
-- **LINE**: [line/line-api-use-case-smart-retail](https://github.com/line/line-api-use-case-smart-retail)
-- **Veganify**: [frontendnetwork/veganify](https://github.com/frontendnetwork/veganify)
-- **Appsemble**: [Appsemble](https://gitlab.com/appsemble/appsemble)
-- **Intake24**: [intake24/intake24](https://github.com/intake24/intake24)
-- **FridgeToPlate**: [COS301-SE-2023/FridgeToPlate](https://github.com/COS301-SE-2023/FridgeToPlate)
-- **Nutri-Scanner**: [kishan9535/Nutri-Scanner](https://github.com/kishan9535/Nutri-Scanner)
-- **Musclog**: [blopa/musclog-app](https://github.com/blopa/musclog-app)
-
-
----
-
-## About This Documentation
-
-This documentation is maintained alongside the Quagga2 codebase. If you find errors or have suggestions for improvement, please [open an issue](https://github.com/ericblade/quagga2/issues) or submit a pull request.
-
-**Last Updated**: November 2025
diff --git a/quagga2/quagga2-1.12.1/docs/reference/api.md b/quagga2/quagga2-1.12.1/docs/reference/api.md
deleted file mode 100644
index a7072dc..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/api.md
+++ /dev/null
@@ -1,758 +0,0 @@
-# API Documentation {#api-documentation}
-
-Complete reference for all Quagga2 methods, callbacks, and events.
-
-## Core Methods {#core-methods}
-
-### `Quagga.init(config, callback)` {#quagga-init}
-
-Initializes the library with the given configuration and requests camera access if using live stream mode.
-
-**Parameters**:
-
-- `config` (Object) - Configuration object. See [Configuration Reference](configuration.md) for complete details.
-- `callback` (Function) - Called when initialization completes: `callback(err)`
- - `err` (Error | null) - Error object if initialization failed, `null` on success
-
-**Returns**: `void`
-
-**Example - Live Camera**:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner') // Or '#scanner'
- },
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(err) {
- if (err) {
- console.error("Initialization failed:", err);
- return;
- }
- console.log("Initialization successful, ready to start");
- Quagga.start();
-});
-```
-
-**Example - Static Images**:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "ImageStream",
- src: "/path/to/images/*.jpg",
- target: document.querySelector('#scanner')
- },
- decoder: {
- readers: ["ean_reader", "code_128_reader"]
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-**Error Handling**:
-
-The callback receives an `err` parameter if initialization fails. Common causes:
-
-- User denies camera permission
-- No camera device found
-- Browser doesn't support required APIs
-- Invalid configuration parameters
-
-Always check for errors before calling `start()`:
-
-**Target Element**:
-
-If no `target` is specified, Quagga looks for an element matching the CSS selector `#interactive.viewport` (for backwards compatibility).
-
-### `Quagga.start()` {#quagga-start}
-
-Starts the video stream and begins locating and decoding barcodes.
-
-**Parameters**: None
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-Quagga.init(config, function(err) {
- if (!err) {
- Quagga.start();
- }
-});
-```
-
-**Prerequisites**:
-
-- `Quagga.init()` must have completed successfully
-- For live stream: Camera permission must be granted
-
-**Note**: Call this in the `init()` callback after checking for errors.
-
-### `Quagga.stop()` {#quagga-stop}
-
-Stops the decoder from processing images and disconnects the camera if one was requested.
-
-**Parameters**: None
-
-**Returns**: `Promise` - Resolves when cleanup is complete
-
-**Example**:
-
-```javascript
-// Stop scanning
-await Quagga.stop();
-console.log("Scanner stopped");
-
-// Or with .then()
-Quagga.stop().then(() => {
- console.log("Scanner stopped");
-});
-```
-
-**Behavior**:
-
-- Stops processing new frames
-- If using live camera: disconnects and releases camera
-- Does not remove event listeners (use `offDetected()` / `offProcessed()` for that)
-- Returns a Promise that resolves when camera release is complete
-
-### `Quagga.pause()` {#quagga-pause}
-
-Pauses frame processing without stopping the camera or releasing resources.
-
-**Parameters**: None
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-// Pause scanning temporarily
-Quagga.pause();
-
-// Later, resume scanning
-Quagga.start();
-```
-
-**Behavior**:
-
-- Stops processing new frames (no more `onProcessed` or `onDetected` callbacks)
-- **Does not stop the camera** - the video stream continues running
-- **Does not release resources** - the camera remains connected
-- Can be resumed by calling `Quagga.start()`
-
-**Use Cases**:
-
-- Temporarily pause scanning while showing a modal or dialog
-- Reduce CPU usage when the scanner is not visible
-- Pause after detecting a barcode to allow user confirmation before resuming
-
-**Difference from `stop()`**:
-
-| Aspect | `pause()` | `stop()` |
-|--------|-----------|----------|
-| Frame processing | Stops | Stops |
-| Camera stream | **Continues** | Disconnects |
-| Resources | **Retained** | Released |
-| Resume with | `start()` | `init()` + `start()` |
-
-> **Note**: Since `pause()` keeps the camera running, the user's camera indicator light will remain on. If you want to fully release the camera, use `stop()` instead.
-
-### `Quagga.onDetected(callback)` {#quagga-ondetected}
-
-Registers a callback that is triggered when a barcode is successfully located and decoded.
-
-**Parameters**:
-
-- `callback` (Function) - Handler function: `callback(data)`
- - `data` (Object) - Result object containing decoded barcode information
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
- const format = result.codeResult.format;
-
- console.log(`Detected ${format} barcode: ${code}`);
-
- // Process the barcode
- processBarcode(code);
-});
-```
-
-**Multiple Handlers**:
-
-You can register multiple handlers - all will be called:
-
-```javascript
-Quagga.onDetected(handler1);
-Quagga.onDetected(handler2); // Both execute on detection
-```
-
-### `Quagga.onProcessed(callback)` {#quagga-onprocessed}
-
-Registers a callback that is called for each processed frame, regardless of detection success.
-
-**Parameters**:
-
-- `callback` (Function) - Handler function: `callback(data)`
- - `data` (Object) - Processing result with detailed information
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-Quagga.onProcessed(function(result) {
- const drawingCtx = Quagga.canvas.ctx.overlay;
- const drawingCanvas = Quagga.canvas.dom.overlay;
-
- if (result) {
- // Draw boxes and lines for visualization
- if (result.boxes) {
- drawingCtx.clearRect(0, 0,
- drawingCanvas.width, drawingCanvas.height);
-
- result.boxes.forEach(function(box) {
- Quagga.ImageDebug.drawPath(box, {x: 0, y: 1},
- drawingCtx, {color: "blue", lineWidth: 2});
- });
- }
-
- if (result.box) {
- Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1},
- drawingCtx, {color: "green", lineWidth: 2});
- }
-
- if (result.codeResult && result.codeResult.code) {
- // Successfully decoded
- console.log("Code detected:", result.codeResult.code);
- }
- }
-});
-```
-
-**Use Cases**:
-
-- Custom visualization of detection process
-- Counting processed frames
-- Performance monitoring
-- Drawing custom overlays
-
-### `Quagga.drawScannerArea()` {#quagga-drawscannerarea}
-
-Manually draws the scanner area overlay on the overlay canvas using the configured `inputStream.area`.
-
-**Parameters**: None (uses the area configuration from `Quagga.init()`)
-
-**Returns**: `void`
-
-**Behavior**:
-
-- Only draws when `locate` is `false` and `inputStream.area` is configured with styling
-- Uses the actual adjusted scanning area (after patch alignment) to accurately match where barcodes will be detected
-- Automatically accounts for the area offset and dimensions
-- Skips drawing if no styling is provided (no `borderColor`, `borderWidth`, or `backgroundColor`)
-- Requires `canvas.createOverlay: true` so the overlay canvas exists
-- Drawing occurs automatically every processed frame when conditions are met
-
-**Example**:
-
-```javascript
-// Configure area during init
-Quagga.init({
- inputStream: {
- area: {
- top: "30%",
- right: "10%",
- bottom: "30%",
- left: "10%",
- borderColor: "#0F0",
- borderWidth: 2,
- backgroundColor: "rgba(255,0,0,0.15)"
- }
- },
- locate: false
-});
-
-// Later, manually redraw if you've cleared the overlay
-Quagga.drawScannerArea();
-```
-
-### `Quagga.offDetected(handler)` {#quagga-offdetected}
-
-Removes a previously registered `onDetected` handler.
-
-**Parameters**:
-
-- `handler` (Function, optional) - Specific handler to remove. If omitted, **all** handlers are removed.
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-function myHandler(result) {
- console.log(result.codeResult.code);
-}
-
-Quagga.onDetected(myHandler);
-
-// Later: remove specific handler
-Quagga.offDetected(myHandler);
-
-// Or remove all handlers
-Quagga.offDetected();
-```
-
-### `Quagga.offProcessed(handler)` {#quagga-offprocessed}
-
-Removes a previously registered `onProcessed` handler.
-
-**Parameters**:
-
-- `handler` (Function, optional) - Specific handler to remove. If omitted, **all** handlers are removed.
-
-**Returns**: `void`
-
-**Example**:
-
-```javascript
-function processHandler(result) {
- // Process frame
-}
-
-Quagga.onProcessed(processHandler);
-
-// Remove specific handler
-Quagga.offProcessed(processHandler);
-
-// Or remove all handlers
-Quagga.offProcessed();
-```
-
-### `Quagga.decodeSingle(config, callback)` {#quagga-decodesingle}
-
-Decodes a single image without using `getUserMedia`. Useful for processing uploaded images or static images.
-
-**Parameters**:
-
-- `config` (Object) - Configuration object (subset of full config)
-- `callback` (Function) - Result handler: `callback(result)`
- - `result` (Object) - Same format as `onDetected` callback
-
-**Returns**: `void`
-
-**Important - Default Scaling**: `decodeSingle` has a built-in default of `inputStream.size: 800`. This means images are **automatically scaled to 800px** on their longest side (both larger images scaled down AND smaller images scaled up). The result's `box`, `boxes`, and `line` coordinates are returned in this scaled coordinate space, not the original image dimensions. To use the original image dimensions without scaling, set `inputStream.size` to `0`.
-
-**Example**:
-
-```javascript
-Quagga.decodeSingle({
- src: '/images/barcode.jpg', // Or data URL
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- },
- locate: true // Try to locate barcode in image
- // Note: inputStream.size defaults to 800; images are scaled to 800px (up or down)
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Detected:", result.codeResult.code);
- console.log("Format:", result.codeResult.format);
- } else {
- console.log("No barcode detected");
- }
-});
-```
-
-**Using Data URLs**:
-
-```javascript
-// From file input
-document.querySelector('#file-input').addEventListener('change', function(e) {
- const file = e.target.files[0];
- const reader = new FileReader();
-
- reader.onload = function(event) {
- Quagga.decodeSingle({
- src: event.target.result, // Data URL
- decoder: {
- readers: ["code_128_reader"]
- }
- // Default size: 800 applies - image scaled if larger
- }, function(result) {
- if (result && result.codeResult) {
- alert("Barcode: " + result.codeResult.code);
- }
- });
- };
-
- reader.readAsDataURL(file);
-});
-```
-
-**Node.js Usage**:
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-Quagga.decodeSingle({
- src: "./barcode.jpg",
- inputStream: {
- size: 800 // This is actually the default; shown explicitly here
- },
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Code:", result.codeResult.code);
- }
-});
-```
-
-## Result Object {#result-object}
-
-The result object passed to `onDetected`, `onProcessed`, and `decodeSingle` callbacks contains detailed information about the detection and decoding process.
-
-### Complete Result Structure {#result-structure}
-
-```javascript
-{
- codeResult: {
- code: "FANAVF1461710", // The decoded barcode string
- format: "code_128", // Barcode format
- start: 355, // Start position
- end: 26, // End position
- codeset: 100, // Code 128 specific
- startInfo: {
- error: 1.0,
- code: 104,
- start: 21,
- end: 41
- },
- decodedCodes: [ // Individual code segments
- { code: 104, start: 21, end: 41 },
- // ... more segments
- { error: 0.88, code: 106, start: 328, end: 350 }
- ],
- endInfo: {
- error: 0.88,
- code: 106,
- start: 328,
- end: 350
- },
- direction: -1 // Scan direction
- },
- line: [ // Scan line coordinates
- { x: 25.97, y: 360.56 },
- { x: 401.92, y: 70.88 }
- ],
- angle: -0.657, // Rotation angle in radians
- pattern: [0, 0, 1, 1, ...], // Bar pattern (0=space, 1=bar)
- box: [ // Primary bounding box (4 corners)
- [77.41, 410.93], // Top-left
- [0.05, 310.54], // Top-right
- [360.16, 33.06], // Bottom-right
- [437.51, 133.45] // Bottom-left
- ],
- boxes: [ // All detected boxes
- [/* box 1 */],
- [/* box 2 */],
- // ...
- ]
-}
-```
-
-### Result Properties {#result-properties}
-
-| Property | Type | Description |
-|----------|------|-------------|
-| `codeResult` | Object | Decoded barcode information (may be `undefined` if detection failed) |
-| `codeResult.code` | String | The decoded barcode value |
-| `codeResult.format` | String | Barcode format (e.g., "code_128", "ean_13") |
-| `codeResult.start` | Number | Start position in pattern |
-| `codeResult.end` | Number | End position in pattern |
-| `codeResult.direction` | Number | Scan direction (1 or -1) |
-| `codeResult.supplement` | Object | (Optional) Supplement barcode data for EAN-13/UPC-A with EAN-2 or EAN-5 extensions |
-| `codeResult.supplement.code` | String | The decoded supplement value (2 or 5 digits) |
-| `codeResult.supplement.format` | String | Supplement format: "ean_2" or "ean_5" |
-| `line` | Array | Two points defining the scan line |
-| `angle` | Number | Barcode rotation angle (radians) |
-| `pattern` | Array | Binary pattern (0=space, 1=bar) |
-| `box` | Array | Bounding box coordinates (4 corner points) |
-| `boxes` | Array | All candidate boxes found during localization. When `locate` is `false`, this contains a single box representing the actual adjusted scanning area (after patch alignment) |
-
-> **Note: `boxes` with `locate: false`**
->
-> When `locate` is `false` and an `inputStream.area` is configured, `result.boxes` contains a single box representing the actual scanning area dimensions. This box reflects the adjusted dimensions after patch alignment (which can differ slightly from the percentage-based area due to rounding to patch size multiples). Use these coordinates if you need to know the exact scanning rectangle:
->
-> ```javascript
-> Quagga.onProcessed(function(result) {
-> if (result.boxes && result.boxes.length > 0) {
-> // When locate=false, boxes[0] is the actual scanning area
-> const scanArea = result.boxes[0];
-> console.log("Scanning area corners:", scanArea);
-> }
-> });
-> ```
-
-> **Important: Coordinate System**
->
-> The `box`, `boxes`, and `line` coordinates are returned in **processed canvas coordinates**, not original image/video coordinates. If you're using `inputStream.size` to scale the processing resolution (e.g., for performance), you'll need to scale these coordinates to match your original video/image dimensions.
->
-> ```javascript
-> // Scale coordinates to original video size
-> const scaleX = video.videoWidth / Quagga.canvas.dom.image.width;
-> const scaleY = video.videoHeight / Quagga.canvas.dom.image.height;
-> const scaledBox = result.box.map(p => [p[0] * scaleX, p[1] * scaleY]);
-> ```
->
-> See [Working with Box Coordinates](../how-to-guides/working-with-coordinates.md) for complete examples.
-
-### Checking for Successful Detection {#checking-detection}
-
-```javascript
-Quagga.onDetected(function(result) {
- // Always check if codeResult exists
- if (result && result.codeResult && result.codeResult.code) {
- console.log("Detected:", result.codeResult.code);
- }
-});
-```
-
-### Using Multiple Barcode Detection {#multiple-barcode-detection}
-
-When `decoder.multiple` is `true`, results are returned as an array:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: ["code_128_reader"],
- multiple: true
- }
-});
-
-Quagga.onDetected(function(result) {
- // result is an array of result objects
- result.forEach(function(item) {
- if (item.codeResult) {
- console.log("Code:", item.codeResult.code);
- console.log("Box:", item.box);
- }
- });
-});
-```
-
-## Canvas Access {#canvas-access}
-
-Quagga automatically creates and manages two canvas elements for visualization. These are positioned over the video/image stream and sized to match the processing dimensions.
-
-### Canvas Structure {#canvas-structure}
-
-```javascript
-Quagga.canvas = {
- dom: {
- image: HTMLCanvasElement, // Canvas for processed image data
- overlay: HTMLCanvasElement | null // Transparent canvas for drawing overlays
- },
- ctx: {
- image: CanvasRenderingContext2D, // Context for image canvas
- overlay: CanvasRenderingContext2D | null // Context for overlay canvas
- }
-};
-```
-
-> **Note**: The overlay canvas can be `null` if `canvas.createOverlay` is set to `false` in the configuration. See [Canvas Configuration](configuration.md#canvas-configuration) for details.
-
-### Overlay Canvas {#overlay-canvas}
-
-The **overlay canvas** (`Quagga.canvas.dom.overlay`) is a transparent canvas element positioned over the video stream. It's automatically created when Quagga initializes (unless `canvas.createOverlay` is `false`) and is designed for drawing bounding boxes, scan lines, and other visual feedback.
-
-**Key characteristics:**
-- Has CSS class `drawingBuffer`
-- Sized to match the processed image dimensions (`inputStream.size`)
-- Positioned absolutely over the video/image element
-- Automatically appended to the viewport container
-- Coordinates match the processed image space (no scaling needed)
-- Can be disabled via `canvas.createOverlay: false` for performance
-
-**Accessing the overlay:**
-```javascript
-const overlay = Quagga.canvas.dom.overlay;
-const overlayCtx = Quagga.canvas.ctx.overlay;
-
-// Always check if overlay exists before using
-if (overlayCtx && overlay) {
- // Clear overlay
- overlayCtx.clearRect(0, 0, overlay.width, overlay.height);
-
- // Draw custom shapes
- overlayCtx.strokeStyle = "red";
- overlayCtx.lineWidth = 3;
- overlayCtx.strokeRect(10, 10, 100, 100);
-}
-```
-
-### Image Canvas {#image-canvas}
-
-The **image canvas** (`Quagga.canvas.dom.image`) contains the processed grayscale image data used for barcode detection. This is primarily for internal use and debugging.
-
-**Key characteristics:**
-- Has CSS class `imgBuffer`
-- Contains the grayscale/processed image data
-- Useful for debugging locator issues
-
-### When to Use Each Canvas {#when-to-use-canvas}
-
-| Use Case | Canvas to Use |
-|----------|---------------|
-| Drawing bounding boxes | `overlay` |
-| Highlighting detected barcodes | `overlay` |
-| Custom scan line visualization | `overlay` |
-| Debugging image processing | `image` |
-| Checking processed resolution | Either (they have same dimensions) |
-
-### Important: Coordinate System {#canvas-coordinate-system}
-
-When drawing on the overlay canvas, use `result.box` and `result.boxes` coordinates directly - **no scaling is needed**. These coordinates are already in the overlay canvas's coordinate space.
-
-```javascript
-Quagga.onProcessed(function(result) {
- const ctx = Quagga.canvas.ctx.overlay;
- const canvas = Quagga.canvas.dom.overlay;
-
- // Clear previous drawings
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- // Draw box directly - coordinates already match the overlay canvas
- if (result && result.box) {
- Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1}, ctx, {
- color: "green", lineWidth: 2
- });
- }
-});
-```
-
-> **Note**: Scaling is only needed when drawing on a **different** canvas (like a custom overlay on the original video element). See [Working with Box Coordinates](../how-to-guides/working-with-coordinates.md) for details.
-
-### CSS Styling {#canvas-css-styling}
-
-The overlay canvas can be styled with CSS for positioning:
-
-```css
-/* Default positioning (handled automatically by Quagga) */
-canvas.drawingBuffer {
- position: absolute;
- top: 0;
- left: 0;
-}
-
-/* Ensure proper stacking */
-#scanner-container {
- position: relative;
-}
-```
-
-## ImageDebug Helper {#imagedebug-helper}
-
-Quagga provides a helper for drawing debug visualizations:
-
-```javascript
-// Draw a path (array of points)
-Quagga.ImageDebug.drawPath(points, offset, ctx, options);
-
-// Example
-Quagga.ImageDebug.drawPath(
- result.box,
- { x: 0, y: 1 },
- overlayCtx,
- { color: "green", lineWidth: 2 }
-);
-```
-
-## Complete Example {#complete-example}
-
-```javascript
-// Initialize
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner'),
- constraints: {
- width: 640,
- height: 480,
- facingMode: "environment"
- }
- },
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
-
- // Start scanning
- Quagga.start();
-});
-
-// Handle detections
-Quagga.onDetected(function(result) {
- console.log("Barcode detected:", result.codeResult.code);
-
- // Stop after first detection
- Quagga.stop();
-
- // Cleanup
- Quagga.offDetected();
- Quagga.offProcessed();
-});
-
-// Visualize processing
-Quagga.onProcessed(function(result) {
- const ctx = Quagga.canvas.ctx.overlay;
- const canvas = Quagga.canvas.dom.overlay;
-
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- if (result && result.box) {
- Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1}, ctx, {
- color: "green",
- lineWidth: 2
- });
- }
-});
-
-// Stop button
-document.querySelector('#stop').addEventListener('click', function() {
- Quagga.stop();
- Quagga.offDetected();
- Quagga.offProcessed();
-});
-```
-
-## Related {#related}
-
-- [Configuration Reference](configuration.md) - Complete configuration options
-- [CameraAccess API](camera-access.md) - Camera control methods
-- [Supported Barcode Types](readers.md) - Available barcode readers
-- [Getting Started](../getting-started.md) - Basic usage examples
-
----
-
-[â Back to Reference](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/reference/browser-support.md b/quagga2/quagga2-1.12.1/docs/reference/browser-support.md
deleted file mode 100644
index b0e29db..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/browser-support.md
+++ /dev/null
@@ -1,109 +0,0 @@
-# Browser Support {#browser-support}
-
-Quagga2 makes use of many modern Web APIs which are not implemented by all browsers yet. This page details browser compatibility and required APIs.
-
-## Operating Modes {#operating-modes}
-
-Quagga2 operates in two modes:
-
-1. **Analyzing static images** - Process existing image files
-2. **Using a camera** - Decode images from a live video stream
-
-The latter requires the MediaDevices API for camera access.
-
-## Browser Compatibility {#browser-compatibility}
-
-You can track the compatibility of the used Web APIs for each mode:
-
-- [Static Images](http://caniuse.com/#feat=canvas,typedarrays,bloburls,blobbuilder)
-- [Live Stream](http://caniuse.com/#feat=canvas,typedarrays,bloburls,blobbuilder,stream)
-
-### Static Image Mode {#static-image-mode}
-
-The following APIs must be supported by your browser:
-
-- [Canvas](http://caniuse.com/#feat=canvas)
-- [Typed Arrays](http://caniuse.com/#feat=typedarrays)
-- [Blob URLs](http://caniuse.com/#feat=bloburls)
-- [Blob Builder](http://caniuse.com/#feat=blobbuilder)
-
-### Live Stream Mode {#live-stream-mode}
-
-In addition to the APIs required for static images:
-
-- [MediaDevices API](http://caniuse.com/#feat=stream) - Required for camera access
-
-## Secure Origins Required {#secure-origins}
-
-**Important**: Accessing `getUserMedia` requires a secure origin in most browsers:
-
-- `http://` can **only** be used on `localhost`
-- All other hostnames **must** be served via `https://`
-
-This is a browser security requirement. Read more in the [Chrome M47 WebRTC Release Notes](https://groups.google.com/forum/#!topic/discuss-webrtc/sq5CVmY69sc).
-
-## Feature Detection {#feature-detection}
-
-### Detecting getUserMedia Support {#detecting-getusermedia}
-
-Every browser implements the `mediaDevices.getUserMedia` API differently. It's highly recommended to include [webrtc-adapter](https://github.com/webrtc/adapter) in your project for cross-browser compatibility.
-
-**How to test browser capabilities:**
-
-```javascript
-if (navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') {
- // Safe to use getUserMedia
- console.log('Camera access is supported');
-} else {
- // Camera access not available
- console.log('Camera access is NOT supported');
-}
-```
-
-### Browser Support Table {#browser-support-table}
-
-The above condition evaluates as follows:
-
-| Browser | Result | Notes |
-|---------------|---------|-------|
-| Chrome | `true` | Full support |
-| Firefox | `true` | Full support |
-| Edge | `true` | Full support |
-| Safari iOS | `true` | Requires HTTPS |
-| IE 11 | `false` | Not supported |
-| Safari Desktop| `true` | macOS 11+ |
-
-## Known Issues {#known-issues}
-
-### iOS Torch/Flash {#ios-torch-flash}
-
-Torch (flash) control via `CameraAccess.enableTorch()` and `CameraAccess.disableTorch()` does **not work** on iOS devices running version 16.4 and earlier. Support on later versions may vary.
-
-### Safari Limitations {#safari-limitations}
-
-- Older Safari versions may require user interaction before camera access
-- Some older iOS versions have limited WebRTC support
-
-### Internet Explorer {#internet-explorer}
-
-Internet Explorer 11 and below do not support the MediaDevices API and cannot use live camera features. Static image decoding may work with polyfills, but this is not officially supported.
-
-## Recommendations {#recommendations}
-
-For best compatibility:
-
-1. **Use HTTPS** - Required for camera access on all non-localhost domains
-2. **Include webrtc-adapter** - Normalizes browser differences
-3. **Feature detect** - Check for API support before attempting to use camera
-4. **Provide fallbacks** - Offer file upload as alternative to camera access
-5. **Test thoroughly** - Browser behavior varies, especially on mobile
-
-## Related {#related}
-
-- [Configuration Reference](configuration.md) - How to configure Quagga2
-- [Camera Access API](camera-access.md) - Camera control methods
-- [Getting Started](../getting-started.md) - Installation and setup
-
----
-
-[â Back to Reference](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/reference/camera-access.md b/quagga2/quagga2-1.12.1/docs/reference/camera-access.md
deleted file mode 100644
index 716b985..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/camera-access.md
+++ /dev/null
@@ -1,376 +0,0 @@
-# CameraAccess API {#cameraaccess-api}
-
-Quagga2 exposes a `CameraAccess` API for direct control of camera functionality. This API provides shortcuts for commonly used camera operations.
-
-**Access**: `Quagga.CameraAccess`
-
-## Overview {#overview}
-
-The CameraAccess API allows you to:
-
-- Request and release camera access
-- Enumerate available video devices
-- Control camera torch (flash)
-- Get information about active video streams and tracks
-
-All methods return Promises for async operation handling.
-
-## Methods {#methods}
-
-### `CameraAccess.request(videoElement, constraints)` {#cameraaccess-request}
-
-Initializes the camera and starts playback.
-
-**Parameters**:
-
-- `videoElement` (HTMLVideoElement | null) - Video element to display camera stream. If `null`, camera initializes but remains invisible.
-- `constraints` (MediaTrackConstraints, optional) - Camera selection and configuration constraints.
-
-**Returns**: `Promise` - Resolves when camera is ready, rejects on error.
-
-**Example**:
-
-```javascript
-const video = document.querySelector('#camera-video');
-
-// Request camera with default constraints
-await Quagga.CameraAccess.request(video);
-
-// Request specific camera
-await Quagga.CameraAccess.request(video, {
- facingMode: 'environment', // Back camera on mobile
- width: { ideal: 1280 },
- height: { ideal: 720 }
-});
-
-// Request camera by device ID
-const deviceId = 'abc123...';
-await Quagga.CameraAccess.request(video, { deviceId });
-
-// Initialize camera without displaying (for probing)
-await Quagga.CameraAccess.request(null);
-```
-
-**Use cases**:
-
-- Start camera before Quagga initialization
-- Probe camera availability and permissions
-- Initialize camera without displaying video
-
-### `CameraAccess.release()` {#cameraaccess-release}
-
-Stops the video stream and releases all camera resources.
-
-**Returns**: `Promise` - Resolves when all tracks are stopped and resources released.
-
-**Example**:
-
-```javascript
-// Stop camera
-await Quagga.CameraAccess.release();
-console.log('Camera released');
-```
-
-**Behavior**:
-
-1. Pauses the video element
-2. Stops all tracks in the media stream
-3. Releases camera for use by other applications
-
-**Note**: Always call `release()` when finished with the camera to free system resources.
-
-### `CameraAccess.enumerateVideoDevices(constraints?)` {#cameraaccess-enumeratevideodevices}
-
-Lists all available video input devices (cameras), optionally filtered by constraints.
-
-**Parameters**:
-
-- `constraints` (MediaTrackConstraints, optional) - Constraints to filter devices. When provided, only devices that can satisfy the given constraints will be returned.
-
-**Returns**: `Promise` - Array of video device information.
-
-**Example**:
-
-```javascript
-// Get all video devices
-const devices = await Quagga.CameraAccess.enumerateVideoDevices();
-
-devices.forEach(device => {
- console.log('Device:', device.label);
- console.log('Device ID:', device.deviceId);
- console.log('Group ID:', device.groupId);
-});
-
-// Example output:
-// Device: Front Camera
-// Device ID: abc123...
-// Device: Back Camera
-// Device ID: def456...
-```
-
-**Filtering devices with constraints**:
-
-```javascript
-// Get only devices that support a minimum resolution
-const hdDevices = await Quagga.CameraAccess.enumerateVideoDevices({
- width: { min: 1280 },
- height: { min: 720 }
-});
-
-// Get only back-facing cameras
-const backCameras = await Quagga.CameraAccess.enumerateVideoDevices({
- facingMode: 'environment'
-});
-
-// Eliminate wide-angle only cameras by specifying aspect ratio
-const standardCameras = await Quagga.CameraAccess.enumerateVideoDevices({
- aspectRatio: { ideal: 1.777 } // 16:9
-});
-```
-
-**Use cases**:
-
-- Build camera selector UI
-- Detect available cameras before initialization
-- Check for front/back camera availability on mobile
-- Filter out cameras that don't meet quality requirements
-- Eliminate wide-angle cameras that may not be suitable for barcode scanning
-
-**Note**: Device labels may be empty strings until camera permission is granted. When using constraints, the method will request temporary access to each device to test if it satisfies the constraints.
-
-### `CameraAccess.getActiveStreamLabel()` {#cameraaccess-getactivestreamlabel}
-
-Gets the label of the currently active video track.
-
-**Returns**: `string` - Label of active video track (e.g., "Back Camera", "USB Camera").
-
-**Example**:
-
-```javascript
-const label = Quagga.CameraAccess.getActiveStreamLabel();
-console.log('Using camera:', label);
-// Output: "Using camera: Back Camera"
-```
-
-**Use cases**:
-
-- Display which camera is currently active
-- Verify correct camera is being used
-- Logging and debugging
-
-### `CameraAccess.getActiveStream()` {#cameraaccess-getactivestream}
-
-Gets the complete MediaStream object for the currently active video.
-
-**Returns**: `MediaStream | null` - The active MediaStream object, or `null` if no camera is active.
-
-**Example**:
-
-```javascript
-const stream = Quagga.CameraAccess.getActiveStream();
-
-if (stream) {
- console.log('Stream ID:', stream.id);
- console.log('Stream active:', stream.active);
- console.log('Video tracks:', stream.getVideoTracks().length);
- console.log('Audio tracks:', stream.getAudioTracks().length);
-
- // Clone the stream
- const clonedStream = stream.clone();
-}
-
-// Pass stream to WebRTC peer connection
-if (stream?.active) {
- peerConnection.addStream(stream);
-}
-```
-
-**Use cases**:
-
-- Pass the stream to WebRTC peer connections
-- Clone the stream for multiple consumers
-- Check if the stream is still active via `stream.active`
-- Access the stream ID
-- Work with all tracks (video and audio) in the stream
-
-**Note**: For accessing just the video track, use `getActiveTrack()` instead.
-
-### `CameraAccess.getActiveTrack()` {#cameraaccess-getactivetrack}
-
-Gets the MediaStreamTrack for the currently active video.
-
-**Returns**: `MediaStreamTrack | null` - Active video track object, or `null` if no camera is active.
-
-**Example**:
-
-```javascript
-const track = Quagga.CameraAccess.getActiveTrack();
-
-console.log('Track state:', track.readyState);
-console.log('Track settings:', track.getSettings());
-console.log('Track capabilities:', track.getCapabilities());
-
-// Get current resolution
-const settings = track.getSettings();
-console.log(`Resolution: ${settings.width}x${settings.height}`);
-```
-
-**Use cases**:
-
-- Access advanced track capabilities
-- Monitor track state
-- Apply additional constraints
-- Access camera capabilities (zoom, focus, etc.)
-
-### `CameraAccess.enableTorch()` {#cameraaccess-enabletorch}
-
-Turns on the camera torch (flash).
-
-**Returns**: `Promise` - Resolves when torch is enabled, rejects on error.
-
-**Example**:
-
-```javascript
-try {
- await Quagga.CameraAccess.enableTorch();
- console.log('Torch enabled');
-} catch (error) {
- console.error('Failed to enable torch:', error);
-}
-```
-
-**Browser Support**:
-
-- â
Chrome (Android)
-- â
Chrome (Desktop with supported cameras)
-- â Safari iOS 16.4 and earlier
-- â ī¸ Safari iOS later versions - may or may not work
-
-**Requirements**:
-
-- Camera must support torch capability
-- Camera must be actively streaming
-- Browser must support torch constraint
-
-**Note**: Always wrap in try-catch as not all devices support torch.
-
-### `CameraAccess.disableTorch()` {#cameraaccess-disabletorch}
-
-Turns off the camera torch (flash).
-
-**Returns**: `Promise` - Resolves when torch is disabled, rejects on error.
-
-**Example**:
-
-```javascript
-try {
- await Quagga.CameraAccess.disableTorch();
- console.log('Torch disabled');
-} catch (error) {
- console.error('Failed to disable torch:', error);
-}
-```
-
-**Browser Support**: Same as `enableTorch()`.
-
-## Complete Example {#complete-example}
-
-```javascript
-// Enumerate cameras and let user choose
-const devices = await Quagga.CameraAccess.enumerateVideoDevices();
-const backCamera = devices.find(d => d.label.includes('back'));
-
-// Initialize camera
-const video = document.querySelector('#video');
-await Quagga.CameraAccess.request(video, {
- deviceId: backCamera.deviceId
-});
-
-console.log('Active camera:', Quagga.CameraAccess.getActiveStreamLabel());
-
-// Enable torch for better scanning in dark environments
-try {
- await Quagga.CameraAccess.enableTorch();
-} catch (error) {
- console.log('Torch not available');
-}
-
-// ... use camera for scanning ...
-
-// Cleanup
-await Quagga.CameraAccess.disableTorch();
-await Quagga.CameraAccess.release();
-```
-
-## Torch Control in Live Scanning {#torch-control}
-
-For torch control during live scanning, you may want to provide a toggle button:
-
-```javascript
-let torchEnabled = false;
-
-document.querySelector('#torch-toggle').addEventListener('click', async () => {
- try {
- if (torchEnabled) {
- await Quagga.CameraAccess.disableTorch();
- torchEnabled = false;
- } else {
- await Quagga.CameraAccess.enableTorch();
- torchEnabled = true;
- }
- } catch (error) {
- console.error('Torch control failed:', error);
- alert('Torch not available on this device');
- }
-});
-```
-
-## Advanced Camera Control {#advanced-camera-control}
-
-For advanced camera control (zoom, focus, etc.), use the MediaStreamTrack API:
-
-```javascript
-const track = Quagga.CameraAccess.getActiveTrack();
-const capabilities = track.getCapabilities();
-
-// Check if zoom is supported
-if (capabilities.zoom) {
- console.log('Zoom range:', capabilities.zoom.min, '-', capabilities.zoom.max);
-
- // Apply zoom
- await track.applyConstraints({
- advanced: [{ zoom: 2.0 }]
- });
-}
-```
-
-Read more: [MediaStreamTrack Capabilities](https://www.oberhofer.co/mediastreamtrack-and-its-capabilities)
-
-## Error Handling {#error-handling}
-
-Always handle errors when using CameraAccess methods:
-
-```javascript
-try {
- await Quagga.CameraAccess.request(video);
-} catch (error) {
- if (error.name === 'NotAllowedError') {
- console.error('Camera permission denied');
- } else if (error.name === 'NotFoundError') {
- console.error('No camera found');
- } else {
- console.error('Camera error:', error);
- }
-}
-```
-
-## Related {#related}
-
-- [Browser Support](browser-support.md) - Camera compatibility information
-- [Configuration Reference](configuration.md) - Camera configuration in Quagga.init()
-- [API Documentation](api.md) - Main Quagga API methods
-- [Tips & Tricks](../how-to-guides/tips-and-tricks.md) - Camera optimization tips
-
----
-
-[â Back to Reference](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/reference/configuration.md b/quagga2/quagga2-1.12.1/docs/reference/configuration.md
deleted file mode 100644
index 0a947c9..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/configuration.md
+++ /dev/null
@@ -1,1009 +0,0 @@
-# Configuration Reference {#configuration-reference}
-
-Complete reference for all Quagga2 configuration options.
-
-## Configuration Object Structure {#configuration-object-structure}
-
-The configuration object passed to `Quagga.init()` defines all aspects of barcode detection and decoding:
-
-```javascript
-{
- locate: true,
- inputStream: { ... },
- frequency: 10,
- decoder: { ... },
- locator: { ... },
- debug: false
-}
-```
-
-## Top-Level Properties {#top-level-properties}
-
-### `locate` {#locate}
-
-**Type**: `boolean`
-
-**Default**: `true`
-
-**Description**: Controls whether Quagga attempts to locate the barcode in the image.
-
-**When to use `true`** (default):
-
-- Barcode position is unknown
-- Barcode can be anywhere in the frame
-- Barcode may be rotated
-- Best accuracy for varied conditions
-
-**When to use `false`**:
-
-- Barcode position is fixed and known
-- Using a guide/overlay to position barcode
-- Performance is critical
-- Barcode is always centered and aligned
-- Device lacks auto-focus (blurry images make localization unstable)
-
-**Example**:
-
-```javascript
-Quagga.init({
- locate: false, // Expect barcode in center
- inputStream: {
- area: { // Define scan area
- top: "25%",
- right: "25%",
- left: "25%",
- bottom: "25%"
- }
- }
-});
-```
-
-**Performance Impact**: Disabling `locate` significantly improves performance but requires barcode to be properly positioned.
-
-### `inputStream` {#inputstream}
-
-**Type**: `object`
-
-**Description**: Defines the source of images/video for barcode detection.
-
-See [inputStream Configuration](#inputstream-configuration) below for complete details.
-
-### `frequency` {#frequency}
-
-**Type**: `number` (optional)
-
-**Default**: unlimited (processes as fast as possible, limited by `requestAnimationFrame` which typically matches display refresh rate)
-
-**Description**: Maximum scans per second. Controls how often frames are processed.
-
-**Important**: `frequency` specifies a **maximum** rate, not an absolute rate. If the system cannot achieve the requested frequency due to CPU limitations, decoding complexity, or other factors, scans will occur as fast as the system allows. For example, if you set `frequency: 10` but your system can only process 8 scans per second, you will get approximately 8 scans per second.
-
-**Example**:
-
-```javascript
-Quagga.init({
- frequency: 10 // Process max 10 frames per second
-});
-```
-
-**Use cases**:
-
-- Limit CPU usage on long-running sessions
-- Reduce battery drain on mobile devices
-- Throttle processing when high frame rate isn't needed
-
-### `decoder` {#decoder}
-
-**Type**: `object`
-
-**Description**: Configuration for barcode decoding.
-
-See [Decoder Configuration](#decoder-configuration) below for complete details.
-
-### `locator` {#locator}
-
-**Type**: `object`
-
-**Description**: Configuration for barcode localization algorithm.
-
-See [Locator Configuration](#locator-configuration) below for complete details.
-
-### `debug` {#debug}
-
-**Type**: `boolean`
-
-**Default**: `false`
-
-**Description**: Enables global debug mode. When `true` and running development build:
-
-- Enables additional logging
-- Allows visual debug flags to work
-
-**Note**: More fine-grained debug control is available via `inputStream.debug`, `decoder.debug`, and `locator.debug`. See [Debug Flags Guide](../how-to-guides/use-debug-flags.md).
-
-### `canvas` {#canvas}
-
-**Type**: `object`
-
-**Description**: Configuration for canvas elements used by Quagga.
-
-See [Canvas Configuration](#canvas-configuration) below for complete details.
-
-## inputStream Configuration {#inputstream-configuration}
-
-Controls the source and properties of the image/video stream.
-
-### inputStream Structure {#inputstream-structure}
-
-```javascript
-inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner'), // or '#scanner'
- constraints: {
- width: 640,
- height: 480,
- facingMode: "environment",
- deviceId: "abc123...",
- aspectRatio: 1.333
- },
- area: {
- top: "0%",
- right: "0%",
- left: "0%",
- bottom: "0%"
- },
- singleChannel: false,
- debug: {
- showImageDetails: false
- }
-}
-```
-
-### `inputStream.type` {#inputstream-type}
-
-**Type**: `string`
-
-**Options**: `"LiveStream"` | `"VideoStream"` | `"ImageStream"`
-
-**Description**: Type of input source.
-
-**LiveStream** (default):
-
-- Uses `getUserMedia` for live camera
-- Real-time barcode scanning
-- Requires camera permission
-
-**VideoStream**:
-
-- Processes a pre-recorded video file
-- Useful for testing
-
-**ImageStream**:
-
-- Processes static images
-- Can use file paths or data URLs
-
-### `inputStream.target` {#inputstream-target}
-
-**Type**: `HTMLElement | string`
-
-**Description**: DOM element or CSS selector where Quagga renders the video/canvas.
-
-**Examples**:
-
-```javascript
-// Direct element reference
-target: document.querySelector('#scanner-container')
-
-// CSS selector
-target: '#scanner-container'
-
-// Default if omitted: '#interactive.viewport'
-```
-
-### `inputStream.constraints` {#inputstream-constraints}
-
-**Type**: `object`
-
-**Description**: MediaStream constraints for camera selection and configuration. Follows [MediaTrackConstraints](https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints) spec.
-
-**Common Properties**:
-
-```javascript
-constraints: {
- width: { ideal: 1280 }, // Preferred width
- height: { ideal: 720 }, // Preferred height
- facingMode: "environment", // "user" (front) or "environment" (back)
- deviceId: "abc123...", // Specific camera by ID
- aspectRatio: { ideal: 1.777 } // 16:9 aspect ratio
-}
-```
-
-**Constraint Types**:
-
-```javascript
-// Exact value (strict)
-width: { exact: 1920 }
-
-// Ideal value (preferred, not required)
-width: { ideal: 1920 }
-
-// Range
-width: { min: 640, max: 1920 }
-
-// Simple value (treated as ideal)
-width: 1280
-```
-
-**facingMode**:
-
-- `"user"` - Front-facing camera (selfie camera)
-- `"environment"` - Back-facing camera (main camera)
-- `{ exact: "environment" }` - Require specific camera (fails if unavailable)
-
-**Example - High Resolution**:
-
-```javascript
-constraints: {
- width: { ideal: 1920 },
- height: { ideal: 1080 },
- facingMode: "environment"
-}
-```
-
-**Example - Specific Camera**:
-
-```javascript
-// First, enumerate devices
-const devices = await Quagga.CameraAccess.enumerateVideoDevices();
-const backCamera = devices.find(d => d.label.includes('back'));
-
-// Then use deviceId
-constraints: {
- deviceId: { exact: backCamera.deviceId }
-}
-```
-
-### `inputStream.area` {#inputstream-area}
-
-**Type**: `object`
-
-**Description**: Defines rectangular region for detection/localization as percentage offsets. Also supports visual styling options for the scan area.
-
-**Structure**:
-
-```javascript
-area: {
- top: "0%", // Offset from top
- right: "0%", // Offset from right
- left: "0%", // Offset from left
- bottom: "0%", // Offset from bottom
- borderColor: undefined, // Border color (draws border when defined)
- borderWidth: undefined, // Border width in pixels (draws border when > 0)
- backgroundColor: undefined // Background fill color
-}
-```
-
-**Example - Center Rectangle with Border**:
-
-```javascript
-area: {
- top: "25%",
- right: "25%",
- left: "25%",
- bottom: "25%",
- borderColor: "rgba(0, 255, 0, 0.7)", // Green border
- borderWidth: 3
-}
-// Results in a 50% x 50% rectangle in the center with a green border
-```
-
-**Example - Scan Area with Background Tint**:
-
-```javascript
-area: {
- top: "10%",
- right: "10%",
- left: "10%",
- bottom: "10%",
- borderColor: "red",
- borderWidth: 2,
- backgroundColor: "rgba(0, 255, 0, 0.1)" // Light green tint
-}
-```
-
-**Use cases**:
-
-- Restrict scanning to specific area
-- Guide user with visual overlay showing scan region
-- Improve performance by processing less pixels
-- Required when `locate: false` to define scan region
-
-#### `inputStream.area.borderColor` {#inputstream-area-bordercolor}
-
-**Type**: `string`
-
-**Default**: `undefined` (no border drawn)
-
-**Description**: Color of the area border. When defined, draws a rectangle on the overlay canvas showing the scan area boundaries. Requires `canvas.createOverlay: true` (default). Can be any valid CSS color value.
-
-**Example**:
-
-```javascript
-area: {
- top: '25%',
- bottom: '25%',
- borderColor: 'red' // Red border
- // or: 'rgba(255, 0, 0, 0.7)' // Semi-transparent red
-}
-```
-
-#### `inputStream.area.borderWidth` {#inputstream-area-borderwidth}
-
-**Type**: `number`
-
-**Default**: `undefined` (uses default of 2 when borderColor is defined)
-
-**Description**: Width of the area border line in pixels. When defined with a value > 0, draws a rectangle on the overlay canvas.
-
-**Example**:
-
-```javascript
-area: {
- top: '25%',
- bottom: '25%',
- borderColor: 'green',
- borderWidth: 5 // Thicker border for visibility
-}
-```
-
-#### `inputStream.area.backgroundColor` {#inputstream-area-backgroundcolor}
-
-**Type**: `string`
-
-**Default**: `undefined` (no background fill)
-
-**Description**: Background color to fill the scan area. Can be any valid CSS color value. Useful for tinting the scan area to make it more visible.
-
-**Example**:
-
-```javascript
-area: {
- top: '10%',
- right: '10%',
- bottom: '10%',
- left: '10%',
- backgroundColor: 'rgba(0, 255, 0, 0.1)' // Light green tint
-}
-```
-
-#### Drawing Behavior {#inputstream-area-drawing}
-
-- When `locate: false`: the scanner area is drawn on the overlay canvas every processed frame (if `canvas.createOverlay: true`). Use `borderColor`/`borderWidth` for the outline and `backgroundColor` for a translucent fill.
-- When `locate: true`: the area values can constrain processing internally, but the area overlay is not drawn by default.
-- Public API: you can trigger drawing yourself at any time via `Quagga.drawScannerArea()`, which uses the configured `inputStream.area` and draws the actual adjusted scanning area.
-- Requirement: the overlay canvas must exist (`canvas.createOverlay: true`).
-
-> **Note**: When `locate: false`, the actual adjusted scanning area dimensions (after patch alignment) are available in `result.boxes[0]` within callbacks like `onProcessed`. These dimensions may differ slightly from percentage-based calculations due to rounding to patch size multiples. See [Result Properties](#result-properties) in the API reference for details.
-
-### `inputStream.singleChannel` {#inputstream-singlechannel}
-
-**Type**: `boolean`
-
-**Default**: `false`
-
-**Description**: When `true`, only reads the red color channel instead of converting to grayscale.
-
-**Use cases**:
-
-- Debugging decoder issues
-- Used with ResultCollector for analysis
-- Not recommended for normal use
-
-### `inputStream.size` {#inputstream-size}
-
-**Type**: `number`
-
-**Default**: `800` when using `decodeSingle()`; `0` (original image dimensions) otherwise
-
-**Description**: Scales the input image so that the longest side (width or height) equals this value, maintaining aspect ratio.
-
-**Important**: When using `decodeSingle()`, the default is `size: 800`. This means images are **automatically scaled to 800px** on their longest side (both larger and smaller images are scaled to match this value) unless you explicitly specify a different value. When using `init()`, no default scaling is applied - original dimensions are used unless you specify a size. The `box`, `boxes`, and `line` coordinates in the result are returned in the **scaled coordinate space**, not the original image dimensions. To use the original image size without any scaling, set `inputStream.size` to `0`. See [Working with Box Coordinates](../how-to-guides/working-with-coordinates.md) for details on handling scaled coordinates.
-
-**Note on Scaling**: This parameter scales images both up and down. While upscaling typically introduces interpolation artifacts, testing has shown that moderate upscaling can actually **improve** barcode detection accuracy, even with `halfSample:false`. The benefits include:
-
-- **More pixels per bar**: Upscaling provides more pixel data for the locator to analyze
-- **Interpolation smoothing**: Acts as a smoothing filter that can reduce noise and compression artifacts
-- **Integer scaling**: 2x scaling provides clean pixel doubling with minimal artifacts
-- **Works with both halfSample modes**: Benefits seen in both halfSample:true and halfSample:false
-
-**Scaling Guidelines**:
-
-- Start with **2x the original image size** (e.g., 1100px â 2200px) for testing
-- Try 1.25x-1.5x if 2x doesn't work well
-- Performance typically peaks at moderate upscaling (1.25x-2x range)
-- Performance degrades beyond 2.5x due to excessive interpolation artifacts
-- Optimal scaling depends on image quality, compression, and barcode size/condition - not necessarily barcode type
-
-**Recommended approach**: Experiment with different scaling factors. Start with 2x (e.g., 1600-2200 for typical barcode images), then try lower values if needed. The optimal value varies by image content and quality.
-
-**Example**:
-
-```javascript
-// Default behavior: decodeSingle uses size: 800 by default
-Quagga.decodeSingle({
- src: "./large-image.jpg", // 3000x2000 image
- // size defaults to 800, so this scales down to 800x533
- // Result coordinates (box, line) will be in 800x533 space
-});
-
-// Override to preserve larger processing resolution
-Quagga.decodeSingle({
- src: "./large-image.jpg", // 3000x2000 image
- inputStream: {
- size: 1600 // Scales down to 1600x1067
- }
-});
-
-// Disable scaling entirely - use original image dimensions
-Quagga.decodeSingle({
- src: "./medium-image.jpg", // 1280x720 image
- inputStream: {
- size: 0 // Zero disables scaling, uses original 1280x720
- }
-});
-
-// Upscale for fine details (can improve detection)
-Quagga.decodeSingle({
- src: "./small-barcode.jpg", // 1100x658 image with fine barcode
- inputStream: {
- size: 1600 // Scales up to 1600x957, may improve detection
- }
-});
-```
-
-**Performance Note**: Higher values increase processing time. Balance detection accuracy against speed based on your use case. Test different values to find the optimal setting for your specific images.
-
-### `inputStream.debug` {#inputstream-debug}
-
-**Type**: `object`
-
-**Description**: Enable console logging for input stream diagnostics.
-
-```javascript
-debug: {
- showImageDetails: false // Log frame grabber operations
-}
-```
-
-#### `inputStream.debug.showImageDetails` {#inputstream-debug-showimagedetails}
-
-**Type**: `boolean`
-
-**Default**: `false`
-
-**Description**: Logs frame grabber info, canvas size adjustments, and image loading details to the console.
-
-See [Debug Flags Guide](../how-to-guides/use-debug-flags.md) for details.
-
-### `inputStream.sequence` (ImageStream only) {#inputstream-sequence}
-
-**Type**: `boolean` (default: `false`)
-
-**Description**: When set to `true` and used with `type: 'ImageStream'`, Quagga will load a sequence of images named `image-001.jpg`, `image-002.jpg`, etc., from the base path specified by `src`, starting at the `offset` index and loading `size` images.
-
-**Note:** Sequence mode currently only supports `.jpg` files. Images with other extensions (e.g., `.png`) will not be loaded. If you need support for other formats, see the related feature request or use single image mode.
-
-**Related Properties:**
-- `inputStream.src`: Base path for images (e.g., `/path/to/images/`)
-- `inputStream.size`: Number of images to load
-- `inputStream.offset`: Starting index (default: 1)
-
-**Example:**
-
-```javascript
-Quagga.init({
- inputStream: {
- type: 'ImageStream',
- src: '/path/to/images/', // Base path for images
- sequence: true,
- size: 3, // Number of images to load
- offset: 1 // Starting index (optional)
- },
- decoder: { readers: ['code_128_reader'] }
-});
-```
-
-This will load `/path/to/images/image-001.jpg`, `/path/to/images/image-002.jpg`, `/path/to/images/image-003.jpg`.
-
-Sequence mode is ideal for batch testing or processing multiple images with predictable filenames.
-
-## Decoder Configuration {#decoder-configuration}
-
-Controls barcode detection and decoding behavior.
-
-### Decoder Structure {#decoder-structure}
-
-```javascript
-decoder: {
- readers: ["code_128_reader"],
- debug: {
- drawBoundingBox: false,
- showFrequency: false,
- drawScanline: false,
- showPattern: false,
- printReaderInfo: false
- },
- multiple: false
-}
-```
-
-### `decoder.readers` {#decoder-readers}
-
-**Type**: `Array`
-
-**Required**: Yes
-
-**Description**: Array of barcode reader types to use.
-
-**Available Readers**:
-
-- `code_128_reader` - Code 128
-- `ean_reader` - EAN-13
-- `ean_8_reader` - EAN-8
-- `code_39_reader` - Code 39
-- `code_39_vin_reader` - Code 39 VIN
-- `codabar_reader` - Codabar
-- `upc_reader` - UPC-A
-- `upc_e_reader` - UPC-E
-- `i2of5_reader` - Interleaved 2 of 5
-- `2of5_reader` - Standard 2 of 5
-- `code_93_reader` - Code 93
-- `code_32_reader` - Code 32 (Italian Pharmacode)
-- `pharmacode_reader` - Pharmacode (Pharmaceutical Binary Code)
-
-See [Supported Barcode Types](readers.md) for complete details.
-
-**Simple Example**:
-
-```javascript
-readers: ["code_128_reader", "ean_reader"]
-```
-
-**With Configuration** (e.g., EAN extensions):
-
-```javascript
-readers: [
- "ean_reader", // Regular EAN without extensions
- {
- format: "ean_reader",
- config: {
- supplements: ['ean_5_reader', 'ean_2_reader']
- }
- } // EAN with 2 or 5 digit extensions
-]
-```
-
-**Important**: Readers are processed in the exact order specified. The first reader to successfully decode wins. List most common/expected formats first for better performance and accuracy. See [Reader Priority](readers.md#reader-priority-and-order) for details.
-
-### `decoder.debug` {#decoder-debug}
-
-**Type**: `object`
-
-**Description**: Enable visual debug overlays and console logging for decoder.
-
-```javascript
-debug: {
- drawBoundingBox: false, // Draw box around detected barcode
- showFrequency: false, // Display frequency data
- drawScanline: false, // Draw the scan line
- showPattern: false, // Display pattern data
- printReaderInfo: false // Log reader registration to console
-}
-```
-
-See [Debug Flags Guide](../how-to-guides/use-debug-flags.md) for details.
-
-### `decoder.multiple` {#decoder-multiple}
-
-**Type**: `boolean`
-
-**Default**: `false`
-
-**Description**: When `true`, continues decoding after finding a barcode to detect multiple barcodes in a single image.
-
-**Example**:
-
-```javascript
-decoder: {
- readers: ["code_128_reader"],
- multiple: true
-}
-```
-
-**Result format**: When `true`, the result is an array of result objects:
-
-```javascript
-Quagga.onDetected(function(results) {
- // results is an array
- results.forEach(function(result) {
- if (result.codeResult) {
- console.log("Found:", result.codeResult.code);
- }
- });
-});
-```
-
-## Locator Configuration {#locator-configuration}
-
-Controls the barcode localization algorithm. Only relevant when `locate: true`.
-
-### Locator Structure {#locator-structure}
-
-```javascript
-locator: {
- halfSample: true,
- patchSize: "medium",
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- showPatchSize: false,
- showImageDetails: false,
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false
- }
- }
-}
-```
-
-### `locator.halfSample` {#locator-halfsample}
-
-**Type**: `boolean`
-
-**Default**: `true`
-
-**Description**: When `true`, operates on image scaled to half width/height (quarter pixel count).
-
-**Benefits of `true`** (recommended):
-
-- Significantly faster processing
-- Implicit smoothing helps find barcodes
-- Reduces noise
-
-**When to use `false`**:
-
-- Barcodes are very small
-- Need full resolution to detect fine details
-- Have high-resolution camera and need every pixel
-
-**Recommendation**: Keep `true` and increase camera resolution if needed, rather than disabling half-sampling.
-
-### `locator.patchSize` {#locator-patchsize}
-
-**Type**: `string`
-
-**Options**: `"x-small"` | `"small"` | `"medium"` | `"large"` | `"x-large"`
-
-**Default**: `"medium"`
-
-**Description**: Controls search grid density. Affects how the locator divides the image for analysis.
-
-**Size Guidelines**:
-
-| Patch Size | Barcode Distance | Use Case |
-|------------|------------------|----------|
-| `x-small` | Far away | Small barcodes, poor focus, low resolution |
-| `small` | Moderately far | Small to medium barcodes |
-| `medium` | Normal | General purpose (recommended default) |
-| `large` | Close up | Large barcodes held close to camera |
-| `x-large` | Very close | Very large barcodes, macro shots |
-
-**Relationship to Resolution**:
-
-- Smaller patches = denser search grid = slower but finds smaller barcodes
-- Larger patches = coarser search grid = faster but may miss small barcodes
-
-**Example - Small Distant Barcodes**:
-
-```javascript
-locator: {
- patchSize: "small",
- halfSample: true // Keep half-sampling on
-},
-inputStream: {
- constraints: {
- width: { ideal: 1280 }, // Higher resolution compensates
- height: { ideal: 720 }
- }
-}
-```
-
-**Example - Large Close-Up Barcodes**:
-
-```javascript
-locator: {
- patchSize: "large",
- halfSample: true
-}
-```
-
-### `locator.debug` {#locator-debug}
-
-**Type**: `object`
-
-**Description**: Enable visual debug overlays and console logging for locator.
-
-**Console logging flags**:
-
-```javascript
-debug: {
- showPatchSize: false, // Log calculated patch dimensions
- showImageDetails: false // Log image wrapper and canvas details
-}
-```
-
-**Visual overlay flags**:
-
-```javascript
-debug: {
- showCanvas: false, // Show locator's internal canvas
- showPatches: false, // Draw all extracted patches
- showFoundPatches: false, // Highlight candidate patches
- showSkeleton: false, // Show skeleton structure
- showLabels: false, // Show component labels
- showPatchLabels: false, // Show patch labels
- showRemainingPatchLabels: false, // Show post-filter labels
- boxFromPatches: {
- showTransformed: false, // Show transformed coordinates
- showTransformedBox: false, // Show transformed box
- showBB: false // Show final bounding box
- }
-}
-```
-
-See [Debug Flags Guide](../how-to-guides/use-debug-flags.md) for complete details on all debug options.
-
-## Canvas Configuration {#canvas-configuration}
-
-Controls the creation and management of canvas elements.
-
-### Canvas Structure {#canvas-structure}
-
-```javascript
-canvas: {
- createOverlay: true // Set to false to disable overlay canvas creation
-}
-```
-
-### `canvas.createOverlay` {#canvas-createoverlay}
-
-**Type**: `boolean`
-
-**Default**: `true`
-
-**Description**: Controls whether Quagga creates the overlay canvas (`drawingBuffer`). The overlay canvas is used for drawing bounding boxes, scan lines, and other visual feedback on top of the video stream.
-
-**When to set `false`**:
-
-- You don't need visual feedback/overlays
-- You want to improve performance
-- You're building a headless/server-side application
-- You want to avoid the CSS complexity of hiding the canvas
-
-**When to keep `true`** (default):
-
-- You want to draw bounding boxes around detected barcodes
-- You want to visualize the scanning process
-- You're using custom drawing in `onProcessed` callbacks
-
-**Example - Disable overlay canvas**:
-
-```javascript
-Quagga.init({
- canvas: {
- createOverlay: false // No overlay canvas created
- },
- inputStream: {
- type: "LiveStream",
- target: '#scanner'
- },
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-**Important**: When `createOverlay` is `false`:
-
-- `Quagga.canvas.dom.overlay` will be `null`
-- `Quagga.canvas.ctx.overlay` will be `null`
-- You cannot use `Quagga.ImageDebug.drawPath()` with the overlay canvas
-
-**Note about debug flags**: The `decoder.debug.drawBoundingBox` and `decoder.debug.drawScanline` flags only work in development builds and require the overlay canvas to exist. These flags draw on the overlay canvas when it's available.
-
-**Example - Using overlay canvas for drawing**:
-
-```javascript
-// With createOverlay: true (default)
-Quagga.onProcessed(function(result) {
- const ctx = Quagga.canvas.ctx.overlay;
- const canvas = Quagga.canvas.dom.overlay;
-
- // Check if overlay exists before using
- if (ctx && canvas) {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- if (result && result.box) {
- Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1}, ctx, {
- color: "green",
- lineWidth: 2
- });
- }
- }
-});
-```
-
-## Complete Configuration Examples {#complete-configuration-examples}
-
-### Example 1: Live Camera Scanning {#example-live-camera-scanning}
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner'),
- constraints: {
- width: { ideal: 1280 },
- height: { ideal: 720 },
- facingMode: "environment"
- }
- },
- locate: true,
- frequency: 10,
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- },
- locator: {
- halfSample: true,
- patchSize: "medium"
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-### Example 2: Static Image Processing {#example-static-image-processing}
-
-```javascript
-Quagga.decodeSingle({
- src: "/images/barcode.jpg",
- locate: true,
- decoder: {
- readers: ["code_128_reader"]
- },
- locator: {
- patchSize: "medium",
- halfSample: true
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Code:", result.codeResult.code);
- }
-});
-```
-
-### Example 3: Guided Scanning (No Localization) {#example-guided-scanning}
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: '#scanner',
- constraints: {
- width: 640,
- height: 480,
- facingMode: "environment"
- },
- area: {
- top: "30%",
- right: "20%",
- left: "20%",
- bottom: "30%"
- }
- },
- locate: false, // Barcode must be centered in defined area
- decoder: {
- readers: ["ean_reader", "upc_reader"]
- }
-});
-```
-
-### Example 4: Multiple Barcode Detection {#example-multiple-barcode-detection}
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: '#scanner'
- },
- decoder: {
- readers: ["code_128_reader"],
- multiple: true // Detect multiple barcodes per frame
- },
- locate: true,
- locator: {
- patchSize: "medium"
- }
-});
-
-Quagga.onDetected(function(results) {
- // results is an array when multiple: true
- console.log(`Found ${results.length} barcodes`);
- results.forEach(r => {
- if (r.codeResult) {
- console.log("Code:", r.codeResult.code);
- }
- });
-});
-```
-
-### Example 5: Node.js Processing {#example-nodejs-processing}
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-Quagga.decodeSingle({
- src: "./barcode.jpg",
- inputStream: {
- size: 800 // Scale to max 800px
- },
- locate: true,
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Detected:", result.codeResult.code);
- } else {
- console.log("No barcode found");
- }
-});
-```
-
-## Configuration Best Practices {#configuration-best-practices}
-
-1. **Start simple**: Use defaults, only add specific readers you need
-2. **Test thoroughly**: Different devices and lighting require different settings
-3. **Optimize iteratively**: Start with `patchSize: "medium"`, adjust based on results
-4. **Limit readers**: Only enable barcode formats you actually expect
-5. **Consider performance**: Balance quality vs. speed based on use case
-6. **Use constraints wisely**: Higher resolution helps but costs performance
-7. **Debug systematically**: Enable debug flags to understand behavior
-
-## Related {#related}
-
-- [API Documentation](api.md) - How to use Quagga methods
-- [Supported Barcode Types](readers.md) - Available readers
-- [Browser Support](browser-support.md) - Compatibility information
-- [Debug Flags Guide](../how-to-guides/use-debug-flags.md) - Diagnostic tools
-
----
-
-[â Back to Reference](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/reference/dependencies.md b/quagga2/quagga2-1.12.1/docs/reference/dependencies.md
deleted file mode 100644
index 89963fb..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/dependencies.md
+++ /dev/null
@@ -1,295 +0,0 @@
-# Quagga2 Dependencies
-
-This document explains the dependency structure of Quagga2 and clarifies which packages are runtime code dependencies versus build/test tools.
-
-## Background
-
-Quagga2 bundles all its code with Webpack, producing standalone browser and Node.js builds. As a result, **all packages are listed as `devDependencies`** in `package.json` because consumers never directly install them - they only use the pre-built bundles in `dist/` and `lib/`.
-
-However, this makes it unclear which packages are actual code dependencies (bundled into the final output) versus which are just build/test tools. This document clarifies that distinction.
-
----
-
-## Runtime Code Dependencies
-
-These packages contain code that is **imported by the source code** and **bundled into the final output**:
-
-### Core Libraries
-
-- **`gl-matrix`** (^3.4.4)
- - **Purpose**: High-performance vector and matrix math operations
- - **Usage**: Used throughout the codebase for geometric calculations
- - **Files**:
- - `src/quagga/quagga.ts` - vec2 operations for bounding boxes
- - `src/quagga/initBuffers.ts` - vec2 for buffer initialization
- - `src/locator/barcode_locator.js` - vec2, mat2 for barcode location
- - `src/common/image_wrapper.ts` - vec2 for image transforms
- - `src/common/cvutils/ImageRef.ts` - vec2, vec3 for computer vision
- - `src/common/cluster.js` - vec2 for clustering algorithms
-
-- **`lodash`** (^4.17.21)
- - **Purpose**: Utility functions for object manipulation
- - **Usage**: Primarily `merge()` for config merging, `pick()` for object selection
- - **Files**:
- - `src/quagga.js` - merge() for configuration
- - `src/QuaggaStatic.ts` - merge() for configuration
- - `src/reader/ean_reader.ts` - merge() for config defaults
- - `src/reader/i2of5_reader.ts` - merge() for config defaults
- - `src/input/camera_access.ts` - pick() for MediaTrackConstraints
- - `src/locator/test/barcode_locator.spec.ts` - merge() in tests
-
-### Image Processing
-
-- **`ndarray`** (^1.0.19)
- - **Purpose**: N-dimensional array manipulation
- - **Usage**: Core data structure for image data processing
- - **Files**:
- - `src/input/input_stream/input_stream_base.ts` - NdArray type definitions
- - `src/input/input_stream/input_stream.ts` - NdArray for frame data
- - `src/input/frame_grabber.ts` - Ndarray for frame manipulation
- - `src/vendor.d.ts` - Type definitions
-
-- **`ndarray-linear-interpolate`** (^1.0.0)
- - **Purpose**: Bilinear interpolation for ndarray data
- - **Usage**: Image scaling and transformations
- - **Files**:
- - `src/input/frame_grabber.ts` - `d2()` method for 2D interpolation
-
-- **`ndarray-pixels`** (^5.0.1)
- - **Purpose**: Convert between image formats and ndarray
- - **Usage**: Loading image data from various sources
- - **Files**:
- - `src/input/input_stream/input_stream.ts` - `getPixels()` for image loading
-
-### Polyfills (Deprecated)
-
-- **`@babel/polyfill`** (^7.12.1)
- - **Status**: â ī¸ **DEPRECATED** by Babel team
- - **Purpose**: Legacy polyfill for ES6+ features
- - **Current Usage**: Not directly imported in source code
- - **Recommendation**: Should be removed in favor of `core-js` + `regenerator-runtime` or Babel's automatic polyfill injection
- - **Migration Path**: Use `@babel/preset-env` with `useBuiltIns: 'usage'` and explicit `core-js@3`
-
----
-
-## Build & Development Tools
-
-These packages are **only used during build/development** and are **not bundled into the final output**:
-
-### TypeScript Toolchain
-
-- **`typescript`** (^5.9.3) - TypeScript compiler
-- **`@types/*`** packages - Type definitions for TypeScript
- - `@types/chai`, `@types/gl-vec2`, `@types/lodash`, `@types/mocha`, `@types/node`, `@types/sinon`, `@types/sinon-chai`
-
-### Webpack & Bundling
-
-- **`webpack`** (^4.44.2) - Module bundler (used to create `dist/` and `lib/` outputs)
-- **`webpack-cli`** (^3.3.12) - Webpack command-line interface
-- **`babel-loader`** (^8.2.5) - Webpack loader for Babel transpilation
-- **`source-map-loader`** (^1.1.1) - Webpack loader for source maps
-
-### Babel Transpilation
-
-- **`@babel/core`** (^7.28.5) - Babel compiler core
-- **`@babel/preset-env`** (^7.28.5) - Smart transpilation based on target environments
-- **`@babel/preset-typescript`** (^7.28.5) - TypeScript support in Babel
-- **`@babel/plugin-*`** - Various syntax plugins:
- - `@babel/plugin-proposal-class-properties`
- - `@babel/plugin-proposal-nullish-coalescing-operator`
- - `@babel/plugin-proposal-object-rest-spread`
- - `@babel/plugin-proposal-optional-chaining`
- - `@babel/plugin-transform-runtime`
-- **`@babel/runtime`** (^7.28.4) - Babel runtime helpers
-- **`babel-plugin-add-module-exports`** (^1.0.4) - CommonJS module.exports handling
-- **`babel-plugin-istanbul`** (^7.0.1) - Code coverage instrumentation
-
-### Testing
-
-- **`mocha`** (^5.2.0) - Test framework
-- **`chai`** (^4.3.10) - Assertion library
-- **`sinon`** (^21.0.0) - Test spies, stubs, and mocks
-- **`sinon-chai`** (^3.7.0) - Sinon assertions for Chai
-- **`ts-mocha`** (^11.1.0) - TypeScript support for Mocha
-- **`ts-node`** (^10.9.2) - TypeScript execution for Node.js
-- **`cypress`** (^13.1.0) - End-to-end browser testing
-- **`@cypress/webpack-preprocessor`** (6.0.0) - Webpack integration for Cypress
-- **`@cypress/code-coverage`** (^3.12.4) - Code coverage for Cypress tests
-- **`nyc`** (^17.1.0) - Code coverage tool (Istanbul wrapper)
-
-### Linting & Code Quality
-
-- **`eslint`** (^8.57.1) - JavaScript/TypeScript linter
-- **`@typescript-eslint/eslint-plugin`** (^7.18.0) - TypeScript-specific ESLint rules
-- **`@typescript-eslint/parser`** (^7.18.0) - TypeScript parser for ESLint
-- **`eslint-config-airbnb-base`** (^15.0.0) - Airbnb JavaScript style guide
-- **`eslint-config-airbnb-typescript`** (^18.0.0) - Airbnb style for TypeScript
-- **`eslint-config-airbnb-typescript-base`** (^6.0.1) - Base Airbnb TypeScript config
-- **`eslint-plugin-import`** (^2.32.0) - Import/export validation
-- **`eslint-plugin-jsx-a11y`** (^6.10.2) - Accessibility linting
-- **`eslint-plugin-typescript-sort-keys`** (^3.3.0) - Enforce sorted object keys
-
-### Utilities
-
-- **`core-js`** (^3.46.0) - Modern JavaScript polyfills (used by Babel)
-- **`cross-env`** (^10.1.0) - Cross-platform environment variable setting
-
----
-
-## Optional Dependencies
-
-- **`fsevents`** (2.3.3)
- - **Platform**: macOS only
- - **Purpose**: Native file watching for better performance
- - **Usage**: Automatically used by Webpack/build tools on macOS
-
----
-
-## Overrides
-
-The `overrides` field forces specific versions of transitive dependencies:
-
-```json
-"overrides": {
- "@cypress/request": "^3.0.9"
-}
-```
-
-- **Purpose**: Security fix for `form-data` vulnerability (CVE in versions < 2.5.4)
-- **Details**: Cypress 13.1.0 bundles `@cypress/request@3.0.0` which depends on vulnerable `form-data@2.3.3`. This override forces `@cypress/request@^3.0.9` which uses safe `form-data@~4.0.4`.
-
----
-
-## Bundle Size Impact
-
-When evaluating dependencies, consider their impact on bundle size:
-
-| Package | Approximate Size | Bundled? |
-|---------|-----------------|----------|
-| `gl-matrix` | ~50 KB (minified) | â
Yes |
-| `lodash` | ~4 KB (only `merge` + `pick`) | â
Yes (tree-shaken) |
-| `ndarray` | ~5 KB | â
Yes |
-| `ndarray-linear-interpolate` | ~2 KB | â
Yes |
-| `ndarray-pixels` | ~10 KB | â
Yes (browser) |
-| `webpack` | ~1.5 MB | â No (dev only) |
-| `typescript` | ~50 MB | â No (dev only) |
-
----
-
-## Adding New Dependencies
-
-When adding a new dependency, consider:
-
-1. **Is it a runtime dependency?**
- - Will the code be `import`ed in `src/` files?
- - Will it be bundled into `dist/` or `lib/` output?
- - â Add to `devDependencies` (all deps go here due to bundling)
- - â Document it in the "Runtime Code Dependencies" section above
-
-2. **Is it a build/test tool?**
- - Is it only used by Webpack, Babel, ESLint, Mocha, etc.?
- - â Add to `devDependencies`
- - â Document it in the "Build & Development Tools" section above
-
-3. **Bundle size impact?**
- - Run `npm run build` and check the size change in `dist/quagga.min.js`
- - Consider tree-shaking (does the library support ES modules?)
- - Look for lighter alternatives if the package is large
-
-4. **Browser compatibility?**
- - Does the package work in browsers?
- - Does it require Node.js-specific APIs (`fs`, `path`, etc.)?
- - â Check if it's already shimmed in `configs/webpack.config.js` (e.g., `node: { fs: 'empty' }`)
-
----
-
-## Version Constraints
-
-### Pinned Versions
-
-Some packages are pinned to specific versions due to compatibility issues:
-
-- **`mocha@^5.2.0`** - Pinned to v5 because newer versions have breaking changes
-- **`chai@^4.3.10`** - Pinned to v4 because v5+ and v6+ are ESM-only, incompatible with CommonJS tests
-- **`sinon-chai@^3.7.0`** - Pinned to match `chai@4.x` compatibility
-- **`webpack@^4.44.2`** - Pinned to v4 because v5 requires significant config migration
-- **`cypress@^13.1.0`** - Pinned to v13 for stability
-
-These are configured in `.ncurc.json` to prevent accidental upgrades via `npm-check-updates`.
-
-### Upgrade Policy
-
-- **TypeScript ecosystem** (`typescript`, `@typescript-eslint/*`, `ts-*`): Keep up-to-date
-- **Babel ecosystem** (`@babel/*`): Keep up-to-date for security and features
-- **Testing tools** (`mocha`, `chai`, `sinon`): Upgrade cautiously, test thoroughly
-- **Webpack & bundlers**: Major version upgrades require careful migration planning
-- **Runtime dependencies** (`gl-matrix`, `lodash`, `ndarray*`): Keep up-to-date unless breaking changes occur
-
----
-
-## Security Considerations
-
-### Known Issues
-
-1. **`@babel/polyfill` is deprecated** - Should migrate to `core-js@3` + `regenerator-runtime`
-2. **Old `mocha` version** - v5.2.0 is from 2018, may have unpatched vulnerabilities
-3. **Webpack 4** - No longer receives updates, consider upgrading to Webpack 5
-
-### Monitoring
-
-- Run `npm audit` regularly to check for vulnerabilities
-- Use `npm run check-updates` to see available updates
-- Check GitHub Dependabot alerts
-
----
-
-## FAQ
-
-**Q: Why are runtime dependencies in `devDependencies` instead of `dependencies`?**
-
-A: Quagga2 is a **bundled library**. Consumers install the package and use the pre-built files (`dist/quagga.min.js` or `lib/quagga.js`), not the source code. They never run `npm install` on Quagga2's dependencies. Therefore, from npm's perspective, all packages are development dependencies (used during build), not runtime dependencies (used after install).
-
-**Q: How can I tell if a package is actually used in the code?**
-
-A: Search the `src/` directory:
-```bash
-# Search for imports
-grep -r "from 'package-name'" src/
-grep -r 'from "package-name"' src/
-grep -r "require('package-name')" src/
-```
-
-**Q: What's the difference between `optionalDependencies` and `devDependencies`?**
-
-A: `optionalDependencies` are packages that enhance functionality if available but aren't required (like `fsevents` for macOS file watching). `devDependencies` are required for development but not for using the published package.
-
-**Q: Can I remove `@babel/polyfill`?**
-
-A: Yes, but carefully. It's deprecated and not directly imported anymore. Remove it from `package.json` and verify that `@babel/preset-env` is configured to polyfill features automatically via `core-js@3`. Test thoroughly in older browsers (IE11, older Safari) after removal.
-
-**Q: Why can't I upgrade `chai` to version 5 or 6?**
-
-A: `chai@5+` and `chai@6+` are ESM-only (ES modules). Quagga2's tests use CommonJS (`require()`), and `mocha@5` doesn't support ESM. Upgrading `chai` requires also upgrading `mocha` to v9.1.0+ and migrating all test files to ESM syntax.
-
----
-
-## Related Files
-
-- **`package.json`** - Dependency declarations
-- **`.ncurc.json`** - npm-check-updates configuration (blocks unsafe auto-upgrades)
-- **`configs/webpack.config.js`** - Build configuration showing which dependencies are bundled
-- **`configs/webpack.node.config.js`** - Node.js-specific build configuration
-- **`CHANGELOG.md`** - Version history and dependency changes
-
----
-
-## Maintenance Notes
-
-This document was created in November 2025 following the TypeScript 5.9.3 upgrade. It should be updated whenever:
-
-- A new dependency is added or removed
-- A major version upgrade changes behavior
-- Security vulnerabilities are discovered and patched
-- Build tooling changes significantly
-
-Last updated: 2025-11-16
diff --git a/quagga2/quagga2-1.12.1/docs/reference/index.md b/quagga2/quagga2-1.12.1/docs/reference/index.md
deleted file mode 100644
index 60dbc29..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# Reference Documentation
-
-Precise technical descriptions of Quagga2's API, configuration, and capabilities. Consult these when you need exact details about how something works.
-
-## Core API
-
-### [API Documentation](api.md)
-
-Complete reference for all Quagga2 methods, callbacks, and events.
-
-### [Configuration Options](configuration.md)
-
-Detailed documentation of every configuration parameter and its effects.
-
-### [Camera Access API](camera-access.md)
-
-Methods for controlling camera access, torch/flash, and device enumeration.
-
-## Barcode Support
-
-### [Supported Barcode Types](readers.md)
-
-List of all supported barcode formats with characteristics and use cases.
-
-## Compatibility
-
-### [Browser Support](browser-support.md)
-
-Browser compatibility matrix and required Web APIs.
-
-## Development
-
-### [Dependencies](dependencies.md)
-
-Explanation of all package dependencies - which are bundled vs. dev-only.
-
-## Quick Lookup
-
-| Need | See |
-|------|-----|
-| Method signatures | [API Documentation](api.md) |
-| Config parameter details | [Configuration Options](configuration.md) |
-| Which browsers work | [Browser Support](browser-support.md) |
-| Which barcodes supported | [Supported Barcode Types](readers.md) |
-| Camera control | [Camera Access API](camera-access.md) |
-| Package versions | [Dependencies](dependencies.md) |
-
-## Reading Reference Docs
-
-Reference documentation is:
-
-- **Information-oriented** - Focuses on describing *what exists*
-- **Accurate** - Every detail matters, kept up-to-date with code
-- **Complete** - Covers all features, even obscure ones
-- **Structured** - Organized for lookup, not linear reading
-
-Don't read reference docs cover-to-cover. Instead:
-
-1. **Look up** what you need when you need it
-2. **Verify** assumptions about how things work
-3. **Discover** features you didn't know existed
-4. **Confirm** exact method signatures or parameter types
-
-## Need Context?
-
-Reference docs tell you *what* and *how*, but not *why*:
-
-- For **why** something works a certain way â See [Explanation](../explanation/)
-- For **how to use** something in practice â See [How-To Guides](../how-to-guides/)
-- For **learning** from scratch â See [Tutorials](../tutorials/)
-
----
-
-[â Back to Documentation Home](../index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/reference/readers.md b/quagga2/quagga2-1.12.1/docs/reference/readers.md
deleted file mode 100644
index aae2071..0000000
--- a/quagga2/quagga2-1.12.1/docs/reference/readers.md
+++ /dev/null
@@ -1,326 +0,0 @@
-# Supported Barcode Types {#supported-barcode-types}
-
-Quagga2 supports a wide variety of 1D barcode formats. This page lists all available barcode readers and how to configure them.
-
-## Available Readers {#available-readers}
-
-Quagga2 includes built-in readers for the following barcode formats:
-
-| Reader Name | Barcode Format | Common Uses |
-|-------------|----------------|-------------|
-| `code_128_reader` | [Code 128](https://en.wikipedia.org/wiki/Code_128), [GS1-128](https://en.wikipedia.org/wiki/GS1-128) | General purpose, shipping, packaging, supply chain |
-| `ean_reader` | [EAN-13](https://en.wikipedia.org/wiki/International_Article_Number) | Retail products worldwide |
-| `ean_8_reader` | [EAN-8](https://en.wikipedia.org/wiki/EAN-8) | Small retail products |
-| `code_39_reader` | [Code 39](https://en.wikipedia.org/wiki/Code_39) | Automotive, defense, healthcare |
-| `code_39_vin_reader` | Code 39 VIN | Vehicle Identification Numbers |
-| `codabar_reader` | [Codabar](https://en.wikipedia.org/wiki/Codabar) | Libraries, blood banks, logistics |
-| `upc_reader` | [UPC-A](https://en.wikipedia.org/wiki/Universal_Product_Code) | Retail products (North America) |
-| `upc_e_reader` | [UPC-E](https://en.wikipedia.org/wiki/Universal_Product_Code#UPC-E) | Small retail products |
-| `i2of5_reader` | [Interleaved 2 of 5](https://en.wikipedia.org/wiki/Interleaved_2_of_5) | Warehouse, distribution |
-| `2of5_reader` | [Standard 2 of 5](https://en.wikipedia.org/wiki/Two-out-of-five_code) | Industrial, airline tickets |
-| `code_93_reader` | [Code 93](https://en.wikipedia.org/wiki/Code_93) | Logistics, retail |
-| `code_32_reader` | [Code 32](https://en.wikipedia.org/wiki/Pharmacode#Code_32) | Italian pharmaceuticals |
-| `pharmacode_reader` | [Pharmacode](https://en.wikipedia.org/wiki/Pharmacode) | Pharmaceutical packaging |
-
-## Basic Configuration {#basic-configuration}
-
-Specify which barcode types to detect in the `decoder.readers` array:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: ["code_128_reader"] // Only detect Code 128
- }
-}, function(err) {
- if (err) {
- console.error(err);
- return;
- }
- Quagga.start();
-});
-```
-
-### Multiple Readers {#multiple-readers}
-
-You can enable multiple readers to detect different barcode types:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: [
- "code_128_reader",
- "ean_reader",
- "upc_reader"
- ]
- }
-});
-```
-
-## Important Considerations {#important-considerations}
-
-### Reader Priority and Order {#reader-priority-and-order}
-
-**Readers are processed in the exact order they appear in the `readers` array.** The first reader to successfully decode the barcode wins - subsequent readers are not tried.
-
-This allows you to prioritize certain formats over others when multiple formats might match the same barcode pattern:
-
-```javascript
-decoder: {
- // EAN-13 checked first, then UPC formats
- readers: ['ean_reader', 'upc_reader', 'upc_e_reader']
-}
-```
-
-**Why order matters:**
-
-- Readers are processed sequentially, not in parallel
-- Some readers may return false positives for other formats
-- Example: EAN-13 and UPC-A/UPC-E share similar patterns and can clash
-- The first successful decode is returned immediately
-
-**Best practice**: List your most commonly expected barcode types first for best accuracy and performance.
-
-### Don't Enable All Readers {#dont-enable-all-readers}
-
-**Why not enable all readers by default?**
-
-- More readers = more processing time
-- Increased chance of false positives
-- Some formats overlap and can interfere
-
-**Best practice**: Only enable the barcode formats you actually need to scan.
-
-### Format Conflicts {#format-conflicts}
-
-Some barcode formats are subsets or extensions of others:
-
-- **UPC-A** is a subset of **EAN-13**
-- **EAN-8** is shorter version of **EAN-13**
-- **Code 39** and **Code 39 VIN** share similar patterns
-
-Be careful when enabling multiple related formats together.
-
-## GS1-128 Barcodes {#gs1-128-barcodes}
-
-[GS1-128](https://en.wikipedia.org/wiki/GS1-128) (formerly known as EAN-128 or UCC-128) is a subset of Code 128 used extensively in supply chain and logistics. It uses special FNC1 (Function Code 1) characters to separate variable-length data fields called Application Identifiers (AIs).
-
-### How GS1-128 Works {#gs1-128-how-it-works}
-
-GS1-128 barcodes encode structured data using standardized Application Identifiers. For example:
-- **AI 01** = GTIN (Global Trade Item Number)
-- **AI 10** = Batch/Lot Number
-- **AI 17** = Expiration Date
-- **AI 21** = Serial Number
-
-The FNC1 character acts as a field separator between variable-length AIs, allowing decoders to know where one field ends and another begins.
-
-### FNC1 Character Handling {#fnc1-character-handling}
-
-When the `code_128_reader` decodes a GS1-128 barcode, FNC1 characters are represented as ASCII 29 (Group Separator, `\x1D` or `\u001d`). This follows the GS1 standard for representing FNC1 in decoded data.
-
-```javascript
-Quagga.decodeSingle({
- src: 'gs1-128-barcode.jpg',
- decoder: {
- readers: ['code_128_reader']
- }
-}, function(result) {
- if (result && result.codeResult) {
- const code = result.codeResult.code;
- // FNC1 characters appear as ASCII 29 (Group Separator)
- const GS = String.fromCharCode(29); // '\x1D'
-
- // Split on Group Separator to get individual AI fields
- const fields = code.split(GS);
- console.log('Fields:', fields);
- // Example output: ["", "01034531200000111719050810ABCD1234", ...]
-
- // Or check for GS1-128 format (starts with FNC1)
- if (code.startsWith(GS)) {
- console.log('This is a GS1-128 barcode');
- }
- }
-});
-```
-
-### Parsing GS1-128 Data {#parsing-gs1-128-data}
-
-Once decoded, you can parse the GS1-128 data using the Application Identifier structure:
-
-```javascript
-function parseGS1(code) {
- const GS = String.fromCharCode(29);
- // Remove leading FNC1 if present
- const data = code.startsWith(GS) ? code.substring(1) : code;
-
- // Split by FNC1 separator
- const segments = data.split(GS);
-
- // Parse each segment for its AI
- // (A full implementation would use a complete AI table)
- return segments;
-}
-```
-
-For full GS1 parsing, consider using a dedicated library like [gs1-barcode-parser](https://www.npmjs.com/package/gs1-barcode-parser) after decoding with Quagga2.
-
-## EAN Extensions {#ean-extensions}
-
-### EAN-2 and EAN-5 Supplements {#ean-supplements}
-
-The EAN and UPC barcode formats support a supplement format, adding an additional 2 or 5 digits beyond the main barcode, EAN-2 and EAN-5, respectively. They are typically used for:
-- **Magazines and periodicals**: The main barcode identifies the publication, while the supplement denotes issue numbers or publication dates
-- **Books with ISBN**: The 5-digit supplement often encodes the suggested retail price
-
-By default, `ean_reader` does not read and decode these extensions, you must explicitly enable support for them, if you are looking for them. Since UPC-A is a subset of EAN-13 -- UPC-A codes are EAN-13 codes that begin with a 0 -- supplement support configured on `ean_reader` also works for UPC-A codes.
-
-To enable supplement decoding:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: [{
- format: "ean_reader",
- config: {
- supplements: [
- 'ean_5_reader', // 5-digit supplement
- 'ean_2_reader' // 2-digit supplement
- ]
- }
- }]
- }
-});
-```
-
-#### Supplement Result Structure {#supplement-result-structure}
-
-When a barcode with a supplement is decoded, the result includes a `supplement` property:
-
-```javascript
-{
- codeResult: {
- code: "419871600890101", // Combined: main barcode + supplement
- format: "ean_13", // Main barcode format
- supplement: {
- code: "01", // Supplement digits only
- format: "ean_2" // "ean_2" or "ean_5"
- }
- }
-}
-```
-
-The main `codeResult.code` contains the full combined value, while `codeResult.supplement` provides the supplement details separately.
-
-### Important Notes About Supplements {#supplements-notes}
-
-**Supplement order matters**: The reader stops when it finds the first matching supplement. List `ean_5_reader` before `ean_2_reader` if you want to prioritize 5-digit extensions.
-
-**Cannot read regular EAN-13 with supplements enabled**: If you configure supplements, that reader instance can **only** decode EAN codes **with** supplements. To read both:
-
-```javascript
-Quagga.init({
- decoder: {
- readers: [
- "ean_reader", // Regular EAN-13 without supplements
- {
- format: "ean_reader",
- config: {
- supplements: ['ean_5_reader', 'ean_2_reader']
- }
- } // EAN-13 with supplements
- ]
- }
-});
-```
-
-This configuration creates two separate reader instances.
-
-## External Readers {#external-readers}
-
-Quagga2 supports external reader modules for additional barcode formats not built into the core library.
-
-### QR Code Reader {#qr-code-reader}
-
-For QR code support, see [quagga2-reader-qr](https://github.com/ericblade/quagga2-reader-qr).
-
-External readers extend Quagga2's capabilities beyond 1D barcodes:
-
-```javascript
-import Quagga from '@ericblade/quagga2';
-import QRReader from 'quagga2-reader-qr';
-
-// Register external reader
-Quagga.registerReader('qr', QRReader);
-
-Quagga.init({
- decoder: {
- readers: ['qr'] // Use external QR reader
- }
-});
-```
-
-### External Reader Priority {#external-reader-priority}
-
-External readers follow the **same priority rules** as built-in readers. Once registered with `Quagga.registerReader()`, an external reader can be placed anywhere in the `readers` array, and its position determines when it attempts to decode relative to other readers:
-
-```javascript
-// Register external reader first
-Quagga.registerReader('my_custom_reader', MyCustomReader);
-
-// Use in config - position determines priority
-Quagga.init({
- decoder: {
- // External reader tried first, then built-in readers
- readers: ['my_custom_reader', 'ean_reader', 'code_128_reader']
- }
-});
-```
-
-**Key points:**
-- External readers must be registered via `registerReader()` before use
-- Their position in `readers` array determines decode priority
-- There is no automatic "internal first, external second" ordering
-- External readers interleave freely with built-in readers
-
-### Creating Custom Readers {#creating-custom-readers}
-
-You can create your own barcode reader implementations by extending the `BarcodeReader` prototype exported by Quagga2. See [How-To: Create External Readers](../how-to-guides/external-readers.md) for details.
-
-## Reader Performance {#reader-performance}
-
-Different readers have different performance characteristics:
-
-**Fastest readers**:
-
-- `code_128_reader` - Optimized, widely used
-- `ean_reader` - Fast and reliable
-
-**Slower readers**:
-
-- `code_39_reader` - More complex pattern
-- `i2of5_reader` - Requires more validation
-
-**Resource intensive**:
-
-- Multiple readers enabled simultaneously
-- Readers with supplements configured
-
-## Validation {#validation}
-
-Some barcode formats include check digits for validation:
-
-- **EAN-13/EAN-8**: Built-in check digit
-- **Code 128**: Built-in check digit
-- **UPC-A/UPC-E**: Built-in check digit
-
-For additional validation in your application, consider using [barcode-validator](https://github.com/ericblade/barcode-validator).
-
-## Related {#related}
-
-- [Configuration Reference](configuration.md) - Complete config options
-- [API Documentation](api.md) - How to use Quagga2 methods
-- [Tips & Tricks](../how-to-guides/tips-and-tricks.md) - Handling false positives
-
----
-
-[â Back to Reference](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/tutorials/first-scan.md b/quagga2/quagga2-1.12.1/docs/tutorials/first-scan.md
deleted file mode 100644
index 2477789..0000000
--- a/quagga2/quagga2-1.12.1/docs/tutorials/first-scan.md
+++ /dev/null
@@ -1,141 +0,0 @@
-# Your First Barcode Scan {#first-scan}
-
-This tutorial walks you through creating a simple barcode scanner using your device's camera.
-
-## Prerequisites {#prerequisites}
-
-- A web browser that supports camera access (Chrome, Firefox, Safari, Edge)
-- A device with a camera
-- Basic knowledge of HTML and JavaScript
-
-## Step 1: Set Up the HTML {#step-1-html}
-
-Create an `index.html` file:
-
-```html
-
-
-
-
-
- Barcode Scanner
-
-
-
- Barcode Scanner
-
- Scan a barcode...
-
-
-
-
-
-```
-
-## Step 2: Initialize Quagga {#step-2-initialize}
-
-Create an `app.js` file:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner-container'),
- constraints: {
- facingMode: "environment" // Use back camera
- }
- },
- decoder: {
- readers: ["code_128_reader", "ean_reader", "upc_reader"]
- }
-}, function(err) {
- if (err) {
- console.error("Failed to initialize:", err);
- document.querySelector('#result').textContent = "Error: " + err.message;
- return;
- }
- console.log("Scanner ready");
- Quagga.start();
-});
-```
-
-## Step 3: Handle Detections {#step-3-handle-detections}
-
-Add detection handling to `app.js`:
-
-```javascript
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
- const format = result.codeResult.format;
-
- document.querySelector('#result').textContent =
- `Found ${format}: ${code}`;
-
- console.log("Barcode detected:", code);
-});
-```
-
-## Step 4: Run It {#step-4-run}
-
-1. Serve the files using a local web server (required for camera access)
-2. Open the page in your browser
-3. Allow camera access when prompted
-4. Point the camera at a barcode
-
-**Note**: Camera access requires HTTPS on non-localhost domains.
-
-## Complete Code {#complete-code}
-
-Here's the complete `app.js`:
-
-```javascript
-Quagga.init({
- inputStream: {
- type: "LiveStream",
- target: document.querySelector('#scanner-container'),
- constraints: {
- facingMode: "environment"
- }
- },
- decoder: {
- readers: ["code_128_reader", "ean_reader", "upc_reader"]
- }
-}, function(err) {
- if (err) {
- console.error("Failed to initialize:", err);
- document.querySelector('#result').textContent = "Error: " + err.message;
- return;
- }
- Quagga.start();
-});
-
-Quagga.onDetected(function(result) {
- const code = result.codeResult.code;
- const format = result.codeResult.format;
- document.querySelector('#result').textContent = `Found ${format}: ${code}`;
-});
-```
-
-## Next Steps {#next-steps}
-
-- [Static Image Scanning](static-image.md) - Decode images without camera
-- [Configuration Reference](../reference/configuration.md) - Customize behavior
-- [Tips and Tricks](../how-to-guides/tips-and-tricks.md) - Improve results
-
----
-
-[â Back to Tutorials](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/tutorials/index.md b/quagga2/quagga2-1.12.1/docs/tutorials/index.md
deleted file mode 100644
index 2ef670b..0000000
--- a/quagga2/quagga2-1.12.1/docs/tutorials/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# Tutorials
-
-Step-by-step tutorials to help you learn Quagga2 by building real examples. These are learning-oriented guides designed to help beginners get hands-on experience.
-
-## Available Tutorials
-
-### [Your First Barcode Scan](first-scan.md) â Start Here
-Build a complete barcode scanner web app from scratch. You'll learn how to:
-- Set up HTML structure
-- Initialize Quagga2
-- Handle camera permissions
-- Process detected barcodes
-- Display results to users
-
-**Time**: 15 minutes | **Difficulty**: Beginner
-
-### [Decoding Static Images](static-image.md)
-Learn to decode barcodes from image files instead of camera feeds. Perfect for:
-- Photo upload features
-- Batch processing
-- Server-side Node.js applications
-- Testing without a camera
-
-**Time**: 10 minutes | **Difficulty**: Beginner
-
-### [Using with React](react-integration.md)
-Integrate Quagga2 into a React application. Covers:
-- Component lifecycle management
-- Handling cleanup
-- State management
-- Common pitfalls and solutions
-
-**Time**: 20 minutes | **Difficulty**: Intermediate
-
-### [Using with Node.js](node-usage.md)
-Use Quagga2 in server-side Node.js applications. Learn to:
-- Process images from filesystem
-- Handle image buffers
-- Batch decode multiple images
-- Build CLI tools
-
-**Time**: 15 minutes | **Difficulty**: Intermediate
-
-## Prerequisites
-
-Before starting these tutorials, you should have:
-
-- Basic HTML/JavaScript knowledge
-- A text editor
-- A web server (or ability to run `npx serve`)
-- A device with a camera (for live scanning tutorials)
-
-## Tutorial Approach
-
-These tutorials follow a **learning-by-doing** approach:
-
-1. **Complete examples** - Each tutorial provides full working code
-2. **Progressive complexity** - Start simple, add features incrementally
-3. **Hands-on practice** - Type the code yourself to build muscle memory
-4. **Real-world scenarios** - Build things you'll actually use
-
-## Need Help?
-
-If you get stuck:
-
-- Check the [API Reference](../reference/api.md) for method details
-- Review the [Configuration Guide](../reference/configuration.md)
-- Ask in [Gitter Chat](https://gitter.im/quaggaJS/Lobby)
-- Search [GitHub Issues](https://github.com/ericblade/quagga2/issues)
-
-## Contributing
-
-Found a bug in a tutorial or have an idea for a new one? [Open an issue](https://github.com/ericblade/quagga2/issues) or submit a pull request!
-
----
-
-**Next**: Start with [Your First Barcode Scan](first-scan.md) â
diff --git a/quagga2/quagga2-1.12.1/docs/tutorials/node-usage.md b/quagga2/quagga2-1.12.1/docs/tutorials/node-usage.md
deleted file mode 100644
index b8f945d..0000000
--- a/quagga2/quagga2-1.12.1/docs/tutorials/node-usage.md
+++ /dev/null
@@ -1,182 +0,0 @@
-# Using Quagga2 in Node.js {#node-usage}
-
-This tutorial covers server-side barcode scanning with Quagga2 in Node.js.
-
-## Installation {#installation}
-
-```bash
-npm install @ericblade/quagga2
-```
-
-## Basic Usage {#basic-usage}
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-Quagga.decodeSingle({
- src: './barcode.jpg',
- decoder: {
- readers: ['code_128_reader', 'ean_reader']
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log('Barcode:', result.codeResult.code);
- console.log('Format:', result.codeResult.format);
- } else {
- console.log('No barcode found');
- }
-});
-```
-
-## With Promises {#with-promises}
-
-Wrap in a Promise for async/await:
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-function decodeBarcode(imagePath, readers = ['code_128_reader']) {
- return new Promise((resolve, reject) => {
- Quagga.decodeSingle({
- src: imagePath,
- decoder: { readers }
- }, (result) => {
- if (result && result.codeResult) {
- resolve(result.codeResult);
- } else {
- resolve(null);
- }
- });
- });
-}
-
-// Usage
-async function main() {
- const result = await decodeBarcode('./barcode.jpg');
- if (result) {
- console.log(`Found ${result.format}: ${result.code}`);
- }
-}
-
-main();
-```
-
-## Express API Example {#express-example}
-
-```javascript
-const express = require('express');
-const multer = require('multer');
-const Quagga = require('@ericblade/quagga2').default;
-
-const app = express();
-const upload = multer({ dest: 'uploads/' });
-
-app.post('/scan', upload.single('image'), (req, res) => {
- if (!req.file) {
- return res.status(400).json({ error: 'No image provided' });
- }
-
- Quagga.decodeSingle({
- src: req.file.path,
- decoder: {
- readers: ['code_128_reader', 'ean_reader', 'upc_reader']
- }
- }, (result) => {
- if (result && result.codeResult) {
- res.json({
- code: result.codeResult.code,
- format: result.codeResult.format
- });
- } else {
- res.json({ code: null, error: 'No barcode found' });
- }
- });
-});
-
-app.listen(3000, () => {
- console.log('Barcode API running on port 3000');
-});
-```
-
-## Batch Processing {#batch-processing}
-
-Process multiple images:
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-const fs = require('fs');
-const path = require('path');
-
-async function decodeImage(imagePath) {
- return new Promise((resolve) => {
- Quagga.decodeSingle({
- src: imagePath,
- decoder: { readers: ['code_128_reader', 'ean_reader'] }
- }, (result) => {
- resolve({
- file: path.basename(imagePath),
- code: result?.codeResult?.code || null,
- format: result?.codeResult?.format || null
- });
- });
- });
-}
-
-async function processDirectory(dir) {
- const files = fs.readdirSync(dir)
- .filter(f => /\.(jpg|jpeg|png)$/i.test(f));
-
- const results = [];
- for (const file of files) {
- const result = await decodeImage(path.join(dir, file));
- results.push(result);
- console.log(`${result.file}: ${result.code || 'No barcode'}`);
- }
-
- return results;
-}
-
-processDirectory('./images');
-```
-
-## Configuration Tips {#configuration-tips}
-
-### Image Size {#image-size}
-
-Control processing resolution:
-
-```javascript
-Quagga.decodeSingle({
- src: './large-image.jpg',
- inputStream: {
- size: 1280 // Scale to max 1280px
- },
- decoder: { readers: ['ean_reader'] }
-}, callback);
-```
-
-### Locator Settings {#locator-settings}
-
-For difficult images:
-
-```javascript
-Quagga.decodeSingle({
- src: './image.jpg',
- locate: true,
- locator: {
- patchSize: 'small',
- halfSample: false
- },
- decoder: { readers: ['code_128_reader'] }
-}, callback);
-```
-
-## Related {#related}
-
-- [Static Image Scanning](static-image.md) - Browser-side image decoding
-- [API Reference](../reference/api.md#quagga-decodesingle) - `decodeSingle()` details
-- [Configuration Reference](../reference/configuration.md) - All options
-
----
-
-[â Back to Tutorials](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/tutorials/react-integration.md b/quagga2/quagga2-1.12.1/docs/tutorials/react-integration.md
deleted file mode 100644
index ef77f67..0000000
--- a/quagga2/quagga2-1.12.1/docs/tutorials/react-integration.md
+++ /dev/null
@@ -1,176 +0,0 @@
-# Using Quagga2 with React {#react-integration}
-
-This tutorial shows how to integrate Quagga2 into a React application.
-
-## Installation {#installation}
-
-```bash
-npm install @ericblade/quagga2
-```
-
-## Basic Component {#basic-component}
-
-```jsx
-import React, { useEffect, useRef, useCallback } from 'react';
-import Quagga from '@ericblade/quagga2';
-
-function BarcodeScanner({ onDetected }) {
- const scannerRef = useRef(null);
-
- const handleDetected = useCallback((result) => {
- if (result.codeResult) {
- onDetected(result.codeResult.code);
- }
- }, [onDetected]);
-
- useEffect(() => {
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: scannerRef.current,
- constraints: {
- facingMode: 'environment'
- }
- },
- decoder: {
- readers: ['code_128_reader', 'ean_reader']
- }
- }, (err) => {
- if (err) {
- console.error('Failed to initialize:', err);
- return;
- }
- Quagga.start();
- });
-
- Quagga.onDetected(handleDetected);
-
- return () => {
- Quagga.offDetected(handleDetected);
- Quagga.stop();
- };
- }, [handleDetected]);
-
- return
;
-}
-
-export default BarcodeScanner;
-```
-
-## Usage {#usage}
-
-```jsx
-import BarcodeScanner from './BarcodeScanner';
-
-function App() {
- const handleScan = (code) => {
- console.log('Scanned:', code);
- alert(`Barcode: ${code}`);
- };
-
- return (
-
-
Scan a Barcode
-
-
- );
-}
-```
-
-## With Hooks {#with-hooks}
-
-Create a reusable hook:
-
-```jsx
-import { useEffect, useRef, useState } from 'react';
-import Quagga from '@ericblade/quagga2';
-
-export function useQuagga(config = {}) {
- const scannerRef = useRef(null);
- const [scanning, setScanning] = useState(false);
- const [result, setResult] = useState(null);
-
- useEffect(() => {
- if (!scannerRef.current) return;
-
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: scannerRef.current,
- ...config.inputStream
- },
- decoder: {
- readers: ['code_128_reader'],
- ...config.decoder
- },
- ...config
- }, (err) => {
- if (!err) {
- Quagga.start();
- setScanning(true);
- }
- });
-
- Quagga.onDetected((data) => {
- setResult(data.codeResult);
- });
-
- return () => {
- Quagga.stop();
- setScanning(false);
- };
- }, []);
-
- return { scannerRef, scanning, result };
-}
-```
-
-## Stop on Detection {#stop-on-detection}
-
-```jsx
-function SingleScanComponent({ onComplete }) {
- const scannerRef = useRef(null);
-
- useEffect(() => {
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: scannerRef.current
- },
- decoder: {
- readers: ['ean_reader']
- }
- }, (err) => {
- if (!err) Quagga.start();
- });
-
- const handleDetected = (result) => {
- Quagga.stop();
- onComplete(result.codeResult.code);
- };
-
- Quagga.onDetected(handleDetected);
-
- return () => {
- Quagga.offDetected(handleDetected);
- Quagga.stop();
- };
- }, [onComplete]);
-
- return
;
-}
-```
-
-## Resources {#resources}
-
-- [quagga2-react-example](https://github.com/ericblade/quagga2-react-example/) - Complete example
-- [quagga2-redux-middleware](https://github.com/ericblade/quagga2-redux-middleware/) - Redux integration
-
-## Related {#related}
-
-- [API Reference](../reference/api.md) - Full API documentation
-- [Configuration Reference](../reference/configuration.md) - All options
-
----
-
-[â Back to Tutorials](index.md)
diff --git a/quagga2/quagga2-1.12.1/docs/tutorials/static-image.md b/quagga2/quagga2-1.12.1/docs/tutorials/static-image.md
deleted file mode 100644
index 1542fd7..0000000
--- a/quagga2/quagga2-1.12.1/docs/tutorials/static-image.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Decoding Static Images {#static-image}
-
-This tutorial shows how to decode barcodes from image files instead of a live camera feed.
-
-## Basic Usage {#basic-usage}
-
-Use `Quagga.decodeSingle()` to decode a single image:
-
-```javascript
-Quagga.decodeSingle({
- src: '/path/to/barcode.jpg',
- decoder: {
- readers: ["code_128_reader", "ean_reader"]
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Barcode:", result.codeResult.code);
- } else {
- console.log("No barcode found");
- }
-});
-```
-
-## From File Input {#from-file-input}
-
-Allow users to upload images:
-
-### HTML
-
-```html
-
-
-```
-
-### JavaScript
-
-```javascript
-document.querySelector('#file-input').addEventListener('change', function(e) {
- const file = e.target.files[0];
- if (!file) return;
-
- const reader = new FileReader();
- reader.onload = function(event) {
- Quagga.decodeSingle({
- src: event.target.result,
- decoder: {
- readers: ["code_128_reader", "ean_reader", "upc_reader"]
- }
- }, function(result) {
- if (result && result.codeResult) {
- document.querySelector('#result').textContent =
- "Found: " + result.codeResult.code;
- } else {
- document.querySelector('#result').textContent = "No barcode found";
- }
- });
- };
- reader.readAsDataURL(file);
-});
-```
-
-## Controlling Image Size {#controlling-image-size}
-
-By default, `decodeSingle()` scales images to 800px. Adjust with `inputStream.size`:
-
-```javascript
-Quagga.decodeSingle({
- src: '/path/to/image.jpg',
- inputStream: {
- size: 1280 // Process at higher resolution
- },
- decoder: {
- readers: ["ean_reader"]
- }
-}, callback);
-```
-
-Set `size: 0` to use original image dimensions.
-
-## With Localization {#with-localization}
-
-Enable `locate: true` (default) to find barcodes anywhere in the image:
-
-```javascript
-Quagga.decodeSingle({
- src: '/path/to/image.jpg',
- locate: true,
- locator: {
- patchSize: "medium",
- halfSample: true
- },
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Found:", result.codeResult.code);
- console.log("Location:", result.box); // Bounding box
- }
-});
-```
-
-## Node.js Usage {#nodejs-usage}
-
-Quagga2 works in Node.js:
-
-```javascript
-const Quagga = require('@ericblade/quagga2').default;
-
-Quagga.decodeSingle({
- src: './barcode.jpg',
- decoder: {
- readers: ["code_128_reader"]
- }
-}, function(result) {
- if (result && result.codeResult) {
- console.log("Barcode:", result.codeResult.code);
- }
-});
-```
-
-## Related {#related}
-
-- [Your First Scan](first-scan.md) - Live camera scanning
-- [Node.js Usage](node-usage.md) - Server-side scanning
-- [API Reference](../reference/api.md#quagga-decodesingle) - `decodeSingle()` details
-
----
-
-[â Back to Tutorials](index.md)
diff --git a/quagga2/quagga2-1.12.1/package-lock.json b/quagga2/quagga2-1.12.1/package-lock.json
deleted file mode 100644
index d15c4d8..0000000
--- a/quagga2/quagga2-1.12.1/package-lock.json
+++ /dev/null
@@ -1,27232 +0,0 @@
-{
- "name": "@ericblade/quagga2",
- "version": "1.10.1",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "@ericblade/quagga2",
- "version": "1.10.1",
- "license": "MIT",
- "dependencies": {
- "gl-matrix": "^3.4.4"
- },
- "devDependencies": {
- "@babel/core": "^7.28.5",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
- "@babel/plugin-proposal-optional-chaining": "^7.21.0",
- "@babel/plugin-transform-runtime": "^7.28.5",
- "@babel/polyfill": "^7.12.1",
- "@babel/preset-env": "^7.28.5",
- "@babel/preset-typescript": "^7.28.5",
- "@babel/runtime": "^7.28.4",
- "@cypress/code-coverage": "^3.12.4",
- "@cypress/webpack-preprocessor": "6.0.0",
- "@types/chai": "^5.2.3",
- "@types/gl-vec2": "^1.3.5",
- "@types/lodash": "^4.17.20",
- "@types/mocha": "^5.2.7",
- "@types/node": "^24.10.1",
- "@types/sinon": "^20.0.0",
- "@types/sinon-chai": "^3.2.12",
- "@typescript-eslint/eslint-plugin": "^7.18.0",
- "@typescript-eslint/parser": "^7.18.0",
- "babel-loader": "^8.2.5",
- "babel-plugin-add-module-exports": "^1.0.4",
- "babel-plugin-istanbul": "^7.0.1",
- "chai": "^4.3.10",
- "core-js": "^3.46.0",
- "cross-env": "^10.1.0",
- "cypress": "^13.17.0",
- "eslint": "^8.57.1",
- "eslint-config-airbnb-base": "^15.0.0",
- "eslint-config-airbnb-typescript": "^18.0.0",
- "eslint-config-airbnb-typescript-base": "^6.0.1",
- "eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jsx-a11y": "^6.10.2",
- "eslint-plugin-typescript-sort-keys": "^3.3.0",
- "lodash": "^4.17.21",
- "mocha": "^5.2.0",
- "ndarray": "^1.0.19",
- "ndarray-linear-interpolate": "^1.0.0",
- "ndarray-pixels": "^5.0.1",
- "nyc": "^17.1.0",
- "sinon": "^21.0.0",
- "sinon-chai": "^3.7.0",
- "source-map-loader": "^1.1.1",
- "ts-mocha": "^11.1.0",
- "ts-node": "^10.9.2",
- "typescript": "^5.9.3",
- "webpack": "^4.44.2",
- "webpack-cli": "^3.3.12"
- },
- "engines": {
- "node": ">= 20.0"
- },
- "optionalDependencies": {
- "fsevents": "2.3.3",
- "ndarray-pixels": "^5.0.1",
- "sharp": "^0.34.0"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "node_modules/@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.3"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
- "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.5",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz",
- "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "regexpu-core": "^6.3.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz",
- "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "debug": "^4.4.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.22.10"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
- "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
- "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-wrap-function": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-wrap-function": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz",
- "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.3",
- "@babel/types": "^7.28.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.5"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz",
- "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
- "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
- "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
- "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-transform-optional-chaining": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz",
- "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
- "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
- "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.20.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
- "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
- "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
- "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",
- "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
- "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
- "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
- "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz",
- "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-remap-async-to-generator": "^7.27.1",
- "@babel/traverse": "^7.28.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz",
- "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-remap-async-to-generator": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
- "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz",
- "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",
- "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz",
- "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
- }
- },
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz",
- "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-globals": "^7.28.0",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/traverse": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz",
- "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/template": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz",
- "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",
- "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
- "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
- "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-explicit-resource-management": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz",
- "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz",
- "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
- "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
- "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
- "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",
- "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
- "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz",
- "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
- "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
- "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
- "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz",
- "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
- "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
- "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",
- "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz",
- "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz",
- "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.0",
- "@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/traverse": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
- "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz",
- "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz",
- "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.27.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz",
- "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz",
- "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz",
- "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
- "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz",
- "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regexp-modifiers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",
- "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
- "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-runtime": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz",
- "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "babel-plugin-polyfill-corejs2": "^0.4.14",
- "babel-plugin-polyfill-corejs3": "^0.13.0",
- "babel-plugin-polyfill-regenerator": "^0.6.5",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
- "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-spread": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz",
- "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
- "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
- "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
- "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
- "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.28.5",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
- "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",
- "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
- "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",
- "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/polyfill": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
- "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
- "deprecated": "đ¨ This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.",
- "dev": true,
- "dependencies": {
- "core-js": "^2.6.5",
- "regenerator-runtime": "^0.13.4"
- }
- },
- "node_modules/@babel/polyfill/node_modules/core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
- "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
- "dev": true,
- "hasInstallScript": true
- },
- "node_modules/@babel/preset-env": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz",
- "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-import-assertions": "^7.27.1",
- "@babel/plugin-syntax-import-attributes": "^7.27.1",
- "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.27.1",
- "@babel/plugin-transform-async-generator-functions": "^7.28.0",
- "@babel/plugin-transform-async-to-generator": "^7.27.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
- "@babel/plugin-transform-block-scoping": "^7.28.5",
- "@babel/plugin-transform-class-properties": "^7.27.1",
- "@babel/plugin-transform-class-static-block": "^7.28.3",
- "@babel/plugin-transform-classes": "^7.28.4",
- "@babel/plugin-transform-computed-properties": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.5",
- "@babel/plugin-transform-dotall-regex": "^7.27.1",
- "@babel/plugin-transform-duplicate-keys": "^7.27.1",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1",
- "@babel/plugin-transform-dynamic-import": "^7.27.1",
- "@babel/plugin-transform-explicit-resource-management": "^7.28.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.28.5",
- "@babel/plugin-transform-export-namespace-from": "^7.27.1",
- "@babel/plugin-transform-for-of": "^7.27.1",
- "@babel/plugin-transform-function-name": "^7.27.1",
- "@babel/plugin-transform-json-strings": "^7.27.1",
- "@babel/plugin-transform-literals": "^7.27.1",
- "@babel/plugin-transform-logical-assignment-operators": "^7.28.5",
- "@babel/plugin-transform-member-expression-literals": "^7.27.1",
- "@babel/plugin-transform-modules-amd": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-modules-systemjs": "^7.28.5",
- "@babel/plugin-transform-modules-umd": "^7.27.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1",
- "@babel/plugin-transform-new-target": "^7.27.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
- "@babel/plugin-transform-numeric-separator": "^7.27.1",
- "@babel/plugin-transform-object-rest-spread": "^7.28.4",
- "@babel/plugin-transform-object-super": "^7.27.1",
- "@babel/plugin-transform-optional-catch-binding": "^7.27.1",
- "@babel/plugin-transform-optional-chaining": "^7.28.5",
- "@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/plugin-transform-private-methods": "^7.27.1",
- "@babel/plugin-transform-private-property-in-object": "^7.27.1",
- "@babel/plugin-transform-property-literals": "^7.27.1",
- "@babel/plugin-transform-regenerator": "^7.28.4",
- "@babel/plugin-transform-regexp-modifiers": "^7.27.1",
- "@babel/plugin-transform-reserved-words": "^7.27.1",
- "@babel/plugin-transform-shorthand-properties": "^7.27.1",
- "@babel/plugin-transform-spread": "^7.27.1",
- "@babel/plugin-transform-sticky-regex": "^7.27.1",
- "@babel/plugin-transform-template-literals": "^7.27.1",
- "@babel/plugin-transform-typeof-symbol": "^7.27.1",
- "@babel/plugin-transform-unicode-escapes": "^7.27.1",
- "@babel/plugin-transform-unicode-property-regex": "^7.27.1",
- "@babel/plugin-transform-unicode-regex": "^7.27.1",
- "@babel/plugin-transform-unicode-sets-regex": "^7.27.1",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.14",
- "babel-plugin-polyfill-corejs3": "^0.13.0",
- "babel-plugin-polyfill-regenerator": "^0.6.5",
- "core-js-compat": "^3.43.0",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-modules": {
- "version": "0.1.6-no-external-plugins",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
- "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/preset-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
- "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
- "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@colors/colors": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/@cspotcode/source-map-support": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "0.3.9"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "node_modules/@cypress/code-coverage": {
- "version": "3.12.4",
- "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.12.4.tgz",
- "integrity": "sha512-5uwsZpUd4iMCHESZLHZmnWhLFws3LKhto1VsdfXTiI8NPlDxpXF93k2ixehG9uQr7SSYEUJmdKipHSQmn4CidQ==",
- "dev": true,
- "dependencies": {
- "@cypress/webpack-preprocessor": "^6.0.0",
- "chalk": "4.1.2",
- "dayjs": "1.11.10",
- "debug": "4.3.4",
- "execa": "4.1.0",
- "globby": "11.0.4",
- "istanbul-lib-coverage": "3.0.0",
- "js-yaml": "4.1.0",
- "nyc": "15.1.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.1",
- "@babel/preset-env": "^7.0.0",
- "babel-loader": "^8.3 || ^9",
- "cypress": "*",
- "webpack": "^4 || ^5"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@cypress/code-coverage/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@cypress/code-coverage/node_modules/find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/nyc": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "bin": {
- "nyc": "bin/nyc.js"
- },
- "engines": {
- "node": ">=8.9"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@cypress/code-coverage/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@cypress/request": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz",
- "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~4.0.4",
- "http-signature": "~1.4.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "performance-now": "^2.1.0",
- "qs": "6.14.0",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "^5.0.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@cypress/request/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@cypress/webpack-preprocessor": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.0.tgz",
- "integrity": "sha512-1AS1Et5CNPJii0+DdBZBS8e0hlM2BkBNmYRdZO4/16A3KS3em1sjPZtFw7jJF00m6DYAdB9iy6QW/lLZ2bN0gg==",
- "dev": true,
- "dependencies": {
- "bluebird": "3.7.1",
- "debug": "^4.3.4",
- "lodash": "^4.17.20"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.1",
- "@babel/preset-env": "^7.0.0",
- "babel-loader": "^8.3 || ^9",
- "webpack": "^4 || ^5"
- }
- },
- "node_modules/@cypress/webpack-preprocessor/node_modules/bluebird": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
- "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
- "dev": true
- },
- "node_modules/@cypress/xvfb": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
- "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
- "dev": true,
- "dependencies": {
- "debug": "^3.1.0",
- "lodash.once": "^4.1.1"
- }
- },
- "node_modules/@cypress/xvfb/node_modules/debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
- "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/core/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "license": "0BSD",
- "optional": true
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
- "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "license": "0BSD",
- "optional": true
- },
- "node_modules/@epic-web/invariant": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
- "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
- "dev": true,
- "license": "MIT"
- },
- "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",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
- "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
- "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
- "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
- "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
- "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
- "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
- "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
- "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
- "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
- "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
- "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
- "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
- "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
- "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
- "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
- "cpu": [
- "ppc64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
- "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
- "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
- "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
- "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
- "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.4.4"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
- "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
- "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
- "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
- "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
- "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.10.0"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "13.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
- "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.1"
- }
- },
- "node_modules/@sinonjs/samsam": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz",
- "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.1",
- "type-detect": "^4.1.0"
- }
- },
- "node_modules/@sinonjs/samsam/node_modules/type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@tsconfig/node10": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
- "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
- "dev": true
- },
- "node_modules/@tsconfig/node12": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
- "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
- "dev": true
- },
- "node_modules/@tsconfig/node14": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
- "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
- "dev": true
- },
- "node_modules/@tsconfig/node16": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
- "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
- "dev": true
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tybys/wasm-util/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "license": "0BSD",
- "optional": true
- },
- "node_modules/@types/chai": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
- "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/deep-eql": "*",
- "assertion-error": "^2.0.1"
- }
- },
- "node_modules/@types/chai/node_modules/assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "node_modules/@types/deep-eql": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
- "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/gl-vec2": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/gl-vec2/-/gl-vec2-1.3.5.tgz",
- "integrity": "sha512-0PK987qf7KYKQrPpRJPI/L7bvP9CgAdxJySEyxyVk+I5e20ci2b1diDLQqa3BXW61FKOA1tswbxkmPDih48jqQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/mocha": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
- "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
- "dev": true
- },
- "node_modules/@types/ndarray": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/@types/ndarray/-/ndarray-1.0.14.tgz",
- "integrity": "sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "24.10.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
- "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/@types/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sinon": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-20.0.0.tgz",
- "integrity": "sha512-etYGUC6IEevDGSWvR9WrECRA01ucR2/Oi9XMBUAdV0g4bLkNf4HlZWGiGlDOq5lgwXRwcV+PSeKgFcW4QzzYOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/sinonjs__fake-timers": "*"
- }
- },
- "node_modules/@types/sinon-chai": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz",
- "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/chai": "*",
- "@types/sinon": "*"
- }
- },
- "node_modules/@types/sinonjs__fake-timers": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
- "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
- "dev": true
- },
- "node_modules/@types/sizzle": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz",
- "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==",
- "dev": true
- },
- "node_modules/@types/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
- "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/type-utils": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.3.1",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^7.0.0",
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/experimental-utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz",
- "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/utils": "5.62.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
- "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
- "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
- "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
- "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
- "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
- "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
- "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
- "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
- "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
- "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
- "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
- "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
- "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
- "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
- "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
- "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
- "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
- "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
- "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
- "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
- "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/floating-point-hex-parser": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-code-frame": "1.9.0",
- "@webassemblyjs/helper-fsm": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true,
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
- "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aggregate-error/node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": ">=5.0.0"
- }
- },
- "node_modules/ajv-keywords": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/anymatch/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/append-transform": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
- "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
- "dev": true,
- "dependencies": {
- "default-require-extensions": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "node_modules/arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "node_modules/arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
- "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/assert/node_modules/inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "node_modules/assert/node_modules/util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.1"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/async": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
- "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
- "dev": true
- },
- "node_modules/async-each": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
- "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "optional": true
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
- "dev": true
- },
- "node_modules/axe-core": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz",
- "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==",
- "dev": true,
- "license": "MPL-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/babel-loader": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
- "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^2.0.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "engines": {
- "node": ">= 8.9"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0",
- "webpack": ">=2"
- }
- },
- "node_modules/babel-loader/node_modules/find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/babel-loader/node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/babel-loader/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-add-module-exports": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz",
- "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==",
- "dev": true
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
- "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "workspaces": [
- "test/babel-8"
- ],
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-instrument": "^6.0.2",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz",
- "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.27.7",
- "@babel/helper-define-polyfill-provider": "^0.6.5",
- "semver": "^6.3.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz",
- "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.5",
- "core-js-compat": "^3.43.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz",
- "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.5"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "dependencies": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base64-js": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
- "dev": true
- },
- "node_modules/baseline-browser-mapping": {
- "version": "2.8.28",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.28.tgz",
- "integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "node_modules/blob-util": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
- "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
- "dev": true
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "node_modules/bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "dependencies": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "dependencies": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "node_modules/browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "node_modules/browserify-rsa/node_modules/bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
- "node_modules/browserify-sign": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz",
- "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.2.1",
- "browserify-rsa": "^4.1.0",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.4",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.6",
- "readable-stream": "^3.6.2",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/browserify-sign/node_modules/bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
- "node_modules/browserify-sign/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "dependencies": {
- "pako": "~1.0.5"
- }
- },
- "node_modules/browserslist": {
- "version": "4.28.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
- "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "baseline-browser-mapping": "^2.8.25",
- "caniuse-lite": "^1.0.30001754",
- "electron-to-chromium": "^1.5.249",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.1.4"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "node_modules/builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "dependencies": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "node_modules/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "dependencies": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cachedir": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
- "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caching-transform": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
- "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
- "dev": true,
- "dependencies": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/caching-transform/node_modules/hasha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
- "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
- "dev": true,
- "dependencies": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/caching-transform/node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001755",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz",
- "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "node_modules/chai": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
- "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chai/node_modules/type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-func-name": "^2.0.2"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/check-more-types": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
- "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- },
- "optionalDependencies": {
- "fsevents": "^1.2.7"
- }
- },
- "node_modules/chokidar/node_modules/fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "dependencies": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "dev": true,
- "dependencies": {
- "tslib": "^1.9.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/ci-info": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
- "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cipher-base": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz",
- "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cli-table3": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
- "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0"
- },
- "engines": {
- "node": "10.* || >= 12.*"
- },
- "optionalDependencies": {
- "@colors/colors": "1.5.0"
- }
- },
- "node_modules/cli-truncate": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
- "dev": true,
- "dependencies": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "dependencies": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "engines": {
- "node": ">=12.5.0"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "devOptional": true
- },
- "node_modules/color-string": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/color/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/colorette": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/common-tags": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
- "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
- "dev": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "node_modules/concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "engines": [
- "node >= 0.8"
- ],
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/confusing-browser-globals": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
- "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
- "dev": true
- },
- "node_modules/console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "node_modules/constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/convert-source-map/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/core-js": {
- "version": "3.46.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz",
- "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-js-compat": {
- "version": "3.46.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz",
- "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "browserslist": "^4.26.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "node_modules/create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "node_modules/create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "node_modules/create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "node_modules/cross-env": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
- "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@epic-web/invariant": "^1.0.0",
- "cross-spawn": "^7.0.6"
- },
- "bin": {
- "cross-env": "dist/bin/cross-env.js",
- "cross-env-shell": "dist/bin/cross-env-shell.js"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/cross-env/node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cross-env/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cross-env/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cross-env/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cross-env/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/cross-spawn/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "dependencies": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/cwise-compiler": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
- "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
- "dev": true,
- "dependencies": {
- "uniq": "^1.0.0"
- }
- },
- "node_modules/cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
- "dev": true
- },
- "node_modules/cypress": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz",
- "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@cypress/request": "^3.0.6",
- "@cypress/xvfb": "^1.2.4",
- "@types/sinonjs__fake-timers": "8.1.1",
- "@types/sizzle": "^2.3.2",
- "arch": "^2.2.0",
- "blob-util": "^2.0.2",
- "bluebird": "^3.7.2",
- "buffer": "^5.7.1",
- "cachedir": "^2.3.0",
- "chalk": "^4.1.0",
- "check-more-types": "^2.24.0",
- "ci-info": "^4.0.0",
- "cli-cursor": "^3.1.0",
- "cli-table3": "~0.6.1",
- "commander": "^6.2.1",
- "common-tags": "^1.8.0",
- "dayjs": "^1.10.4",
- "debug": "^4.3.4",
- "enquirer": "^2.3.6",
- "eventemitter2": "6.4.7",
- "execa": "4.1.0",
- "executable": "^4.1.1",
- "extract-zip": "2.0.1",
- "figures": "^3.2.0",
- "fs-extra": "^9.1.0",
- "getos": "^3.2.1",
- "is-installed-globally": "~0.4.0",
- "lazy-ass": "^1.6.0",
- "listr2": "^3.8.3",
- "lodash": "^4.17.21",
- "log-symbols": "^4.0.0",
- "minimist": "^1.2.8",
- "ospath": "^1.2.2",
- "pretty-bytes": "^5.6.0",
- "process": "^0.11.10",
- "proxy-from-env": "1.0.0",
- "request-progress": "^3.0.0",
- "semver": "^7.5.3",
- "supports-color": "^8.1.1",
- "tmp": "~0.2.3",
- "tree-kill": "1.2.2",
- "untildify": "^4.0.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "cypress": "bin/cypress"
- },
- "engines": {
- "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
- }
- },
- "node_modules/cypress/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cypress/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/cypress/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/cypress/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cypress/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cypress/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cypress/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/cypress/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/dayjs": {
- "version": "1.11.10",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
- "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decode-uri-component": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/deep-eql": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
- "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/default-require-extensions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
- "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
- "dev": true,
- "dependencies": {
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/default-require-extensions/node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-property/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-property/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-property/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
- "devOptional": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/diff": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
- "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true,
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.2"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.254",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.254.tgz",
- "integrity": "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/elliptic": {
- "version": "6.6.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
- "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "node_modules/emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
- "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/enquirer/node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
- "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.1",
- "@humanwhocodes/config-array": "^0.13.0",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-airbnb-base": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
- "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
- "dev": true,
- "dependencies": {
- "confusing-browser-globals": "^1.0.10",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.32.0 || ^8.2.0",
- "eslint-plugin-import": "^2.25.2"
- }
- },
- "node_modules/eslint-config-airbnb-typescript": {
- "version": "18.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz",
- "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-config-airbnb-base": "^15.0.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^7.0.0",
- "@typescript-eslint/parser": "^7.0.0",
- "eslint": "^8.56.0"
- }
- },
- "node_modules/eslint-config-airbnb-typescript-base": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript-base/-/eslint-config-airbnb-typescript-base-6.0.1.tgz",
- "integrity": "sha512-aVpy/QP1CEjymWPf66EJJt05M1d+CV9WZnOWDLYAKA1h+81seayoIRZoaDQqUJeQdwnlUWH57MvhoL8mbCbmaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "^7.13.1",
- "@typescript-eslint/parser": "^7.13.1",
- "confusing-browser-globals": "^1.0.11",
- "eslint": "^8.57.0",
- "eslint-import-resolver-typescript": "^3.6.1",
- "eslint-import-resolver-webpack": "^0.13.8",
- "eslint-plugin-import": "^2.29.1",
- "eslint-plugin-typescript-sort-keys": "^3.2.0",
- "typescript": "^5.4.5"
- }
- },
- "node_modules/eslint-config-airbnb-typescript-base/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-airbnb-typescript-base/node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-airbnb-typescript-base/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-webpack": {
- "version": "0.13.10",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.10.tgz",
- "integrity": "sha512-ciVTEg7sA56wRMR772PyjcBRmyBMLS46xgzQZqt6cWBEKc7cK65ZSSLCTLVRu2gGtKyXUb5stwf4xxLBfERLFA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "enhanced-resolve": "^0.9.1",
- "find-root": "^1.1.0",
- "hasown": "^2.0.2",
- "interpret": "^1.4.0",
- "is-core-module": "^2.15.1",
- "is-regex": "^1.2.0",
- "lodash": "^4.17.21",
- "resolve": "^2.0.0-next.5",
- "semver": "^5.7.2"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "eslint-plugin-import": ">=1.4.0",
- "webpack": ">=1.11.0"
- }
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/enhanced-resolve": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
- "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.2.0",
- "tapable": "^0.1.8"
- },
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/memory-fs": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
- "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/eslint-import-resolver-webpack/node_modules/tapable": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
- "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.32.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
- "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.9",
- "array.prototype.findlastindex": "^1.2.6",
- "array.prototype.flat": "^1.3.3",
- "array.prototype.flatmap": "^1.3.3",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.1",
- "hasown": "^2.0.2",
- "is-core-module": "^2.16.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.1",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.9",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/eslint-plugin-typescript-sort-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.3.0.tgz",
- "integrity": "sha512-bRW3Rc/VNdrSP9OoY5wgjjaXCOOkZKpzvl/Mk6l8Sg8CMehVIcg9K4y33l+ZcZiknpl0aR6rKusxuCJNGZWmVw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@typescript-eslint/experimental-utils": "^5.0.0",
- "json-schema": "^0.4.0",
- "natural-compare-lite": "^1.4.0"
- },
- "engines": {
- "node": ">= 16"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": ">=6",
- "eslint": "^7 || ^8",
- "typescript": "^3 || ^4 || ^5"
- }
- },
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/eslint/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/eslint/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/eslint/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/eslint/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/eslint/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/eslint/node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/eslint/node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/eslint/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/eslint/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eslint/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eventemitter2": {
- "version": "6.4.7",
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
- "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
- "dev": true
- },
- "node_modules/events": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
- "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/execa/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/execa/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/execa/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/execa/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/execa/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "dependencies": {
- "pify": "^2.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "dependencies": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "dependencies": {
- "homedir-polyfill": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extend-shallow/node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "dependencies": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT"
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fast-glob/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-glob/node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/fast-glob/node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/fast-glob/node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/fast-glob/node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fastq": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
- "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
- },
- "node_modules/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "dependencies": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flat-cache/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "node_modules/flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/foreground-child": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
- "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/foreground-child/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/foreground-child/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreground-child/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreground-child/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreground-child/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "dependencies": {
- "map-cache": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/fromentries": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz",
- "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==",
- "dev": true
- },
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/generator-function": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
- "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
- "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/getos": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
- "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.0"
- }
- },
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
- "node_modules/gl-matrix": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz",
- "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==",
- "license": "MIT"
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "dev": true,
- "dependencies": {
- "ini": "2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/global-dirs/node_modules/ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "dependencies": {
- "global-prefix": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-modules/node_modules/global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "dependencies": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "dependencies": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "node_modules/growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true,
- "engines": {
- "node": ">=4.x"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/hash-base": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz",
- "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^2.3.8",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "dependencies": {
- "parse-passwd": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "node_modules/http-signature": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
- "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^2.0.2",
- "sshpk": "^1.18.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
- "node_modules/human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true,
- "engines": {
- "node": ">=8.12.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
- },
- "node_modules/iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-fresh/node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/import-local": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
- "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
- "dev": true,
- "dependencies": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
- "dev": true
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/iota-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
- "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=",
- "dev": true
- },
- "node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "binary-extensions": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-bun-module/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-descriptor/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
- "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.4",
- "generator-function": "^2.0.0",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dev": true,
- "dependencies": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-hook": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
- "dev": true,
- "dependencies": {
- "append-transform": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-processinfo": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
- "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
- "dev": true,
- "dependencies": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^3.3.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
- "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-processinfo/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-report/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-report/node_modules/supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "dev": true,
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "node_modules/json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsprim": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/lazy-ass": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
- "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
- "dev": true,
- "engines": {
- "node": "> 0.8"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/listr2": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
- "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
- "dev": true,
- "dependencies": {
- "cli-truncate": "^2.1.0",
- "colorette": "^2.0.16",
- "log-update": "^4.0.0",
- "p-map": "^4.0.0",
- "rfdc": "^1.3.0",
- "rxjs": "^7.5.1",
- "through": "^2.3.8",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "enquirer": ">= 2.3.0 < 3"
- },
- "peerDependenciesMeta": {
- "enquirer": {
- "optional": true
- }
- }
- },
- "node_modules/listr2/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/listr2/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/listr2/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/listr2/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/listr2/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true,
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/loader-utils/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-update": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.3.0",
- "cli-cursor": "^3.1.0",
- "slice-ansi": "^4.0.0",
- "wrap-ansi": "^6.2.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-update/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-update/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-update/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-update/node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-update/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-func-name": "^2.0.1"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "dependencies": {
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "dependencies": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "dependencies": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mixin-deep/node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
- "dev": true,
- "dependencies": {
- "browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
- "growl": "1.10.5",
- "he": "1.1.1",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "supports-color": "5.4.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/mocha/node_modules/commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "node_modules/mocha/node_modules/debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/mocha/node_modules/diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/mocha/node_modules/glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mocha/node_modules/mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
- "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
- "dev": true,
- "dependencies": {
- "minimist": "0.0.8"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nan": {
- "version": "2.23.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.1.tgz",
- "integrity": "sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
- "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "napi-postinstall": "lib/cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node_modules/natural-compare-lite": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ndarray": {
- "version": "1.0.19",
- "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz",
- "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==",
- "dev": true,
- "dependencies": {
- "iota-array": "^1.0.0",
- "is-buffer": "^1.0.2"
- }
- },
- "node_modules/ndarray-linear-interpolate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz",
- "integrity": "sha1-eLySuFuavBW25n7mWCj54hN65ys=",
- "dev": true
- },
- "node_modules/ndarray-ops": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz",
- "integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cwise-compiler": "^1.0.0"
- }
- },
- "node_modules/ndarray-pixels": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ndarray-pixels/-/ndarray-pixels-5.0.1.tgz",
- "integrity": "sha512-IBtrpefpqlI8SPDCGjXk4v5NV5z7r3JSuCbfuEEXaM0vrOJtNGgYUa4C3Lt5H+qWdYF4BCPVFsnXhNC7QvZwkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/ndarray": "^1.0.14",
- "ndarray": "^1.0.19",
- "ndarray-ops": "^1.2.2",
- "sharp": "^0.34.0"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node_modules/node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "dependencies": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- }
- },
- "node_modules/node-libs-browser/node_modules/buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "dependencies": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "node_modules/node-libs-browser/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/node-libs-browser/node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "node_modules/node-preload": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
- "dev": true,
- "dependencies": {
- "process-on-spawn": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc": {
- "version": "17.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz",
- "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^3.3.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.2",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "bin": {
- "nyc": "bin/nyc.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/nyc/node_modules/ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "dependencies": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/nyc/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/nyc/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/nyc/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/nyc/node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/nyc/node_modules/find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/nyc/node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/nyc/node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/nyc/node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/nyc/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/nyc/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/yargs": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
- "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "dependencies": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "node_modules/ospath": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
- "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
- "dev": true
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/package-hash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
- "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/package-hash/node_modules/hasha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
- "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
- "dev": true,
- "dependencies": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
- },
- "node_modules/parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "dependencies": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "dependencies": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "node_modules/path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/pbkdf2": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz",
- "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==",
- "dev": true,
- "dependencies": {
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "ripemd160": "^2.0.3",
- "safe-buffer": "^5.2.1",
- "sha.js": "^2.4.12",
- "to-buffer": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/pretty-bytes": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
- "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "node_modules/process-on-spawn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
- "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
- "dev": true,
- "dependencies": {
- "fromentries": "^1.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "node_modules/proxy-from-env": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
- "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
- "dev": true
- },
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "node_modules/public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/pumpify/node_modules/pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/readable-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/regenerate-unicode-properties": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
- "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.10",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
- "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==",
- "dev": true
- },
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexpu-core": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
- "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.2.2",
- "regjsgen": "^0.8.0",
- "regjsparser": "^0.13.0",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.2.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/regjsparser": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz",
- "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "jsesc": "~3.1.0"
- },
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
- "dev": true,
- "dependencies": {
- "es6-error": "^4.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true,
- "license": "ISC",
- "optional": true
- },
- "node_modules/repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/request-progress": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
- "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
- "dev": true,
- "dependencies": {
- "throttleit": "^1.0.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "dev": true,
- "dependencies": {
- "resolve-from": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-cwd/node_modules/resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "dependencies": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-dir/node_modules/global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "dependencies": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
- },
- "node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
- "dev": true
- },
- "node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/ripemd160": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz",
- "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.1.2",
- "inherits": "^2.0.4"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1"
- }
- },
- "node_modules/rxjs": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
- "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/rxjs/node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
- "dev": true
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/schema-utils": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz",
- "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.0",
- "ajv-keywords": "^3.4.1"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "node_modules/sha.js": {
- "version": "2.4.12",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
- "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.0"
- },
- "bin": {
- "sha.js": "bin.js"
- },
- "engines": {
- "node": ">= 0.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz",
- "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==",
- "devOptional": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "color": "^4.2.3",
- "detect-libc": "^2.0.4",
- "semver": "^7.7.2"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.3",
- "@img/sharp-darwin-x64": "0.34.3",
- "@img/sharp-libvips-darwin-arm64": "1.2.0",
- "@img/sharp-libvips-darwin-x64": "1.2.0",
- "@img/sharp-libvips-linux-arm": "1.2.0",
- "@img/sharp-libvips-linux-arm64": "1.2.0",
- "@img/sharp-libvips-linux-ppc64": "1.2.0",
- "@img/sharp-libvips-linux-s390x": "1.2.0",
- "@img/sharp-libvips-linux-x64": "1.2.0",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.0",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.0",
- "@img/sharp-linux-arm": "0.34.3",
- "@img/sharp-linux-arm64": "0.34.3",
- "@img/sharp-linux-ppc64": "0.34.3",
- "@img/sharp-linux-s390x": "0.34.3",
- "@img/sharp-linux-x64": "0.34.3",
- "@img/sharp-linuxmusl-arm64": "0.34.3",
- "@img/sharp-linuxmusl-x64": "0.34.3",
- "@img/sharp-wasm32": "0.34.3",
- "@img/sharp-win32-arm64": "0.34.3",
- "@img/sharp-win32-ia32": "0.34.3",
- "@img/sharp-win32-x64": "0.34.3"
- }
- },
- "node_modules/sharp/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "devOptional": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
- "dev": true
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/sinon": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz",
- "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.1",
- "@sinonjs/fake-timers": "^13.0.5",
- "@sinonjs/samsam": "^8.0.1",
- "diff": "^7.0.0",
- "supports-color": "^7.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon-chai": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz",
- "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==",
- "dev": true,
- "license": "(BSD-2-Clause OR WTFPL)",
- "peerDependencies": {
- "chai": "^4.0.0",
- "sinon": ">=4.0.0"
- }
- },
- "node_modules/sinon/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sinon/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slice-ansi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/slice-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/slice-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "dependencies": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "dependencies": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/snapdragon/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-loader": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.1.tgz",
- "integrity": "sha512-m2HjSWP2R1yR9P31e4+ciGHFOPvW6GmqHgZkneOkrME2VvWysXTGi4o0yS28iKWWP3vAUmAoa+3x5ZRI2BIX6A==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "iconv-lite": "^0.6.2",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "source-map": "^0.6.1",
- "whatwg-mimetype": "^2.3.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/source-map-loader/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/source-map-loader/node_modules/iconv-lite": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
- "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-loader/node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/source-map-loader/node_modules/schema-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
- "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.6",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true
- },
- "node_modules/spawn-wrap": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
- "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/spawn-wrap/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/spawn-wrap/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "node_modules/sshpk": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
- "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "dependencies": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stop-iteration-iterator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
- "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "dependencies": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-width/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "dependencies": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^4.0.0",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- },
- "engines": {
- "node": ">= 6.9.0"
- },
- "peerDependencies": {
- "webpack": "^4.0.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "node_modules/throttleit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
- "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
- "dev": true
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "node_modules/through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/timers-browserify": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
- "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
- "dev": true,
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/tldts": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
- "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^6.1.86"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
- "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tmp": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
- "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
- "dev": true,
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "node_modules/to-buffer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
- "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
- "dev": true,
- "dependencies": {
- "isarray": "^2.0.5",
- "safe-buffer": "^5.2.1",
- "typed-array-buffer": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "dependencies": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^6.1.32"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/ts-mocha": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-11.1.0.tgz",
- "integrity": "sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "ts-mocha": "bin/ts-mocha"
- },
- "engines": {
- "node": ">= 6.X.X"
- },
- "peerDependencies": {
- "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X",
- "ts-node": "^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X",
- "tsconfig-paths": "^4.X.X"
- },
- "peerDependenciesMeta": {
- "tsconfig-paths": {
- "optional": true
- }
- }
- },
- "node_modules/ts-node": {
- "version": "10.9.2",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
- "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@cspotcode/source-map-support": "^0.8.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.1",
- "yn": "3.1.1"
- },
- "bin": {
- "ts-node": "dist/bin.js",
- "ts-node-cwd": "dist/bin-cwd.js",
- "ts-node-esm": "dist/bin-esm.js",
- "ts-node-script": "dist/bin-script.js",
- "ts-node-transpile-only": "dist/bin-transpile.js",
- "ts-script": "dist/bin-script-deprecated.js"
- },
- "peerDependencies": {
- "@swc/core": ">=1.2.50",
- "@swc/wasm": ">=1.2.50",
- "@types/node": "*",
- "typescript": ">=2.7"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "@swc/wasm": {
- "optional": true
- }
- }
- },
- "node_modules/ts-node/node_modules/acorn-walk": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz",
- "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/ts-node/node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "node_modules/tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true,
- "license": "Unlicense"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
- "node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
- "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
- "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
- "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
- "node_modules/unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unrs-resolver": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
- "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "napi-postinstall": "^0.3.0"
- },
- "funding": {
- "url": "https://opencollective.com/unrs-resolver"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
- "@unrs/resolver-binding-android-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-x64": "1.11.1",
- "@unrs/resolver-binding-freebsd-x64": "1.11.1",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
- }
- },
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "dependencies": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=4",
- "yarn": "*"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
- "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
- },
- "node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- },
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "node_modules/util/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "dev": true,
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/v8-compile-cache": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
- "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
- "dev": true
- },
- "node_modules/v8-compile-cache-lib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "node_modules/watchpack": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
- "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.0"
- }
- },
- "node_modules/watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "chokidar": "^2.1.8"
- }
- },
- "node_modules/watchpack/node_modules/anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/watchpack/node_modules/binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/watchpack/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/watchpack/node_modules/chokidar": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
- "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.4.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.1.2"
- }
- },
- "node_modules/watchpack/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/watchpack/node_modules/fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "deprecated": "\"Please update to latest v2.3 or v2.2\"",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/watchpack/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/watchpack/node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/watchpack/node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/watchpack/node_modules/readdirp": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
- "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/watchpack/node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/webpack": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
- "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/wasm-edit": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "acorn": "^6.4.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.3.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.3",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.7.4",
- "webpack-sources": "^1.4.1"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=6.11.5"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- },
- "webpack-command": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
- "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "enhanced-resolve": "^4.1.1",
- "findup-sync": "^3.0.0",
- "global-modules": "^2.0.0",
- "import-local": "^2.0.0",
- "interpret": "^1.4.0",
- "loader-utils": "^1.4.0",
- "supports-color": "^6.1.0",
- "v8-compile-cache": "^2.1.1",
- "yargs": "^13.3.2"
- },
- "bin": {
- "webpack-cli": "bin/cli.js"
- },
- "engines": {
- "node": ">=6.11.5"
- },
- "peerDependencies": {
- "webpack": "4.x.x"
- }
- },
- "node_modules/webpack-cli/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "node_modules/webpack/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/webpack/node_modules/enhanced-resolve": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
- "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/webpack/node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/webpack/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "dependencies": {
- "errno": "~0.1.7"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
- "dev": true
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "dependencies": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- }
- },
- "node_modules/yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "node_modules/yargs/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "node_modules/yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true
- },
- "@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- }
- },
- "@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.27.3"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
- "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.5",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz",
- "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "regexpu-core": "^6.3.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-define-polyfill-provider": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz",
- "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "debug": "^4.4.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.22.10"
- },
- "dependencies": {
- "debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "requires": {
- "ms": "^2.1.3"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
- }
- },
- "@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
- "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
- "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-wrap-function": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- }
- },
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true
- },
- "@babel/helper-wrap-function": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz",
- "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.3",
- "@babel/types": "^7.28.2"
- }
- },
- "@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- }
- },
- "@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.28.5"
- }
- },
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz",
- "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.5"
- }
- },
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
- "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
- "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
- "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-transform-optional-chaining": "^7.27.1"
- }
- },
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz",
- "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- }
- },
- "@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
- "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.20.7"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
- "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
- "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
- "requires": {}
- },
- "@babel/plugin-syntax-import-assertions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",
- "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-syntax-import-attributes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
- "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-syntax-unicode-sets-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
- "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
- "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-async-generator-functions": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz",
- "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-remap-async-to-generator": "^7.27.1",
- "@babel/traverse": "^7.28.0"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz",
- "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-remap-async-to-generator": "^7.27.1"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
- "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz",
- "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-class-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",
- "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-class-static-block": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz",
- "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz",
- "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-globals": "^7.28.0",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/traverse": "^7.28.4"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz",
- "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/template": "^7.27.1"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz",
- "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.5"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",
- "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
- "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-dynamic-import": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
- "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-explicit-resource-management": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz",
- "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.0"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz",
- "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-export-namespace-from": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
- "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
- "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
- "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.27.1"
- }
- },
- "@babel/plugin-transform-json-strings": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",
- "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
- "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz",
- "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
- "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
- "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
- "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz",
- "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.5"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
- "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
- "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",
- "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-numeric-separator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz",
- "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-object-rest-spread": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz",
- "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.0",
- "@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/traverse": "^7.28.4"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
- "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1"
- }
- },
- "@babel/plugin-transform-optional-catch-binding": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz",
- "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-optional-chaining": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz",
- "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.27.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz",
- "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-private-methods": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz",
- "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-private-property-in-object": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz",
- "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
- "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz",
- "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-regexp-modifiers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",
- "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
- "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-runtime": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz",
- "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "babel-plugin-polyfill-corejs2": "^0.4.14",
- "babel-plugin-polyfill-corejs3": "^0.13.0",
- "babel-plugin-polyfill-regenerator": "^0.6.5",
- "semver": "^6.3.1"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
- "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz",
- "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
- "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
- "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
- "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
- "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.28.5",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1"
- }
- },
- "@babel/plugin-transform-unicode-escapes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
- "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-unicode-property-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",
- "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
- "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",
- "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- }
- },
- "@babel/polyfill": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
- "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
- "dev": true,
- "requires": {
- "core-js": "^2.6.5",
- "regenerator-runtime": "^0.13.4"
- },
- "dependencies": {
- "core-js": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
- "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
- "dev": true
- }
- }
- },
- "@babel/preset-env": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz",
- "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/compat-data": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-import-assertions": "^7.27.1",
- "@babel/plugin-syntax-import-attributes": "^7.27.1",
- "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.27.1",
- "@babel/plugin-transform-async-generator-functions": "^7.28.0",
- "@babel/plugin-transform-async-to-generator": "^7.27.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
- "@babel/plugin-transform-block-scoping": "^7.28.5",
- "@babel/plugin-transform-class-properties": "^7.27.1",
- "@babel/plugin-transform-class-static-block": "^7.28.3",
- "@babel/plugin-transform-classes": "^7.28.4",
- "@babel/plugin-transform-computed-properties": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.5",
- "@babel/plugin-transform-dotall-regex": "^7.27.1",
- "@babel/plugin-transform-duplicate-keys": "^7.27.1",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1",
- "@babel/plugin-transform-dynamic-import": "^7.27.1",
- "@babel/plugin-transform-explicit-resource-management": "^7.28.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.28.5",
- "@babel/plugin-transform-export-namespace-from": "^7.27.1",
- "@babel/plugin-transform-for-of": "^7.27.1",
- "@babel/plugin-transform-function-name": "^7.27.1",
- "@babel/plugin-transform-json-strings": "^7.27.1",
- "@babel/plugin-transform-literals": "^7.27.1",
- "@babel/plugin-transform-logical-assignment-operators": "^7.28.5",
- "@babel/plugin-transform-member-expression-literals": "^7.27.1",
- "@babel/plugin-transform-modules-amd": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-modules-systemjs": "^7.28.5",
- "@babel/plugin-transform-modules-umd": "^7.27.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1",
- "@babel/plugin-transform-new-target": "^7.27.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
- "@babel/plugin-transform-numeric-separator": "^7.27.1",
- "@babel/plugin-transform-object-rest-spread": "^7.28.4",
- "@babel/plugin-transform-object-super": "^7.27.1",
- "@babel/plugin-transform-optional-catch-binding": "^7.27.1",
- "@babel/plugin-transform-optional-chaining": "^7.28.5",
- "@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/plugin-transform-private-methods": "^7.27.1",
- "@babel/plugin-transform-private-property-in-object": "^7.27.1",
- "@babel/plugin-transform-property-literals": "^7.27.1",
- "@babel/plugin-transform-regenerator": "^7.28.4",
- "@babel/plugin-transform-regexp-modifiers": "^7.27.1",
- "@babel/plugin-transform-reserved-words": "^7.27.1",
- "@babel/plugin-transform-shorthand-properties": "^7.27.1",
- "@babel/plugin-transform-spread": "^7.27.1",
- "@babel/plugin-transform-sticky-regex": "^7.27.1",
- "@babel/plugin-transform-template-literals": "^7.27.1",
- "@babel/plugin-transform-typeof-symbol": "^7.27.1",
- "@babel/plugin-transform-unicode-escapes": "^7.27.1",
- "@babel/plugin-transform-unicode-property-regex": "^7.27.1",
- "@babel/plugin-transform-unicode-regex": "^7.27.1",
- "@babel/plugin-transform-unicode-sets-regex": "^7.27.1",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.14",
- "babel-plugin-polyfill-corejs3": "^0.13.0",
- "babel-plugin-polyfill-regenerator": "^0.6.5",
- "core-js-compat": "^3.43.0",
- "semver": "^6.3.1"
- }
- },
- "@babel/preset-modules": {
- "version": "0.1.6-no-external-plugins",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
- "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- }
- },
- "@babel/preset-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
- "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.28.5"
- }
- },
- "@babel/runtime": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
- "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
- "dev": true
- },
- "@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
- "debug": "^4.3.1"
- }
- },
- "@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- }
- },
- "@colors/colors": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
- "dev": true,
- "optional": true
- },
- "@cspotcode/source-map-support": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "0.3.9"
- },
- "dependencies": {
- "@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- }
- }
- },
- "@cypress/code-coverage": {
- "version": "3.12.4",
- "resolved": "https://registry.npmjs.org/@cypress/code-coverage/-/code-coverage-3.12.4.tgz",
- "integrity": "sha512-5uwsZpUd4iMCHESZLHZmnWhLFws3LKhto1VsdfXTiI8NPlDxpXF93k2ixehG9uQr7SSYEUJmdKipHSQmn4CidQ==",
- "dev": true,
- "requires": {
- "@cypress/webpack-preprocessor": "^6.0.0",
- "chalk": "4.1.2",
- "dayjs": "1.11.10",
- "debug": "4.3.4",
- "execa": "4.1.0",
- "globby": "11.0.4",
- "istanbul-lib-coverage": "3.0.0",
- "js-yaml": "4.1.0",
- "nyc": "15.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "nyc": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
- "dev": true,
- "requires": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "@cypress/request": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz",
- "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~4.0.4",
- "http-signature": "~1.4.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "performance-now": "^2.1.0",
- "qs": "6.14.0",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "^5.0.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^8.3.2"
- },
- "dependencies": {
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true
- }
- }
- },
- "@cypress/webpack-preprocessor": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.0.tgz",
- "integrity": "sha512-1AS1Et5CNPJii0+DdBZBS8e0hlM2BkBNmYRdZO4/16A3KS3em1sjPZtFw7jJF00m6DYAdB9iy6QW/lLZ2bN0gg==",
- "dev": true,
- "requires": {
- "bluebird": "3.7.1",
- "debug": "^4.3.4",
- "lodash": "^4.17.20"
- },
- "dependencies": {
- "bluebird": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
- "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
- "dev": true
- }
- }
- },
- "@cypress/xvfb": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
- "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0",
- "lodash.once": "^4.1.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@emnapi/core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
- "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
- "dev": true,
- "optional": true,
- "requires": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- },
- "dependencies": {
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "optional": true
- }
- }
- },
- "@emnapi/runtime": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
- "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- },
- "dependencies": {
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "optional": true
- }
- }
- },
- "@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- },
- "dependencies": {
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "optional": true
- }
- }
- },
- "@epic-web/invariant": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
- "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
- "dev": true
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
- "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- }
- }
- },
- "@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true
- },
- "@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "dev": true
- },
- "@img/sharp-darwin-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
- "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-darwin-arm64": "1.2.0"
- }
- },
- "@img/sharp-darwin-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
- "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-darwin-x64": "1.2.0"
- }
- },
- "@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
- "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
- "optional": true
- },
- "@img/sharp-libvips-darwin-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
- "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
- "optional": true
- },
- "@img/sharp-libvips-linux-arm": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
- "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
- "optional": true
- },
- "@img/sharp-libvips-linux-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
- "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
- "optional": true
- },
- "@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
- "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
- "optional": true
- },
- "@img/sharp-libvips-linux-s390x": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
- "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
- "optional": true
- },
- "@img/sharp-libvips-linux-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
- "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
- "optional": true
- },
- "@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
- "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
- "optional": true
- },
- "@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
- "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
- "optional": true
- },
- "@img/sharp-linux-arm": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
- "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linux-arm": "1.2.0"
- }
- },
- "@img/sharp-linux-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
- "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linux-arm64": "1.2.0"
- }
- },
- "@img/sharp-linux-ppc64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
- "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linux-ppc64": "1.2.0"
- }
- },
- "@img/sharp-linux-s390x": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
- "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linux-s390x": "1.2.0"
- }
- },
- "@img/sharp-linux-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
- "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linux-x64": "1.2.0"
- }
- },
- "@img/sharp-linuxmusl-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
- "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
- }
- },
- "@img/sharp-linuxmusl-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
- "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
- "optional": true,
- "requires": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
- }
- },
- "@img/sharp-wasm32": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
- "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
- "optional": true,
- "requires": {
- "@emnapi/runtime": "^1.4.4"
- }
- },
- "@img/sharp-win32-arm64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
- "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
- "optional": true
- },
- "@img/sharp-win32-ia32": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
- "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
- "optional": true
- },
- "@img/sharp-win32-x64": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
- "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
- "optional": true
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz",
- "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true
- },
- "@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@napi-rs/wasm-runtime": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
- "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.10.0"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true
- },
- "@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true
- },
- "@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "13.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
- "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.1"
- }
- },
- "@sinonjs/samsam": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz",
- "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.1",
- "type-detect": "^4.1.0"
- },
- "dependencies": {
- "type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true
- }
- }
- },
- "@tsconfig/node10": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
- "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
- "dev": true
- },
- "@tsconfig/node12": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
- "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
- "dev": true
- },
- "@tsconfig/node14": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
- "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
- "dev": true
- },
- "@tsconfig/node16": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
- "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
- "dev": true
- },
- "@tybys/wasm-util": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
- "dev": true,
- "optional": true,
- "requires": {
- "tslib": "^2.4.0"
- },
- "dependencies": {
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "optional": true
- }
- }
- },
- "@types/chai": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
- "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
- "dev": true,
- "requires": {
- "@types/deep-eql": "*",
- "assertion-error": "^2.0.1"
- },
- "dependencies": {
- "assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true
- }
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@types/deep-eql": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
- "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
- "dev": true
- },
- "@types/gl-vec2": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/gl-vec2/-/gl-vec2-1.3.5.tgz",
- "integrity": "sha512-0PK987qf7KYKQrPpRJPI/L7bvP9CgAdxJySEyxyVk+I5e20ci2b1diDLQqa3BXW61FKOA1tswbxkmPDih48jqQ==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true
- },
- "@types/lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
- "dev": true
- },
- "@types/mocha": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
- "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
- "dev": true
- },
- "@types/ndarray": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/@types/ndarray/-/ndarray-1.0.14.tgz",
- "integrity": "sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg==",
- "dev": true
- },
- "@types/node": {
- "version": "24.10.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
- "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "undici-types": "~7.16.0"
- }
- },
- "@types/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
- "dev": true
- },
- "@types/sinon": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-20.0.0.tgz",
- "integrity": "sha512-etYGUC6IEevDGSWvR9WrECRA01ucR2/Oi9XMBUAdV0g4bLkNf4HlZWGiGlDOq5lgwXRwcV+PSeKgFcW4QzzYOg==",
- "dev": true,
- "requires": {
- "@types/sinonjs__fake-timers": "*"
- }
- },
- "@types/sinon-chai": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz",
- "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==",
- "dev": true,
- "requires": {
- "@types/chai": "*",
- "@types/sinon": "*"
- }
- },
- "@types/sinonjs__fake-timers": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
- "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
- "dev": true
- },
- "@types/sizzle": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz",
- "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==",
- "dev": true
- },
- "@types/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
- "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/type-utils": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.3.1",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz",
- "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/utils": "5.62.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
- },
- "semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/parser": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
- "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- }
- },
- "@typescript-eslint/type-utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
- "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true
- }
- }
- },
- "@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- }
- },
- "@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
- "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-android-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
- "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
- "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
- "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
- "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
- "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
- "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
- "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
- "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
- "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
- "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
- "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
- "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
- "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
- "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
- "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- }
- },
- "@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
- "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
- "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
- "dev": true,
- "optional": true
- },
- "@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
- "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
- "dev": true,
- "optional": true
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/floating-point-hex-parser": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-code-frame": "1.9.0",
- "@webassemblyjs/helper-fsm": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true,
- "peer": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
- },
- "aggregate-error": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
- "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "dependencies": {
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- }
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "peer": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true,
- "requires": {}
- },
- "ajv-keywords": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
- "dev": true,
- "requires": {}
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "optional": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "optional": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "append-transform": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
- "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
- "dev": true,
- "requires": {
- "default-require-extensions": "^3.0.0"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
- "dev": true
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- }
- },
- "array-includes": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
- "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- }
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- }
- },
- "array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- }
- },
- "array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- }
- },
- "arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- }
- },
- "asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
- "dev": true
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true
- },
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
- "async": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
- "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
- "dev": true
- },
- "async-each": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
- "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
- "dev": true,
- "optional": true
- },
- "async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "requires": {
- "possible-typed-array-names": "^1.0.0"
- }
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
- "dev": true
- },
- "axe-core": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz",
- "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==",
- "dev": true
- },
- "axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true
- },
- "babel-loader": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
- "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^2.0.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "dependencies": {
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- }
- }
- },
- "babel-plugin-add-module-exports": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz",
- "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==",
- "dev": true
- },
- "babel-plugin-istanbul": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
- "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-instrument": "^6.0.2",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-polyfill-corejs2": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz",
- "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.27.7",
- "@babel/helper-define-polyfill-provider": "^0.6.5",
- "semver": "^6.3.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz",
- "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.6.5",
- "core-js-compat": "^3.43.0"
- }
- },
- "babel-plugin-polyfill-regenerator": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz",
- "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.6.5"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "base64-js": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
- "dev": true
- },
- "baseline-browser-mapping": {
- "version": "2.8.28",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.28.tgz",
- "integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true
- },
- "bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "blob-util": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
- "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- }
- }
- },
- "browserify-sign": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz",
- "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==",
- "dev": true,
- "requires": {
- "bn.js": "^5.2.1",
- "browserify-rsa": "^4.1.0",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.4",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.6",
- "readable-stream": "^3.6.2",
- "safe-buffer": "^5.2.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "browserslist": {
- "version": "4.28.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
- "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "baseline-browser-mapping": "^2.8.25",
- "caniuse-lite": "^1.0.30001754",
- "electron-to-chromium": "^1.5.249",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.1.4"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "cachedir": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
- "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
- "dev": true
- },
- "caching-transform": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
- "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
- "dev": true,
- "requires": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- },
- "dependencies": {
- "hasha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
- "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
- "dev": true,
- "requires": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- }
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- }
- }
- },
- "call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "requires": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- }
- },
- "call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- }
- },
- "call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "requires": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001755",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz",
- "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chai": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
- "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.1.0"
- },
- "dependencies": {
- "type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true
- }
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.2"
- }
- },
- "check-more-types": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
- "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
- "dev": true
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- },
- "dependencies": {
- "fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- }
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "ci-info": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
- "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
- "dev": true
- },
- "cipher-base": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz",
- "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.2"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-table3": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
- "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
- "dev": true,
- "requires": {
- "@colors/colors": "1.5.0",
- "string-width": "^4.2.0"
- }
- },
- "cli-truncate": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
- "dev": true,
- "requires": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- },
- "dependencies": {
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "devOptional": true,
- "requires": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "dependencies": {
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true
- }
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "devOptional": true
- },
- "color-string": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "devOptional": true,
- "requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "colorette": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true
- },
- "common-tags": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
- "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "confusing-browser-globals": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
- "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
- "dev": true
- },
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-js": {
- "version": "3.46.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz",
- "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==",
- "dev": true
- },
- "core-js-compat": {
- "version": "3.46.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz",
- "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==",
- "dev": true,
- "requires": {
- "browserslist": "^4.26.3"
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "create-ecdh": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
- "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
- },
- "cross-env": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
- "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
- "dev": true,
- "requires": {
- "@epic-web/invariant": "^1.0.0",
- "cross-spawn": "^7.0.6"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "cwise-compiler": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
- "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
- "dev": true,
- "requires": {
- "uniq": "^1.0.0"
- }
- },
- "cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
- "dev": true
- },
- "cypress": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz",
- "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@cypress/request": "^3.0.6",
- "@cypress/xvfb": "^1.2.4",
- "@types/sinonjs__fake-timers": "8.1.1",
- "@types/sizzle": "^2.3.2",
- "arch": "^2.2.0",
- "blob-util": "^2.0.2",
- "bluebird": "^3.7.2",
- "buffer": "^5.7.1",
- "cachedir": "^2.3.0",
- "chalk": "^4.1.0",
- "check-more-types": "^2.24.0",
- "ci-info": "^4.0.0",
- "cli-cursor": "^3.1.0",
- "cli-table3": "~0.6.1",
- "commander": "^6.2.1",
- "common-tags": "^1.8.0",
- "dayjs": "^1.10.4",
- "debug": "^4.3.4",
- "enquirer": "^2.3.6",
- "eventemitter2": "6.4.7",
- "execa": "4.1.0",
- "executable": "^4.1.1",
- "extract-zip": "2.0.1",
- "figures": "^3.2.0",
- "fs-extra": "^9.1.0",
- "getos": "^3.2.1",
- "is-installed-globally": "~0.4.0",
- "lazy-ass": "^1.6.0",
- "listr2": "^3.8.3",
- "lodash": "^4.17.21",
- "log-symbols": "^4.0.0",
- "minimist": "1.2.8",
- "ospath": "^1.2.2",
- "pretty-bytes": "^5.6.0",
- "process": "^0.11.10",
- "proxy-from-env": "1.0.0",
- "request-progress": "^3.0.0",
- "semver": "^7.5.3",
- "supports-color": "^8.1.1",
- "tmp": "~0.2.3",
- "tree-kill": "1.2.2",
- "untildify": "^4.0.0",
- "yauzl": "^2.10.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- }
- },
- "data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- }
- },
- "data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- }
- },
- "dayjs": {
- "version": "1.11.10",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
- "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==",
- "dev": true
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
- "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "default-require-extensions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
- "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
- "dev": true,
- "requires": {
- "strip-bom": "^4.0.0"
- },
- "dependencies": {
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- }
- }
- },
- "define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- }
- },
- "define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true
- },
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
- "devOptional": true
- },
- "diff": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
- "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
- "dev": true
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "requires": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- }
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "electron-to-chromium": {
- "version": "1.5.254",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.254.tgz",
- "integrity": "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg==",
- "dev": true
- },
- "elliptic": {
- "version": "6.6.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
- "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enhanced-resolve": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
- "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- }
- }
- },
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "es-abstract": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- }
- },
- "es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true
- },
- "es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true
- },
- "es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0"
- }
- },
- "es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- }
- },
- "es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.2"
- }
- },
- "es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "requires": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- }
- },
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
- },
- "escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.1",
- "@humanwhocodes/config-array": "^0.13.0",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "eslint-config-airbnb-base": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
- "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
- "dev": true,
- "requires": {
- "confusing-browser-globals": "^1.0.10",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5",
- "semver": "^6.3.0"
- }
- },
- "eslint-config-airbnb-typescript": {
- "version": "18.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz",
- "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==",
- "dev": true,
- "requires": {
- "eslint-config-airbnb-base": "^15.0.0"
- }
- },
- "eslint-config-airbnb-typescript-base": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript-base/-/eslint-config-airbnb-typescript-base-6.0.1.tgz",
- "integrity": "sha512-aVpy/QP1CEjymWPf66EJJt05M1d+CV9WZnOWDLYAKA1h+81seayoIRZoaDQqUJeQdwnlUWH57MvhoL8mbCbmaQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/eslint-plugin": "^7.13.1",
- "@typescript-eslint/parser": "^7.13.1",
- "confusing-browser-globals": "^1.0.11",
- "eslint": "^8.57.0",
- "eslint-import-resolver-typescript": "^3.6.1",
- "eslint-import-resolver-webpack": "^0.13.8",
- "eslint-plugin-import": "^2.29.1",
- "eslint-plugin-typescript-sort-keys": "^3.2.0",
- "typescript": "^5.4.5"
- },
- "dependencies": {
- "debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "requires": {
- "ms": "^2.1.3"
- }
- },
- "eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "requires": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
- }
- },
- "eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "requires": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "eslint-import-resolver-webpack": {
- "version": "0.13.10",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.10.tgz",
- "integrity": "sha512-ciVTEg7sA56wRMR772PyjcBRmyBMLS46xgzQZqt6cWBEKc7cK65ZSSLCTLVRu2gGtKyXUb5stwf4xxLBfERLFA==",
- "dev": true,
- "requires": {
- "debug": "^3.2.7",
- "enhanced-resolve": "^0.9.1",
- "find-root": "^1.1.0",
- "hasown": "^2.0.2",
- "interpret": "^1.4.0",
- "is-core-module": "^2.15.1",
- "is-regex": "^1.2.0",
- "lodash": "^4.17.21",
- "resolve": "^2.0.0-next.5",
- "semver": "^5.7.2"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "enhanced-resolve": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
- "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.2.0",
- "tapable": "^0.1.8"
- }
- },
- "memory-fs": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
- "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==",
- "dev": true
- },
- "resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "tapable": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
- "dev": true
- }
- }
- },
- "eslint-module-utils": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
- "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
- "dev": true,
- "requires": {
- "debug": "^3.2.7"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "eslint-plugin-import": {
- "version": "2.32.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
- "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.9",
- "array.prototype.findlastindex": "^1.2.6",
- "array.prototype.flat": "^1.3.3",
- "array.prototype.flatmap": "^1.3.3",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.1",
- "hasown": "^2.0.2",
- "is-core-module": "^2.16.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.1",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.9",
- "tsconfig-paths": "^3.15.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "1.2.8"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "requires": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "1.2.8",
- "strip-bom": "^3.0.0"
- }
- }
- }
- },
- "eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "requires": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "eslint-plugin-typescript-sort-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-typescript-sort-keys/-/eslint-plugin-typescript-sort-keys-3.3.0.tgz",
- "integrity": "sha512-bRW3Rc/VNdrSP9OoY5wgjjaXCOOkZKpzvl/Mk6l8Sg8CMehVIcg9K4y33l+ZcZiknpl0aR6rKusxuCJNGZWmVw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/experimental-utils": "^5.0.0",
- "json-schema": "^0.4.0",
- "natural-compare-lite": "^1.4.0"
- }
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true
- },
- "espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "eventemitter2": {
- "version": "6.4.7",
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
- "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
- "dev": true
- },
- "events": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
- "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
- "dev": true
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "requires": {
- "pify": "^2.2.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "fastq": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
- "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
- },
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "optional": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "dependencies": {
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- }
- }
- },
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "requires": {
- "is-callable": "^1.2.7"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "foreground-child": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
- "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^3.0.2"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fromentries": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz",
- "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==",
- "dev": true
- },
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true
- },
- "function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- }
- },
- "functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true
- },
- "generator-function": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
- "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "requires": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- }
- },
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
- },
- "get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "requires": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- }
- },
- "get-tsconfig": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
- "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
- "dev": true,
- "requires": {
- "resolve-pkg-maps": "^1.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "getos": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
- "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
- "dev": true,
- "requires": {
- "async": "^3.2.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "gl-matrix": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz",
- "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ=="
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
- "dev": true,
- "requires": {
- "ini": "2.0.0"
- },
- "dependencies": {
- "ini": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
- "dev": true
- }
- }
- },
- "global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "requires": {
- "global-prefix": "^3.0.0"
- },
- "dependencies": {
- "global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- }
- }
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- },
- "globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- }
- },
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- }
- },
- "gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true
- },
- "graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "requires": {
- "es-define-property": "^1.0.0"
- }
- },
- "has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "requires": {
- "dunder-proto": "^1.0.0"
- }
- },
- "has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true
- },
- "has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.3"
- }
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz",
- "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^2.3.8",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.1"
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "http-signature": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
- "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^2.0.2",
- "sshpk": "^1.18.0"
- }
- },
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true
- },
- "ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- }
- }
- },
- "import-local": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
- "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
- "dev": true,
- "requires": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
- "dev": true
- },
- "internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- }
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "iota-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
- "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- }
- },
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "devOptional": true
- },
- "is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "requires": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- }
- },
- "is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "requires": {
- "has-bigints": "^1.0.2"
- }
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "requires": {
- "semver": "^7.7.1"
- },
- "dependencies": {
- "semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true
- }
- }
- },
- "is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- }
- },
- "is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-generator-function": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
- "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.4",
- "generator-function": "^2.0.0",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- }
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
- "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
- "dev": true,
- "requires": {
- "global-dirs": "^3.0.0",
- "is-path-inside": "^3.0.2"
- }
- },
- "is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true
- },
- "is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- }
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- }
- },
- "is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true
- },
- "is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3"
- }
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- }
- },
- "is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- }
- },
- "is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "requires": {
- "which-typed-array": "^1.1.16"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true
- },
- "is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3"
- }
- },
- "is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- }
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true
- },
- "istanbul-lib-hook": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
- "dev": true,
- "requires": {
- "append-transform": "^2.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
- },
- "dependencies": {
- "istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true
- },
- "semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true
- }
- }
- },
- "istanbul-lib-processinfo": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
- "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^3.3.3"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
- "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
- "dev": true
- },
- "jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "jsprim": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- }
- },
- "jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "requires": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true
- },
- "language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "requires": {
- "language-subtag-registry": "^0.3.20"
- }
- },
- "lazy-ass": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
- "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "listr2": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
- "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
- "dev": true,
- "requires": {
- "cli-truncate": "^2.1.0",
- "colorette": "^2.0.16",
- "log-update": "^4.0.0",
- "p-map": "^4.0.0",
- "rfdc": "^1.3.0",
- "rxjs": "^7.5.1",
- "through": "^2.3.8",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "1.2.8"
- }
- }
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "log-update": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.3.0",
- "cli-cursor": "^3.1.0",
- "slice-ansi": "^4.0.0",
- "wrap-ansi": "^6.2.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.1"
- }
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
- },
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "1.2.8"
- }
- },
- "mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
- "dev": true,
- "requires": {
- "browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
- "growl": "1.10.5",
- "he": "1.1.1",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "supports-color": "5.4.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
- "dev": true,
- "requires": {
- "minimist": "1.2.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nan": {
- "version": "2.23.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.1.tgz",
- "integrity": "sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==",
- "dev": true,
- "optional": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "napi-postinstall": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
- "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "natural-compare-lite": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true
- },
- "ndarray": {
- "version": "1.0.19",
- "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz",
- "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==",
- "dev": true,
- "requires": {
- "iota-array": "^1.0.0",
- "is-buffer": "^1.0.2"
- }
- },
- "ndarray-linear-interpolate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz",
- "integrity": "sha1-eLySuFuavBW25n7mWCj54hN65ys=",
- "dev": true
- },
- "ndarray-ops": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz",
- "integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==",
- "dev": true,
- "requires": {
- "cwise-compiler": "^1.0.0"
- }
- },
- "ndarray-pixels": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ndarray-pixels/-/ndarray-pixels-5.0.1.tgz",
- "integrity": "sha512-IBtrpefpqlI8SPDCGjXk4v5NV5z7r3JSuCbfuEEXaM0vrOJtNGgYUa4C3Lt5H+qWdYF4BCPVFsnXhNC7QvZwkw==",
- "dev": true,
- "requires": {
- "@types/ndarray": "^1.0.14",
- "ndarray": "^1.0.19",
- "ndarray-ops": "^1.2.2",
- "sharp": "^0.34.0"
- }
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
- }
- },
- "node-preload": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
- "dev": true,
- "requires": {
- "process-on-spawn": "^1.0.0"
- }
- },
- "node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
- "dev": true
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "optional": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- }
- }
- },
- "nyc": {
- "version": "17.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz",
- "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==",
- "dev": true,
- "requires": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^3.3.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.2",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- }
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "yargs": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
- "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.1"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- }
- },
- "object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- }
- },
- "object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "requires": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- }
- },
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "ospath": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
- "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
- "dev": true
- },
- "own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-hash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
- "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- },
- "dependencies": {
- "hasha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
- "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
- "dev": true,
- "requires": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- }
- }
- }
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
- },
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true,
- "optional": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "pbkdf2": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz",
- "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==",
- "dev": true,
- "requires": {
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "ripemd160": "^2.0.3",
- "safe-buffer": "^5.2.1",
- "sha.js": "^2.4.12",
- "to-buffer": "^1.2.1"
- }
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true,
- "optional": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- }
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "pretty-bytes": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
- "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "process-on-spawn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
- "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
- "dev": true,
- "requires": {
- "fromentries": "^1.2.0"
- }
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "proxy-from-env": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
- "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
- "dev": true
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "dev": true,
- "requires": {
- "side-channel": "^1.1.0"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
- },
- "reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true
- },
- "regenerate-unicode-properties": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
- "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.10",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
- "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==",
- "dev": true
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- }
- },
- "regexpu-core": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
- "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.2.2",
- "regjsgen": "^0.8.0",
- "regjsparser": "^0.13.0",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.2.1"
- }
- },
- "regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
- "dev": true
- },
- "regjsparser": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz",
- "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==",
- "dev": true,
- "requires": {
- "jsesc": "~3.1.0"
- }
- },
- "release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true,
- "optional": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "request-progress": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
- "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
- "dev": true,
- "requires": {
- "throttleit": "^1.0.0"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-cwd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
- "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
- "dev": true,
- "requires": {
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- }
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- },
- "dependencies": {
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- }
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
- "dev": true
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "ripemd160": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz",
- "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.1.2",
- "inherits": "^2.0.4"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "rxjs": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
- "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
- "dev": true,
- "requires": {
- "tslib": "^2.1.0"
- },
- "dependencies": {
- "tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
- "dev": true
- }
- }
- },
- "safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- }
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "schema-utils": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz",
- "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.0",
- "ajv-keywords": "^3.4.1"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- }
- },
- "set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- }
- },
- "set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "requires": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- }
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "sha.js": {
- "version": "2.4.12",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
- "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1",
- "to-buffer": "^1.2.0"
- }
- },
- "sharp": {
- "version": "0.34.3",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz",
- "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==",
- "devOptional": true,
- "requires": {
- "@img/sharp-darwin-arm64": "0.34.3",
- "@img/sharp-darwin-x64": "0.34.3",
- "@img/sharp-libvips-darwin-arm64": "1.2.0",
- "@img/sharp-libvips-darwin-x64": "1.2.0",
- "@img/sharp-libvips-linux-arm": "1.2.0",
- "@img/sharp-libvips-linux-arm64": "1.2.0",
- "@img/sharp-libvips-linux-ppc64": "1.2.0",
- "@img/sharp-libvips-linux-s390x": "1.2.0",
- "@img/sharp-libvips-linux-x64": "1.2.0",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.0",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.0",
- "@img/sharp-linux-arm": "0.34.3",
- "@img/sharp-linux-arm64": "0.34.3",
- "@img/sharp-linux-ppc64": "0.34.3",
- "@img/sharp-linux-s390x": "0.34.3",
- "@img/sharp-linux-x64": "0.34.3",
- "@img/sharp-linuxmusl-arm64": "0.34.3",
- "@img/sharp-linuxmusl-x64": "0.34.3",
- "@img/sharp-wasm32": "0.34.3",
- "@img/sharp-win32-arm64": "0.34.3",
- "@img/sharp-win32-ia32": "0.34.3",
- "@img/sharp-win32-x64": "0.34.3",
- "color": "^4.2.3",
- "detect-libc": "^2.0.4",
- "semver": "^7.7.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "devOptional": true
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- }
- },
- "side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- }
- },
- "side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- }
- },
- "side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- }
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
- "dev": true
- },
- "simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "devOptional": true,
- "requires": {
- "is-arrayish": "^0.3.1"
- }
- },
- "sinon": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz",
- "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.1",
- "@sinonjs/fake-timers": "^13.0.5",
- "@sinonjs/samsam": "^8.0.1",
- "diff": "^7.0.0",
- "supports-color": "^7.2.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "sinon-chai": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz",
- "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==",
- "dev": true,
- "requires": {}
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "slice-ansi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- }
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-loader": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.1.tgz",
- "integrity": "sha512-m2HjSWP2R1yR9P31e4+ciGHFOPvW6GmqHgZkneOkrME2VvWysXTGi4o0yS28iKWWP3vAUmAoa+3x5ZRI2BIX6A==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "iconv-lite": "^0.6.2",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "source-map": "^0.6.1",
- "whatwg-mimetype": "^2.3.0"
- },
- "dependencies": {
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "iconv-lite": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
- "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "schema-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
- "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.6",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spawn-wrap": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
- "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
- "dev": true,
- "requires": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- },
- "dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
- "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "stop-iteration-iterator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
- "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- }
- },
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- }
- },
- "string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true
- }
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
- },
- "tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "dev": true
- },
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- }
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^4.0.0",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- },
- "dependencies": {
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "throttleit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
- "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "timers-browserify": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
- "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
- "dev": true,
- "requires": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "dependencies": {
- "fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "requires": {}
- },
- "picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "peer": true
- }
- }
- },
- "tldts": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
- "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
- "dev": true,
- "requires": {
- "tldts-core": "^6.1.86"
- }
- },
- "tldts-core": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
- "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
- "dev": true
- },
- "tmp": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
- "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
- "dev": true
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "to-buffer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
- "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
- "dev": true,
- "requires": {
- "isarray": "^2.0.5",
- "safe-buffer": "^5.2.1",
- "typed-array-buffer": "^1.0.3"
- }
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "dev": true,
- "requires": {
- "tldts": "^6.1.32"
- }
- },
- "tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true
- },
- "ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
- "dev": true,
- "requires": {}
- },
- "ts-mocha": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-11.1.0.tgz",
- "integrity": "sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==",
- "dev": true,
- "requires": {}
- },
- "ts-node": {
- "version": "10.9.2",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
- "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@cspotcode/source-map-support": "^0.8.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.1",
- "yn": "3.1.1"
- },
- "dependencies": {
- "acorn-walk": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz",
- "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==",
- "dev": true
- },
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- }
- },
- "typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- }
- },
- "typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- }
- },
- "typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "dev": true,
- "peer": true
- },
- "unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- }
- },
- "undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
- "dev": true
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
- "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
- "dev": true
- },
- "unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
- "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
- "dev": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
- "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
- "dev": true
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- },
- "unrs-resolver": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
- "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
- "dev": true,
- "requires": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
- "@unrs/resolver-binding-android-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-x64": "1.11.1",
- "@unrs/resolver-binding-freebsd-x64": "1.11.1",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.1",
- "napi-postinstall": "^0.3.0"
- }
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
- }
- },
- "untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "optional": true
- },
- "update-browserslist-db": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
- "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
- "dev": true,
- "requires": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- }
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
- "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
- "dev": true
- },
- "v8-compile-cache-lib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "watchpack": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
- "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.0"
- },
- "dependencies": {
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "optional": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
- "dev": true,
- "optional": true
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "optional": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chokidar": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
- "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.4.0"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "dev": true,
- "optional": true
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "optional": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "optional": true
- },
- "readdirp": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
- "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "requires": {
- "chokidar": "^2.1.8"
- }
- },
- "webpack": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
- "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/wasm-edit": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "acorn": "^6.4.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.3.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.3",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.7.4",
- "webpack-sources": "^1.4.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
- "enhanced-resolve": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
- "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- }
- }
- },
- "webpack-cli": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
- "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "enhanced-resolve": "^4.1.1",
- "findup-sync": "^3.0.0",
- "global-modules": "^2.0.0",
- "import-local": "^2.0.0",
- "interpret": "^1.4.0",
- "loader-utils": "^1.4.0",
- "supports-color": "^6.1.0",
- "v8-compile-cache": "^2.1.1",
- "yargs": "^13.3.2"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "requires": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- }
- },
- "which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "requires": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- }
- },
- "which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "requires": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- }
- },
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "dependencies": {
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
diff --git a/quagga2/quagga2-1.12.1/package.json b/quagga2/quagga2-1.12.1/package.json
deleted file mode 100644
index 9d97863..0000000
--- a/quagga2/quagga2-1.12.1/package.json
+++ /dev/null
@@ -1,206 +0,0 @@
-{
- "name": "@ericblade/quagga2",
- "version": "1.10.1",
- "description": "An advanced barcode-scanner written in JavaScript",
- "main": "lib/quagga.js",
- "types": "type-definitions/quagga.d.ts",
- "browser": "dist/quagga.min.js",
- "optionalDependencies": {
- "fsevents": "2.3.3",
- "ndarray-pixels": "^5.0.1",
- "sharp": "^0.34.0"
- },
- "devDependencies": {
- "@babel/core": "^7.28.5",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
- "@babel/plugin-proposal-optional-chaining": "^7.21.0",
- "@babel/plugin-transform-runtime": "^7.28.5",
- "@babel/polyfill": "^7.12.1",
- "@babel/preset-env": "^7.28.5",
- "@babel/preset-typescript": "^7.28.5",
- "@babel/runtime": "^7.28.4",
- "@cypress/code-coverage": "^3.12.4",
- "@cypress/webpack-preprocessor": "6.0.0",
- "@types/chai": "^5.2.3",
- "@types/gl-vec2": "^1.3.5",
- "@types/lodash": "^4.17.20",
- "@types/mocha": "^5.2.7",
- "@types/node": "^24.10.1",
- "@types/sinon": "^20.0.0",
- "@types/sinon-chai": "^3.2.12",
- "@typescript-eslint/eslint-plugin": "^7.18.0",
- "@typescript-eslint/parser": "^7.18.0",
- "babel-loader": "^8.2.5",
- "babel-plugin-add-module-exports": "^1.0.4",
- "babel-plugin-istanbul": "^7.0.1",
- "chai": "^4.3.10",
- "core-js": "^3.46.0",
- "cross-env": "^10.1.0",
- "cypress": "^13.17.0",
- "eslint": "^8.57.1",
- "eslint-config-airbnb-base": "^15.0.0",
- "eslint-config-airbnb-typescript": "^18.0.0",
- "eslint-config-airbnb-typescript-base": "^6.0.1",
- "eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jsx-a11y": "^6.10.2",
- "eslint-plugin-typescript-sort-keys": "^3.3.0",
- "lodash": "^4.17.21",
- "mocha": "^5.2.0",
- "ndarray": "^1.0.19",
- "ndarray-linear-interpolate": "^1.0.0",
- "ndarray-pixels": "^5.0.1",
- "nyc": "^17.1.0",
- "sinon": "^21.0.0",
- "sinon-chai": "^3.7.0",
- "source-map-loader": "^1.1.1",
- "ts-mocha": "^11.1.0",
- "ts-node": "^10.9.2",
- "typescript": "^5.9.3",
- "webpack": "^4.44.2",
- "webpack-cli": "^3.3.12"
- },
- "overrides": {
- "minimist": "1.2.8"
- },
- "directories": {
- "doc": "docs",
- "example": "docs/examples"
- },
- "scripts": {
- "check-types": "tsc",
- "precoverage": "npx rimraf .nyc_output coverage",
- "coverage:node": "// DOES NOT WORK YET // npx cross-env NODE_ENV=test BUILD_ENV=development nyc --no-clean ts-mocha -p test/tsconfig.json src/**/test/node/*.spec.* src/**/test/*.spec.*",
- "coverage": "npm run cypress:run",
- "server:examples": "npx http-server docs/examples -p 8080",
- "cypress:open": "npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress open --env BUILD_ENV=development --browser electron --config specPattern='cypress/e2e/**/!(browser-bundle).cy.ts'",
- "cypress:open:e2e": "npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress open --e2e --env BUILD_ENV=development --config specPattern=\"cypress/e2e/examples.cy.ts\" --browser electron",
- "cypress:run": "npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress run --env BUILD_ENV=development --config specPattern='cypress/e2e/**/!(browser-bundle).cy.ts'",
- "cypress:run:e2e": "npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress run --env BUILD_ENV=development --spec \"cypress/e2e/examples.cy.ts\"",
- "test:e2e": "npx start-server-and-test server:examples http://localhost:8080 cypress:run:e2e",
- "test:e2e:open": "npx start-server-and-test server:examples http://localhost:8080 cypress:open:e2e",
- "test:browser-specific": "NOT WORKING -- something like npx cypress run --config testFiles=[browser]",
- "test:browser-universal": "NOT WORKING -- something like npx cypress run --config testFiles=[universal]",
- "test:browser-all": "npm run cypress:run",
- "test:import": "mocha test/test-import.mjs",
- "test:node": "npx cross-env NODE_ENV=test ts-mocha -p test/tsconfig.json src/**/test/node/*.spec.* src/**/test/*.spec.* test/integration/**/*.spec.ts",
- "test:require": "mocha test/test-require",
- "test:node-bundle": "npm run build:node && npx cross-env NODE_ENV=test mocha test/node-bundle.spec.js",
- "test:browser-bundle": "npm run build:prod && npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress run --spec cypress/e2e/browser-bundle.cy.ts",
- "test:module": "npm run test:require && npm run test:import",
- "test": "npx start-server-and-test server:examples http://localhost:8080 cypress:run && npx cross-env NODE_ENV=test BUILD_ENV=development ts-mocha -p test/tsconfig.json src/**/test/node/*.spec.* src/**/test/*.spec.* test/integration/**/*.spec.ts",
- "test:parallel": "npx concurrently --kill-others-on-fail --success=all -n e2e,node -c green,blue \"npx start-server-and-test server:examples http://localhost:8080 cypress:run\" \"npm run test:node\"",
- "build-and-test": "npm run build && npm run test",
- "build:dev": "npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider webpack --config configs/webpack.config.js",
- "build:prod": "npx cross-env NODE_ENV=production BUILD_ENV=production NODE_OPTIONS=--openssl-legacy-provider webpack --config configs/webpack.config.min.js",
- "build:node": "npx cross-env NODE_ENV=production BABEL_ENV=commonjs BUILD_ENV=node NODE_OPTIONS=--openssl-legacy-provider webpack --config configs/webpack.node.config.js",
- "build": "npx cross-env NODE_OPTIONS=--openssl-legacy-provider npm run build-old && npm run copy-dist-examples",
- "copy-dist-examples": "npx cpx \"dist/*\" \"docs/examples/dist\"",
- "build-old": "npm run check-types && npm run build:dev && npm run build:prod && npm run build:node",
- "watch": "npx cross-env BUILD_ENV=development webpack --watch",
- "lint": "eslint src",
- "check-updates": "npx npm-check-updates --peer --loglevel verbose",
- "upgrade-deps": "npx npm-check-updates --peer --doctor --doctorTest \"npm run build-and-test\" --loglevel verbose"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/ericblade/quagga2.git"
- },
- "bugs": {
- "url": "https://github.com/ericblade/quagga2/issues"
- },
- "keywords": [
- "quagga2",
- "quagga",
- "quaggajs",
- "barcode",
- "ean",
- "code128",
- "code39",
- "codabar",
- "i2of5",
- "upc",
- "getUserMedia",
- "imageprocessing"
- ],
- "author": "Eric Blade ",
- "contributors": [
- "Christoph Oberhofer ",
- "Lindsey Simon ",
- "dgreif ",
- "David Madner ",
- "Mario Zupan ",
- "Edson Alves ",
- "TomÃĄÅĄ HÃŧbelbauer ",
- "Dan Manastireanu ",
- "E020873 ",
- "JosÊ Pedro Silva ",
- "Lasse Rafn ",
- "Laszlo Radics ",
- "Martin Tillmann ",
- "Matthias Jauernig ",
- "Matthias Riegler ",
- "Pierre-Louis Peeters ",
- "Rudolph Gottesheim ",
- "Sean Hussey ",
- "Thomas ",
- "jclarkin ",
- "kieat ",
- "Esteban Morales ",
- "Ward Lootens ",
- "Taylor Southwick ",
- "Youri Westerman ",
- "Stefano CalÃŦ ",
- "Tony Brix ",
- "Alex Howes ",
- "Sudham Jayanthi ",
- "Ben Khoo ",
- "Andy Edinborough ",
- "Claudio Cocciarelli ",
- "Hadrien Foucault ",
- "ghevge "
- ],
- "license": "MIT",
- "engines": {
- "node": ">= 20.0"
- },
- "nyc": {
- "include": [
- "src/**/*.ts",
- "src/**/*.tsx",
- "src/**/*.js",
- "src/**/*.jsx"
- ],
- "exclude": [
- "**/*.spec.*"
- ],
- "all": true,
- "extension": [
- ".js",
- ".jsx",
- ".ts",
- ".tsx"
- ],
- "require": [
- "ts-node/register",
- "babel-register"
- ],
- "reporter": [
- "text-summary",
- "html"
- ],
- "sourceMap": false,
- "instrument": false
- },
- "@rollingversions": {
- "versioningMode": "ALWAYS_INCREASING",
- "versioning": "ALWAYS_INCREASING"
- },
- "publishConfig": {
- "access": "public"
- },
- "dependencies": {
- "gl-matrix": "^3.4.4"
- }
-}
diff --git a/quagga2/quagga2-1.12.1/server.pem b/quagga2/quagga2-1.12.1/server.pem
deleted file mode 100644
index 04fd185..0000000
--- a/quagga2/quagga2-1.12.1/server.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC9ORap3LvRegtrhRc8dLdH9Bp2QokcKEsWbtvyhtjisRRm2slK
-A6Q11McB/YTb7oImFfNaCX+7vdM1oVXVLJ0ekQaNljXG5Dy7DXEcT1V6gpN4xmZJ
-8f/KZ45VBINN0Ha74L7nS4kgImh5yvNolNr4IdlSjGf09kciFy8S3kPlGQIDAQAB
-AoGAYDlaxBCC1liY3Bl3IoA7//QrTL4zGUWIQaUoZmGag1UHifJycBf/9nv4o5N3
-b5wPRSzebofsE93JPTmI+3nPf62k5rS2xOo8swwOZc+f5/v0EnUNixD7P0jBiLVR
-B8kbMvNdNn33HuynW1/MSBFE0cfeDH2i8SVl+Z+fHYIUW10CQQD0yWB8xeM8AxYB
-/ZZWClem6gf1lQAYLzid3x51pkLqRFpX+rG251cSBUouE+kVO14j2xrBqCyyOwNu
-17eazy3DAkEAxeQdWP9b11ihKOf/kjXiczltLnBsotn6K9EEAe0QuH/6iXLm86mL
-ZiQe+TrY1GWbK3ns0sfXgNJ2aeaRkeZn8wJAWF5WedTKisCmckOEwTzslbJI+0w2
-A4UQkFWa3mgOIhpY7wfunhP35+aG+AlyDJspChKwHxdCQ3lwbNRtUPLYFwJBAK8G
-9QIbUbLlPB1/HOfH6xM4rp3NZ/idzQxmISJG+GwHHaPmUekfgyEDP7X2W4N4nsbU
-XyeLA8t32q4N9aDS5gsCQDHqhsXqnY6e4IEZrvf90l2V1PpnTKfEl/F5wye3g69G
-JN57scVUBHP/KKoyfge0fytWiQN/56KvWH+G5+N/JyA=
------END RSA PRIVATE KEY-----
------BEGIN CERTIFICATE-----
-MIIC2zCCAkSgAwIBAgIJALUDN95Or7XlMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
-BAYTAkFUMQ8wDQYDVQQIEwZTdHlyaWExDTALBgNVBAcTBEdyYXoxETAPBgNVBAoT
-CFF1YWdnYUpTMREwDwYDVQQDEwhxdWFnZ2FqczAeFw0xNzAxMDgxNjI5MjhaFw0x
-ODAxMDgxNjI5MjhaMFMxCzAJBgNVBAYTAkFUMQ8wDQYDVQQIEwZTdHlyaWExDTAL
-BgNVBAcTBEdyYXoxETAPBgNVBAoTCFF1YWdnYUpTMREwDwYDVQQDEwhxdWFnZ2Fq
-czCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvTkWqdy70XoLa4UXPHS3R/Qa
-dkKJHChLFm7b8obY4rEUZtrJSgOkNdTHAf2E2+6CJhXzWgl/u73TNaFV1SydHpEG
-jZY1xuQ8uw1xHE9VeoKTeMZmSfH/ymeOVQSDTdB2u+C+50uJICJoecrzaJTa+CHZ
-Uoxn9PZHIhcvEt5D5RkCAwEAAaOBtjCBszAdBgNVHQ4EFgQUYm5+uJVOOGiYa+Vx
-2o++VHyWkwIwgYMGA1UdIwR8MHqAFGJufriVTjhomGvlcdqPvlR8lpMCoVekVTBT
-MQswCQYDVQQGEwJBVDEPMA0GA1UECBMGU3R5cmlhMQ0wCwYDVQQHEwRHcmF6MREw
-DwYDVQQKEwhRdWFnZ2FKUzERMA8GA1UEAxMIcXVhZ2dhanOCCQC1AzfeTq+15TAM
-BgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACyzC/CKL1mgTuNgFDuUf6u+
-YMnqlc9wcnEaFuvXnkSh6fT+qMZm188C/tlZwcWTrGmoCM0K6mX1TpHOjm8vbeXZ
-diezAVGIVN3VoHqm6yJldI2rgFI9r5BfwAWYC8XNjqnT3U6cm4k8iC7jmLC+dT9r
-Ysx2ucAF6lNHayekRmNq
------END CERTIFICATE-----
diff --git a/quagga2/quagga2-1.12.1/simple-https-server.py b/quagga2/quagga2-1.12.1/simple-https-server.py
deleted file mode 100644
index bc2298a..0000000
--- a/quagga2/quagga2-1.12.1/simple-https-server.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
-# generate server.xml with the following command:
-# openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
-# run as follows:
-# python simple-https-server.py
-# then in your browser, visit:
-# https://localhost:4443
-
-import BaseHTTPServer, SimpleHTTPServer
-import ssl
-import sys, getopt
-
-host = 'localhost'
-port = 4443
-try:
- opts, args = getopt.getopt(sys.argv[1:],"",["host=", "port="])
-except getopt.GetoptError:
- print 'simple-https-server.py --host --port '
- sys.exit(2)
-for opt, arg in opts:
- if opt in ("--host"):
- host = arg
- elif opt in ("--port"):
- port = int(arg)
-print 'host is ', host
-print 'port is ', port
-
-httpd = BaseHTTPServer.HTTPServer((host, port), SimpleHTTPServer.SimpleHTTPRequestHandler)
-httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./server.pem', server_side=True, ssl_version=ssl.PROTOCOL_TLSv1_2)
-httpd.serve_forever()
diff --git a/quagga2/quagga2-1.12.1/src/QuaggaContext.ts b/quagga2/quagga2-1.12.1/src/QuaggaContext.ts
deleted file mode 100644
index a7cd5c8..0000000
--- a/quagga2/quagga2-1.12.1/src/QuaggaContext.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { QuaggaJSConfigObject } from "../type-definitions/quagga";
-import ImageWrapper from "common/image_wrapper";
-
-export class QuaggaContext {
- public config?: QuaggaJSConfigObject;
-
- public inputStream: any;
-
- public framegrabber: any;
-
- public inputImageWrapper?: ImageWrapper;
-
- public stopped: boolean = false;
-
- /**
- * Flag indicating that stop() was called while init() was still in progress.
- * This is used to handle race conditions in React StrictMode where components
- * are mounted/unmounted rapidly, causing init() to be called, then stop(),
- * then init() again before the first init() completes.
- */
- public initAborted: boolean = false;
-
- public boxSize: any;
-
- public resultCollector: any;
-
- public decoder: any;
-
- public workerPool: any[] = [];
-
- public onUIThread = true;
-
- public readonly canvasContainer = new CanvasContainer();
-}
-
-export class CanvasInfo {
- image: any;
- overlay: any;
-}
-
-export class CanvasContainer {
- public readonly ctx: CanvasInfo;
- public readonly dom: CanvasInfo;
-
- constructor() {
- this.ctx = new CanvasInfo();
- this.dom = new CanvasInfo();
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/analytics/result_collector.ts b/quagga2/quagga2-1.12.1/src/analytics/result_collector.ts
deleted file mode 100644
index 276efa8..0000000
--- a/quagga2/quagga2-1.12.1/src/analytics/result_collector.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import ImageDebug from '../common/image_debug';
-import type {
- QuaggaJSCodeResult,
- QuaggaJSResultCollector,
- QuaggaJSResultCollectorFilterFunction,
- XYSize,
- QuaggaImageData,
-} from '../../type-definitions/quagga.d';
-
-function contains(codeResult: QuaggaJSCodeResult, list: Array): boolean {
- return list && list.some((item) => {
- const keys = Object.keys(item) as Array;
- return keys.every((key) => item[key] === codeResult[key]);
- });
-}
-
-function passesFilter(
- codeResult: QuaggaJSCodeResult,
- filter: QuaggaJSResultCollectorFilterFunction | undefined,
-): boolean {
- return typeof filter === 'function' ? filter(codeResult) : true;
-}
-
-interface ResultCollector {
- addResult: (data: QuaggaImageData, imageSize: XYSize, codeResult: QuaggaJSCodeResult) => void;
- getResults: () => Array;
-}
-
-export default {
- create(config: QuaggaJSResultCollector): ResultCollector {
- const canvas = document.createElement('canvas');
- const ctx = canvas.getContext('2d', { willReadFrequently: !!config.willReadFrequently }) as CanvasRenderingContext2D;
- const results: Array = [];
- let capacity = config.capacity ?? 20;
- const capture = config.capture === true;
-
- function matchesConstraints(codeResult: QuaggaJSCodeResult): boolean {
- return !!capacity
- && codeResult
- && !contains(codeResult, config.blacklist as Array)
- && passesFilter(codeResult, config.filter);
- }
-
- return {
- addResult(data: QuaggaImageData, imageSize: XYSize, codeResult: QuaggaJSCodeResult): void {
- const result: any = { }; // this is 'any' to avoid having to construct a whole QuaggaJSCodeResult :|
- if (matchesConstraints(codeResult)) {
- capacity--;
- result.codeResult = codeResult;
- if (capture) {
- canvas.width = imageSize.x;
- canvas.height = imageSize.y;
- ImageDebug.drawImage(data, imageSize, ctx);
- result.frame = canvas.toDataURL();
- }
- results.push(result);
- }
- },
- getResults(): Array {
- return results;
- },
- };
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/analytics/test/browser/result_collector.spec.ts b/quagga2/quagga2-1.12.1/src/analytics/test/browser/result_collector.spec.ts
deleted file mode 100644
index fe9fe28..0000000
--- a/quagga2/quagga2-1.12.1/src/analytics/test/browser/result_collector.spec.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import { expect } from 'chai';
-import sinon, { SinonSpy } from 'sinon';
-import {
- describe,
- beforeEach,
- afterEach,
- it,
-} from 'mocha';
-import ResultCollector from '../../result_collector';
-import ImageDebug from '../../../common/image_debug';
-import { XYSize, QuaggaJSResultCollector, QuaggaJSCodeResult } from '../../../../type-definitions/quagga.d';
-
-interface MockCanvas {
- getContext(): {};
- toDataURL: sinon.SinonSpy;
- width: number;
- height: number;
-}
-
-let canvasMock: MockCanvas;
-let imageSize: XYSize;
-let config: QuaggaJSResultCollector;
-
-describe('Result Collector', () => {
- beforeEach(() => {
- imageSize = { x: 320, y: 240, type: 'XYSize' };
- config = {
- capture: true,
- capacity: 20,
- blacklist: [{ code: '3574660239843', format: 'ean_13' }],
- filter(): boolean {
- return true;
- },
- };
- canvasMock = {
- getContext(): {} {
- return {};
- },
- toDataURL: sinon.spy(),
- width: 0,
- height: 0,
- };
- sinon.stub(document, 'createElement').callsFake((type) => {
- if (type === 'canvas') {
- return canvasMock as unknown as HTMLElement; // forcing type, eh
- }
- return undefined as unknown as HTMLElement;
- });
- });
-
- afterEach(() => {
- (document.createElement as SinonSpy).restore();
- });
-
-
- describe('create', () => {
- it('should return a new collector', () => {
- ResultCollector.create(config);
- expect((document.createElement as SinonSpy).calledOnce).to.be.equal(true);
- expect((document.createElement as SinonSpy).getCall(0).args[0]).to.equal('canvas');
- });
- });
-
- describe('addResult', () => {
- beforeEach(() => {
- sinon.stub(ImageDebug, 'drawImage').callsFake(() => true);
- });
-
- afterEach(() => {
- (ImageDebug.drawImage as SinonSpy).restore();
- });
-
- it('should not add result if capacity is full', () => {
- config.capacity = 1;
- const collector = ResultCollector.create(config);
- collector.addResult([], imageSize, {});
- collector.addResult([], imageSize, {});
- collector.addResult([], imageSize, {});
- expect(collector.getResults()).to.have.length(1);
- });
-
- it('should only add results which match constraints', () => {
- const collector = ResultCollector.create(config);
-
- collector.addResult([], imageSize, { code: '423423443', format: 'ean_13' });
- collector.addResult([], imageSize, { code: '3574660239843', format: 'ean_13' });
- collector.addResult([], imageSize, { code: '3574660239843', format: 'code_128' });
-
- const results = collector.getResults();
- expect(results).to.have.length(2);
-
- results.forEach((result: QuaggaJSCodeResult) => {
- expect(result).not.to.deep.equal(config.blacklist?.[0]);
- });
- });
-
- it('should add result if no filter is set', () => {
- delete config.filter;
- const collector = ResultCollector.create(config);
-
- collector.addResult([], imageSize, { code: '423423443', format: 'ean_13' });
- expect(collector.getResults()).to.have.length(1);
- });
-
- it('should not add results if filter returns false', () => {
- config.filter = (): boolean => (false);
- const collector = ResultCollector.create(config);
-
- collector.addResult([], imageSize, { code: '423423443', format: 'ean_13' });
- expect(collector.getResults()).to.have.length(0);
- });
-
- it('should add result if no blacklist is set', () => {
- delete config.blacklist;
- const collector = ResultCollector.create(config);
-
- collector.addResult([], imageSize, { code: '3574660239843', format: 'ean_13' });
- expect(collector.getResults()).to.have.length(1);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/area_overlay.ts b/quagga2/quagga2-1.12.1/src/common/area_overlay.ts
deleted file mode 100644
index feb26ad..0000000
--- a/quagga2/quagga2-1.12.1/src/common/area_overlay.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-import { type XYSize } from '../../type-definitions/quagga.d';
-
-interface AreaRect {
- x: number;
- y: number;
- width: number;
- height: number;
-}
-
-/**
- * Calculates the area rectangle from the area configuration percentages.
- * This converts percentage-based area boundaries to pixel coordinates.
- *
- * @param canvasSize - The size of the canvas
- * @param area - The area configuration with top, right, bottom, left as percentage strings
- * @returns The calculated rectangle with x, y, width, height
- */
-export function calculateAreaRect(
- canvasSize: XYSize,
- area: { top?: string; right?: string; bottom?: string; left?: string },
-): AreaRect {
- const canvasWidth = canvasSize.x;
- const canvasHeight = canvasSize.y;
-
- const top = parseInt(area.top || '0', 10) / 100;
- const right = parseInt(area.right || '0', 10) / 100;
- const bottom = parseInt(area.bottom || '0', 10) / 100;
- const left = parseInt(area.left || '0', 10) / 100;
-
- const x = canvasWidth * left;
- const y = canvasHeight * top;
- const width = canvasWidth - canvasWidth * right - x;
- const height = canvasHeight - canvasHeight * bottom - y;
-
- return { x, y, width, height };
-}
-
-/**
- * Checks if the area is defined and different from the default (full canvas).
- *
- * @param area - The area configuration
- * @returns true if area is defined and not the default full canvas
- */
-export function isAreaDefined(
- area?: { top?: string; right?: string; bottom?: string; left?: string },
-): boolean {
- if (!area) {
- return false;
- }
- // Check if any value is different from 0%
- return (
- (area.top !== undefined && area.top !== '0%')
- || (area.right !== undefined && area.right !== '0%')
- || (area.bottom !== undefined && area.bottom !== '0%')
- || (area.left !== undefined && area.left !== '0%')
- );
-}
-
-/**
- * Checks if area visualization should be drawn based on borderColor or borderWidth being defined.
- *
- * @param area - The area configuration
- * @returns true if visualization should be drawn (borderColor is defined or borderWidth > 0)
- */
-export function shouldDrawAreaOverlay(
- area?: { borderColor?: string; borderWidth?: number; backgroundColor?: string },
-): boolean {
- if (!area) {
- return false;
- }
- return (
- (area.borderColor !== undefined && area.borderColor !== '')
- || (area.borderWidth !== undefined && area.borderWidth > 0)
- || (area.backgroundColor !== undefined && area.backgroundColor !== '')
- );
-}
-
-/**
- * Draws the scan area boundary on the overlay canvas.
- * This visually highlights the region where Quagga is looking for barcodes.
- *
- * @param ctx - The canvas 2D rendering context (overlay canvas)
- * @param canvasSize - The size of the canvas
- * @param area - The area configuration with top, right, bottom, left as percentage strings
- * @param borderColor - The color of the area border (default: 'rgba(0, 255, 0, 0.5)')
- * @param borderWidth - The width of the border line (default: 2)
- * @param backgroundColor - The background color to fill the area (optional)
- */
-export function drawAreaOverlay(
- ctx: CanvasRenderingContext2D,
- canvasSize: XYSize,
- area: { top?: string; right?: string; bottom?: string; left?: string },
- borderColor = 'rgba(0, 255, 0, 0.5)',
- borderWidth = 2,
- backgroundColor?: string,
-): void {
- const rect = calculateAreaRect(canvasSize, area);
-
- // Draw background fill if specified
- if (backgroundColor) {
- ctx.fillStyle = backgroundColor;
- ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
- }
-
- // Draw border if borderWidth > 0
- if (borderWidth > 0) {
- ctx.strokeStyle = borderColor;
- ctx.lineWidth = borderWidth;
- ctx.strokeRect(rect.x, rect.y, rect.width, rect.height);
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/common/array_helper.ts b/quagga2/quagga2-1.12.1/src/common/array_helper.ts
deleted file mode 100644
index 6687734..0000000
--- a/quagga2/quagga2-1.12.1/src/common/array_helper.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-/* eslint-disable no-param-reassign */
-import { TypedArray } from '../../type-definitions/quagga';
-
-export default {
- init(arr: TypedArray | Array, val: number) {
- arr.fill(val);
- },
-
- /**
- * IN-PLACE Shuffles the content of an array
- */
- shuffle(arr: Array) {
- // Durstenfeld shuffle algorithm
- // https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
- for (let i = arr.length - 1; i > 0; i--) {
- const j = Math.floor(Math.random() * (i + 1));
- [arr[i], arr[j]] = [arr[j], arr[i]];
- }
- return arr;
- },
-
- toPointList(arr: Array>) {
- const rows = arr.reduce((p, n) => {
- const row = `[${n.join(',')}]`;
- p.push(row);
- return p;
- }, [] as Array);
- return `[${rows.join(',\r\n')}]`;
- },
-
- /**
- * returns the elements which's score is bigger than the threshold
- */
- // eslint-disable-next-line no-unused-vars
- threshold(arr: Array, threshold: number, scoreFunc: ((score: number) => number)) {
- const queue = arr.reduce((prev: Array, next) => {
- if (scoreFunc.apply(arr, [next]) >= threshold) {
- prev.push(next);
- }
- return prev;
- }, []);
- return queue;
- },
-
- maxIndex(arr: Array) {
- let max = 0;
- for (let i = 0; i < arr.length; i++) {
- if (arr[i] > arr[max]) {
- max = i;
- }
- }
- return max;
- },
-
- max(arr: Array) {
- let max = 0;
- for (let i = 0; i < arr.length; i++) {
- if (arr[i] > max) {
- max = arr[i];
- }
- }
- return max;
- },
-
- sum(arr: Array | TypedArray): number {
- let { length } = arr;
- let sum = 0;
-
- while (length--) {
- sum += arr[length];
- }
- return sum;
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/common/cluster.js b/quagga2/quagga2-1.12.1/src/common/cluster.js
deleted file mode 100644
index b4cf642..0000000
--- a/quagga2/quagga2-1.12.1/src/common/cluster.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// TODO: cluster.js and cv_utils.js are pretty tightly intertwined, making for a complex conversion
-// into typescript. be warned. :-)
-
-import { vec2 } from 'gl-matrix';
-
-/**
- * Creates a cluster for grouping similar orientations of datapoints
- */
-export default {
- create(point, threshold) {
- const points = [];
- const center = {
- rad: 0,
- vec: vec2.clone([0, 0]),
- };
- const pointMap = {};
-
- function add(pointToAdd) {
- pointMap[pointToAdd.id] = pointToAdd;
- points.push(pointToAdd);
- }
-
- function updateCenter() {
- let i; let
- sum = 0;
- for (i = 0; i < points.length; i++) {
- sum += points[i].rad;
- }
- center.rad = sum / points.length;
- center.vec = vec2.clone([Math.cos(center.rad), Math.sin(center.rad)]);
- }
-
- function init() {
- add(point);
- updateCenter();
- }
-
- init();
-
- return {
- add(pointToAdd) {
- if (!pointMap[pointToAdd.id]) {
- add(pointToAdd);
- updateCenter();
- }
- },
- fits(otherPoint) {
- // check cosine similarity to center-angle
- const similarity = Math.abs(vec2.dot(otherPoint.point.vec, center.vec));
- if (similarity > threshold) {
- return true;
- }
- return false;
- },
- getPoints() {
- return points;
- },
- getCenter() {
- return center;
- },
- };
- },
- createPoint(newPoint, id, property) {
- return {
- rad: newPoint[property],
- point: newPoint,
- id,
- };
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/common/cv_utils.js b/quagga2/quagga2-1.12.1/src/common/cv_utils.js
deleted file mode 100644
index 43feae7..0000000
--- a/quagga2/quagga2-1.12.1/src/common/cv_utils.js
+++ /dev/null
@@ -1,807 +0,0 @@
-/* eslint-disable no-mixed-operators */
-/* eslint-disable no-bitwise */
-import { vec2, vec3 } from 'gl-matrix';
-import ArrayHelper from './array_helper';
-import Cluster2 from './cluster';
-
-/**
- * @param x x-coordinate
- * @param y y-coordinate
- * @return ImageReference {x,y} Coordinate
- */
-export function imageRef(x, y) {
- const that = {
- x,
- y,
- toVec2() {
- return vec2.clone([this.x, this.y]);
- },
- toVec3() {
- return vec3.clone([this.x, this.y, 1]);
- },
- round() {
- this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5);
- this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5);
- return this;
- },
- };
- return that;
-}
-
-/**
- * Computes an integral image of a given grayscale image.
- * @param imageDataContainer {ImageDataContainer} the image to be integrated
- */
-export function computeIntegralImage2(imageWrapper, integralWrapper) {
- const imageData = imageWrapper.data;
- const width = imageWrapper.size.x;
- const height = imageWrapper.size.y;
- const integralImageData = integralWrapper.data;
- let sum = 0; let posA = 0; let posB = 0; let posC = 0; let posD = 0; let x; let
- y;
-
- // sum up first column
- posB = width;
- sum = 0;
- for (y = 1; y < height; y++) {
- sum += imageData[posA];
- integralImageData[posB] += sum;
- posA += width;
- posB += width;
- }
-
- posA = 0;
- posB = 1;
- sum = 0;
- for (x = 1; x < width; x++) {
- sum += imageData[posA];
- integralImageData[posB] += sum;
- posA++;
- posB++;
- }
-
- for (y = 1; y < height; y++) {
- posA = y * width + 1;
- posB = (y - 1) * width + 1;
- posC = y * width;
- posD = (y - 1) * width;
- for (x = 1; x < width; x++) {
- integralImageData[posA]
- += imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD];
- posA++;
- posB++;
- posC++;
- posD++;
- }
- }
-}
-
-export function computeIntegralImage(imageWrapper, integralWrapper) {
- const imageData = imageWrapper.data;
- const width = imageWrapper.size.x;
- const height = imageWrapper.size.y;
- const integralImageData = integralWrapper.data;
- let sum = 0;
-
- // sum up first row
- for (let i = 0; i < width; i++) {
- sum += imageData[i];
- integralImageData[i] = sum;
- }
-
- for (let v = 1; v < height; v++) {
- sum = 0;
- for (let u = 0; u < width; u++) {
- sum += imageData[v * width + u];
- integralImageData[((v) * width) + u] = sum + integralImageData[(v - 1) * width + u];
- }
- }
-}
-
-export function thresholdImage(imageWrapper, threshold, targetWrapper) {
- if (!targetWrapper) {
- // eslint-disable-next-line no-param-reassign
- targetWrapper = imageWrapper;
- }
- const imageData = imageWrapper.data; let { length } = imageData; const
- targetData = targetWrapper.data;
-
- while (length--) {
- targetData[length] = imageData[length] < threshold ? 1 : 0;
- }
-}
-
-export function computeHistogram(imageWrapper, bitsPerPixel) {
- if (!bitsPerPixel) {
- // eslint-disable-next-line no-param-reassign
- bitsPerPixel = 8;
- }
- const imageData = imageWrapper.data;
- let { length } = imageData;
- const bitShift = 8 - bitsPerPixel;
- const bucketCnt = 1 << bitsPerPixel;
- const hist = new Int32Array(bucketCnt);
-
- while (length--) {
- hist[imageData[length] >> bitShift]++;
- }
- return hist;
-}
-
-export function sharpenLine(line) {
- let i;
- const { length } = line;
- let left = line[0];
- let center = line[1];
- let right;
-
- for (i = 1; i < length - 1; i++) {
- right = line[i + 1];
- // -1 4 -1 kernel
- // eslint-disable-next-line no-param-reassign
- line[i - 1] = (((center * 2) - left - right)) & 255;
- left = center;
- center = right;
- }
- return line;
-}
-
-export function determineOtsuThreshold(imageWrapper, bitsPerPixel = 8) {
- let hist;
- const bitShift = 8 - bitsPerPixel;
-
- function px(init, end) {
- let sum = 0;
- for (let i = init; i <= end; i++) {
- sum += hist[i];
- }
- return sum;
- }
-
- function mx(init, end) {
- let sum = 0;
-
- for (let i = init; i <= end; i++) {
- sum += i * hist[i];
- }
-
- return sum;
- }
-
- function determineThreshold() {
- const vet = [0];
- let p1;
- let p2;
- let p12;
- let m1;
- let m2;
- let m12;
- const max = (1 << bitsPerPixel) - 1;
-
- hist = computeHistogram(imageWrapper, bitsPerPixel);
- for (let k = 1; k < max; k++) {
- p1 = px(0, k);
- p2 = px(k + 1, max);
- p12 = p1 * p2;
- if (p12 === 0) {
- p12 = 1;
- }
- m1 = mx(0, k) * p2;
- m2 = mx(k + 1, max) * p1;
- m12 = m1 - m2;
- vet[k] = m12 * m12 / p12;
- }
- return ArrayHelper.maxIndex(vet);
- }
-
- const threshold = determineThreshold();
- return threshold << bitShift;
-}
-
-export function otsuThreshold(imageWrapper, targetWrapper) {
- const threshold = determineOtsuThreshold(imageWrapper);
-
- thresholdImage(imageWrapper, threshold, targetWrapper);
- return threshold;
-}
-
-// local thresholding
-export function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) {
- computeIntegralImage(imageWrapper, integralWrapper);
-
- if (!targetWrapper) {
- // eslint-disable-next-line no-param-reassign
- targetWrapper = imageWrapper;
- }
- const imageData = imageWrapper.data;
- const targetData = targetWrapper.data;
- const width = imageWrapper.size.x;
- const height = imageWrapper.size.y;
- const integralImageData = integralWrapper.data;
- let sum = 0; let v; let u; const kernel = 3; let A; let B; let C; let D; let avg; const
- size = (kernel * 2 + 1) * (kernel * 2 + 1);
-
- // clear out top & bottom-border
- for (v = 0; v <= kernel; v++) {
- for (u = 0; u < width; u++) {
- targetData[((v) * width) + u] = 0;
- targetData[(((height - 1) - v) * width) + u] = 0;
- }
- }
-
- // clear out left & right border
- for (v = kernel; v < height - kernel; v++) {
- for (u = 0; u <= kernel; u++) {
- targetData[((v) * width) + u] = 0;
- targetData[((v) * width) + (width - 1 - u)] = 0;
- }
- }
-
- for (v = kernel + 1; v < height - kernel - 1; v++) {
- for (u = kernel + 1; u < width - kernel; u++) {
- A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)];
- B = integralImageData[(v - kernel - 1) * width + (u + kernel)];
- C = integralImageData[(v + kernel) * width + (u - kernel - 1)];
- D = integralImageData[(v + kernel) * width + (u + kernel)];
- sum = D - C - B + A;
- avg = sum / (size);
- targetData[v * width + u] = imageData[v * width + u] > (avg + 5) ? 0 : 1;
- }
- }
-}
-
-export function cluster(points, threshold, property) {
- let i; let k; let thisCluster; let point; const
- clusters = [];
-
- if (!property) {
- // eslint-disable-next-line no-param-reassign
- property = 'rad';
- }
-
- function addToCluster(newPoint) {
- let found = false;
- for (k = 0; k < clusters.length; k++) {
- thisCluster = clusters[k];
- if (thisCluster.fits(newPoint)) {
- thisCluster.add(newPoint);
- found = true;
- }
- }
- return found;
- }
-
- // iterate over each cloud
- for (i = 0; i < points.length; i++) {
- point = Cluster2.createPoint(points[i], i, property);
- if (!addToCluster(point)) {
- clusters.push(Cluster2.create(point, threshold));
- }
- }
- return clusters;
-}
-
-export const Tracer = {
- trace(points, vec) {
- let iteration;
- const maxIterations = 10;
- let top = [];
- let result = [];
- let centerPos = 0;
- let currentPos = 0;
-
- function trace(idx, forward) {
- let to;
- let toIdx;
- let predictedPos;
- const thresholdX = 1;
- const thresholdY = Math.abs(vec[1] / 10);
- let found = false;
-
- function match(pos, predicted) {
- if (pos.x > (predicted.x - thresholdX)
- && pos.x < (predicted.x + thresholdX)
- && pos.y > (predicted.y - thresholdY)
- && pos.y < (predicted.y + thresholdY)) {
- return true;
- }
- return false;
- }
-
- // check if the next index is within the vec specifications
- // if not, check as long as the threshold is met
-
- const from = points[idx];
- if (forward) {
- predictedPos = {
- x: from.x + vec[0],
- y: from.y + vec[1],
- };
- } else {
- predictedPos = {
- x: from.x - vec[0],
- y: from.y - vec[1],
- };
- }
-
- toIdx = forward ? idx + 1 : idx - 1;
- to = points[toIdx];
- // eslint-disable-next-line no-cond-assign
- while (to && (found = match(to, predictedPos)) !== true && (Math.abs(to.y - from.y) < vec[1])) {
- toIdx = forward ? toIdx + 1 : toIdx - 1;
- to = points[toIdx];
- }
-
- return found ? toIdx : null;
- }
-
- for (iteration = 0; iteration < maxIterations; iteration++) {
- // randomly select point to start with
- centerPos = Math.floor(Math.random() * points.length);
-
- // trace forward
- top = [];
- currentPos = centerPos;
- top.push(points[currentPos]);
- // eslint-disable-next-line no-cond-assign
- while ((currentPos = trace(currentPos, true)) !== null) {
- top.push(points[currentPos]);
- }
- if (centerPos > 0) {
- currentPos = centerPos;
- // eslint-disable-next-line no-cond-assign
- while ((currentPos = trace(currentPos, false)) !== null) {
- top.push(points[currentPos]);
- }
- }
-
- if (top.length > result.length) {
- result = top;
- }
- }
- return result;
- },
-};
-
-export const DILATE = 1;
-export const ERODE = 2;
-
-export function dilate(inImageWrapper, outImageWrapper) {
- let v;
- let u;
- const inImageData = inImageWrapper.data;
- const outImageData = outImageWrapper.data;
- const height = inImageWrapper.size.y;
- const width = inImageWrapper.size.x;
- let sum;
- let yStart1;
- let yStart2;
- let xStart1;
- let xStart2;
-
- for (v = 1; v < height - 1; v++) {
- for (u = 1; u < width - 1; u++) {
- yStart1 = v - 1;
- yStart2 = v + 1;
- xStart1 = u - 1;
- xStart2 = u + 1;
- sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2]
- + inImageData[v * width + u]
- + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];
- outImageData[v * width + u] = sum > 0 ? 1 : 0;
- }
- }
-}
-
-export function erode(inImageWrapper, outImageWrapper) {
- let v;
- let u;
- const inImageData = inImageWrapper.data;
- const outImageData = outImageWrapper.data;
- const height = inImageWrapper.size.y;
- const width = inImageWrapper.size.x;
- let sum;
- let yStart1;
- let yStart2;
- let xStart1;
- let xStart2;
-
- for (v = 1; v < height - 1; v++) {
- for (u = 1; u < width - 1; u++) {
- yStart1 = v - 1;
- yStart2 = v + 1;
- xStart1 = u - 1;
- xStart2 = u + 1;
- sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2]
- + inImageData[v * width + u]
- + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];
- outImageData[v * width + u] = sum === 5 ? 1 : 0;
- }
- }
-}
-
-export function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) {
- if (!resultImageWrapper) {
- // eslint-disable-next-line no-param-reassign
- resultImageWrapper = aImageWrapper;
- }
- let { length } = aImageWrapper.data;
- const aImageData = aImageWrapper.data;
- const bImageData = bImageWrapper.data;
- const cImageData = resultImageWrapper.data;
-
- while (length--) {
- cImageData[length] = aImageData[length] - bImageData[length];
- }
-}
-
-export function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) {
- if (!resultImageWrapper) {
- // eslint-disable-next-line no-param-reassign
- resultImageWrapper = aImageWrapper;
- }
- let { length } = aImageWrapper.data;
- const aImageData = aImageWrapper.data;
- const bImageData = bImageWrapper.data;
- const cImageData = resultImageWrapper.data;
-
- while (length--) {
- cImageData[length] = aImageData[length] || bImageData[length];
- }
-}
-
-export function countNonZero(imageWrapper) {
- let { length } = imageWrapper.data;
- const { data } = imageWrapper;
- let sum = 0;
-
- while (length--) {
- sum += data[length];
- }
- return sum;
-}
-
-export function topGeneric(list, top, scoreFunc) {
- let i; let minIdx = 0; let min = 0; const queue = []; let score; let hit; let
- pos;
-
- for (i = 0; i < top; i++) {
- queue[i] = {
- score: 0,
- item: null,
- };
- }
-
- for (i = 0; i < list.length; i++) {
- score = scoreFunc.apply(this, [list[i]]);
- if (score > min) {
- hit = queue[minIdx];
- hit.score = score;
- hit.item = list[i];
- min = Number.MAX_VALUE;
- for (pos = 0; pos < top; pos++) {
- if (queue[pos].score < min) {
- min = queue[pos].score;
- minIdx = pos;
- }
- }
- }
- }
-
- return queue;
-}
-
-export function grayArrayFromImage(htmlImage, offsetX, ctx, array) {
- ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height);
- const ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data;
- computeGray(ctxData, array);
-}
-
-export function grayArrayFromContext(ctx, size, offset, array) {
- const ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data;
- computeGray(ctxData, array);
-}
-
-export function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) {
- let topRowIdx = 0;
- let bottomRowIdx = size.x;
- const endIdx = Math.floor(canvasData.length / 4);
- const outWidth = size.x / 2;
- let outImgIdx = 0;
- const inWidth = size.x;
- let i;
-
- while (bottomRowIdx < endIdx) {
- for (i = 0; i < outWidth; i++) {
- // eslint-disable-next-line no-param-reassign
- outArray[outImgIdx] = (
- (0.299 * canvasData[topRowIdx * 4 + 0]
- + 0.587 * canvasData[topRowIdx * 4 + 1]
- + 0.114 * canvasData[topRowIdx * 4 + 2])
- + (0.299 * canvasData[(topRowIdx + 1) * 4 + 0]
- + 0.587 * canvasData[(topRowIdx + 1) * 4 + 1]
- + 0.114 * canvasData[(topRowIdx + 1) * 4 + 2])
- + (0.299 * canvasData[(bottomRowIdx) * 4 + 0]
- + 0.587 * canvasData[(bottomRowIdx) * 4 + 1]
- + 0.114 * canvasData[(bottomRowIdx) * 4 + 2])
- + (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0]
- + 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1]
- + 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4;
- outImgIdx++;
- topRowIdx += 2;
- bottomRowIdx += 2;
- }
- topRowIdx += inWidth;
- bottomRowIdx += inWidth;
- }
-}
-
-export function computeGray(imageData, outArray, config) {
- const l = (imageData.length / 4) | 0;
- const singleChannel = config && config.singleChannel === true;
-
- if (singleChannel) {
- for (let i = 0; i < l; i++) {
- const alpha = imageData[i * 4 + 3];
- if (alpha === 0) {
- // eslint-disable-next-line no-param-reassign
- outArray[i] = 255; // Treat transparent pixels as white
- } else {
- // eslint-disable-next-line no-param-reassign
- outArray[i] = imageData[i * 4 + 0];
- }
- }
- } else {
- for (let i = 0; i < l; i++) {
- const alpha = imageData[i * 4 + 3];
- if (alpha === 0) {
- // eslint-disable-next-line no-param-reassign
- outArray[i] = 255; // Treat transparent pixels as white
- } else {
- // eslint-disable-next-line no-param-reassign
- outArray[i] = 0.299 * imageData[i * 4 + 0] + 0.587 * imageData[i * 4 + 1] + 0.114 * imageData[i * 4 + 2];
- }
- }
- }
-}
-
-export function loadImageArray(src, callback, canvas = document && document.createElement('canvas')) {
- const img = new Image();
- img.callback = callback;
- img.onload = function () {
- // eslint-disable-next-line no-param-reassign
- canvas.width = this.width;
- // eslint-disable-next-line no-param-reassign
- canvas.height = this.height;
- console.warn('* loadImageArray getContext 2d');
- const ctx = canvas.getContext('2d');
- ctx.drawImage(this, 0, 0);
- const array = new Uint8Array(this.width * this.height);
- ctx.drawImage(this, 0, 0);
- const { data } = ctx.getImageData(0, 0, this.width, this.height);
- computeGray(data, array);
- this.callback(array, {
- x: this.width,
- y: this.height,
- }, this);
- };
- img.src = src;
-}
-
-/**
- * @param inImg {ImageWrapper} input image to be sampled
- * @param outImg {ImageWrapper} to be stored in
- */
-export function halfSample(inImgWrapper, outImgWrapper) {
- const inImg = inImgWrapper.data;
- const inWidth = inImgWrapper.size.x;
- const outImg = outImgWrapper.data;
- let topRowIdx = 0;
- let bottomRowIdx = inWidth;
- const endIdx = inImg.length;
- const outWidth = inWidth / 2;
- let outImgIdx = 0;
- while (bottomRowIdx < endIdx) {
- for (let i = 0; i < outWidth; i++) {
- outImg[outImgIdx] = Math.floor(
- (inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4,
- );
- outImgIdx++;
- topRowIdx += 2;
- bottomRowIdx += 2;
- }
- topRowIdx += inWidth;
- bottomRowIdx += inWidth;
- }
-}
-
-export function hsv2rgb(hsv, rgb = [0, 0, 0]) {
- const h = hsv[0];
- const s = hsv[1];
- const v = hsv[2];
- const c = v * s;
- const x = c * (1 - Math.abs((h / 60) % 2 - 1));
- const m = v - c;
- let r = 0;
- let g = 0;
- let b = 0;
-
- if (h < 60) {
- r = c;
- g = x;
- } else if (h < 120) {
- r = x;
- g = c;
- } else if (h < 180) {
- g = c;
- b = x;
- } else if (h < 240) {
- g = x;
- b = c;
- } else if (h < 300) {
- r = x;
- b = c;
- } else if (h < 360) {
- r = c;
- b = x;
- }
- // eslint-disable-next-line no-param-reassign
- rgb[0] = ((r + m) * 255) | 0;
- // eslint-disable-next-line no-param-reassign
- rgb[1] = ((g + m) * 255) | 0;
- // eslint-disable-next-line no-param-reassign
- rgb[2] = ((b + m) * 255) | 0;
- return rgb;
-}
-
-export function _computeDivisors(n) {
- // Handle edge cases
- // NaN: Not a number - no meaningful divisors
- // Infinity: Infinite values have no finite divisors
- // Non-positive: Divisors are typically defined for positive integers only
- // While negative numbers technically have divisors, returning them would complicate
- // the API (would need to return both positive and negative divisors, or make assumptions)
- if (!Number.isFinite(n) || n < 1) {
- return [];
- }
-
- const largeDivisors = [];
- const divisors = [];
- const sqrtN = Math.sqrt(n);
-
- for (let i = 1; i <= sqrtN; i++) {
- if (n % i === 0) {
- divisors.push(i);
- // Only add the complementary divisor if it's different (not a perfect square root)
- if (i !== n / i) {
- largeDivisors.unshift(Math.floor(n / i));
- }
- }
- }
- return divisors.concat(largeDivisors);
-}
-
-function _computeIntersection(arr1, arr2) {
- let i = 0;
- let j = 0;
- const result = [];
-
- while (i < arr1.length && j < arr2.length) {
- if (arr1[i] === arr2[j]) {
- result.push(arr1[i]);
- i++;
- j++;
- } else if (arr1[i] > arr2[j]) {
- j++;
- } else {
- i++;
- }
- }
- return result;
-}
-
-export function calculatePatchSize(patchSize, imgSize) {
- const divisorsX = _computeDivisors(imgSize.x);
- const divisorsY = _computeDivisors(imgSize.y);
- const wideSide = Math.max(imgSize.x, imgSize.y);
- const common = _computeIntersection(divisorsX, divisorsY);
- const nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80];
- const nrOfPatchesMap = {
- 'x-small': 5,
- small: 4,
- medium: 3,
- large: 2,
- 'x-large': 1,
- };
- const nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium;
- const nrOfPatches = nrOfPatchesList[nrOfPatchesIdx];
- const desiredPatchSize = Math.floor(wideSide / nrOfPatches);
- let optimalPatchSize;
-
- function findPatchSizeForDivisors(divisors) {
- let i = 0;
- let found = divisors[Math.floor(divisors.length / 2)];
-
- while (i < (divisors.length - 1) && divisors[i] < desiredPatchSize) {
- i++;
- }
- if (i > 0) {
- if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) {
- found = divisors[i - 1];
- } else {
- found = divisors[i];
- }
- }
- if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx]
- && desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx]) {
- return { x: found, y: found };
- }
- return null;
- }
-
- optimalPatchSize = findPatchSizeForDivisors(common);
- if (!optimalPatchSize) {
- optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide));
- if (!optimalPatchSize) {
- optimalPatchSize = findPatchSizeForDivisors((_computeDivisors(desiredPatchSize * nrOfPatches)));
- }
- }
- // Fallback: if no optimal patch size found, use image size (or 1x1 minimum)
- // This ensures the function always returns a valid {x, y} object
- if (!optimalPatchSize) {
- optimalPatchSize = {
- x: Math.max(1, imgSize.x),
- y: Math.max(1, imgSize.y),
- };
- }
- return optimalPatchSize;
-}
-
-export function _parseCSSDimensionValues(value) {
- const dimension = {
- value: parseFloat(value),
- unit: value.indexOf('%') === value.length - 1 ? '%' : '%',
- };
-
- return dimension;
-}
-
-export const _dimensionsConverters = {
- top(dimension, context) {
- return dimension.unit === '%' ? Math.floor(context.height * (dimension.value / 100)) : null;
- },
- right(dimension, context) {
- return dimension.unit === '%' ? Math.floor(context.width - (context.width * (dimension.value / 100))) : null;
- },
- bottom(dimension, context) {
- return dimension.unit === '%' ? Math.floor(context.height - (context.height * (dimension.value / 100))) : null;
- },
- left(dimension, context) {
- return dimension.unit === '%' ? Math.floor(context.width * (dimension.value / 100)) : null;
- },
-};
-
-export function computeImageArea(inputWidth, inputHeight, area) {
- const context = { width: inputWidth, height: inputHeight };
-
- const parsedArea = Object.keys(area).reduce((result, key) => {
- // Skip styling properties that aren't dimension converters
- if (!_dimensionsConverters[key]) {
- return result;
- }
- const value = area[key];
- const parsed = _parseCSSDimensionValues(value);
- const calculated = _dimensionsConverters[key](parsed, context);
-
- // eslint-disable-next-line no-param-reassign
- result[key] = calculated;
- return result;
- }, {});
-
- return {
- sx: parsedArea.left,
- sy: parsedArea.top,
- sw: parsedArea.right - parsedArea.left,
- sh: parsedArea.bottom - parsedArea.top,
- };
-}
diff --git a/quagga2/quagga2-1.12.1/src/common/events.ts b/quagga2/quagga2-1.12.1/src/common/events.ts
deleted file mode 100644
index 54468d1..0000000
--- a/quagga2/quagga2-1.12.1/src/common/events.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-type EventName = string;
-
-interface Subscription {
- async?: boolean;
- callback: Function;
- once?: boolean;
-}
-
-interface EventData {
- subscribers: Array;
-}
-
-interface Events {
- [key: string]: EventData;
-}
-
-interface EventInterface {
- subscribe(event: EventName, callback: Function | Subscription, async?: boolean): void;
- publish(eventName: EventName, data?: never): void;
- once(event: EventName, callback: Function, async?: boolean): void;
- unsubscribe(eventName?: EventName, callback?: Function | Subscription): void;
-}
-
-export default (function EventInterface(): EventInterface {
- let events: Events = {};
-
- function getEvent(eventName: EventName): EventData {
- if (!events[eventName]) {
- events[eventName] = {
- subscribers: [],
- };
- }
- return events[eventName];
- }
-
- function clearEvents(): void {
- events = {};
- }
-
- function publishSubscription(subscription: Subscription, data: never): void {
- if (subscription.async) {
- setTimeout(() => {
- subscription.callback(data);
- }, 4);
- } else {
- subscription.callback(data);
- }
- }
-
- function _subscribe(event: EventName, callback: Function | Subscription, async?: boolean): void {
- let subscription;
-
- if (typeof callback === 'function') {
- subscription = {
- callback,
- async,
- };
- } else {
- subscription = callback;
- if (!subscription.callback) {
- throw new Error('Callback was not specified on options');
- }
- }
-
- getEvent(event).subscribers.push(subscription);
- }
-
- return {
- subscribe(event: EventName, callback: Function | Subscription, async?: boolean): void {
- return _subscribe(event, callback, async);
- },
- publish(eventName: EventName, data?: never): void {
- const event = getEvent(eventName);
- const { subscribers } = event;
-
- // Publish one-time subscriptions
- subscribers.filter((subscriber) => !!subscriber.once).forEach((subscriber) => {
- publishSubscription(subscriber, data as never);
- });
-
- // remove them from the subscriber
- event.subscribers = subscribers.filter((subscriber) => !subscriber.once);
-
- // publish the rest
- event.subscribers.forEach((subscriber) => {
- publishSubscription(subscriber, data as never);
- });
- },
- once(event: EventName, callback: Function, async = false): void {
- _subscribe(event, {
- callback,
- async,
- once: true,
- });
- },
- unsubscribe(eventName?: EventName, callback?: Function | Subscription): void {
- if (eventName) {
- const event = getEvent(eventName);
- if (event && callback) {
- event.subscribers = event.subscribers.filter((subscriber) => subscriber.callback !== callback);
- } else {
- event.subscribers = [];
- }
- } else {
- clearEvents();
- }
- },
- };
-}());
diff --git a/quagga2/quagga2-1.12.1/src/common/image_debug.ts b/quagga2/quagga2-1.12.1/src/common/image_debug.ts
deleted file mode 100644
index 650bd64..0000000
--- a/quagga2/quagga2-1.12.1/src/common/image_debug.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { XYSize } from '../../type-definitions/quagga.d';
-
-// TODO: XYPosition should be an XYObject, but that breaks XYDefinition, which breaks drawPath() below.
-declare interface XYPosition {
- x: number;
- y: number;
-}
-
-declare interface CanvasStyle {
- color: string;
- lineWidth: number;
-}
-
-// XYDefinition tells us which component of a given array or object is the "X" and which is the "Y".
-// Usually this is 0 for X and 1 for Y, but might be used as 'x' for x and 'y' for Y.
-declare interface XYDefinition {
- x: keyof XYPosition;
- y: keyof XYPosition;
-}
-
-declare type Path = Array;
-
-export default {
- drawRect(pos: XYPosition, size: XYSize, ctx: CanvasRenderingContext2D, style: CanvasStyle): void {
- ctx.strokeStyle = style.color;
- ctx.fillStyle = style.color;
- ctx.lineWidth = style.lineWidth || 1;
- ctx.beginPath();
- ctx.strokeRect(pos.x, pos.y, size.x, size.y);
- },
- drawPath(path: Path, def: XYDefinition, ctx: CanvasRenderingContext2D, style: CanvasStyle): void {
- ctx.strokeStyle = style.color;
- ctx.fillStyle = style.color;
- ctx.lineWidth = style.lineWidth;
- ctx.beginPath();
- ctx.moveTo(path[0][def.x], path[0][def.y]);
- for (let j = 1; j < path.length; j++) {
- ctx.lineTo(path[j][def.x], path[j][def.y]);
- }
- ctx.closePath();
- ctx.stroke();
- },
- drawImage(imageData: Array, size: XYSize, ctx: CanvasRenderingContext2D): boolean {
- const canvasData = ctx.getImageData(0, 0, size.x, size.y);
- const { data } = canvasData;
- let canvasDataPos = data.length;
- let imageDataPos = imageData.length;
-
- if (canvasDataPos / imageDataPos !== 4) {
- return false;
- }
- while (imageDataPos--) {
- const value = imageData[imageDataPos];
- data[--canvasDataPos] = 255;
- data[--canvasDataPos] = value;
- data[--canvasDataPos] = value;
- data[--canvasDataPos] = value;
- }
- ctx.putImageData(canvasData, 0, 0);
- return true;
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/common/image_wrapper.ts b/quagga2/quagga2-1.12.1/src/common/image_wrapper.ts
deleted file mode 100644
index c762c2b..0000000
--- a/quagga2/quagga2-1.12.1/src/common/image_wrapper.ts
+++ /dev/null
@@ -1,270 +0,0 @@
-import { vec2 } from 'gl-matrix';
-import {
- XYSize,
- TypedArrayConstructor,
- TypedArray,
- WrapperIndexMapping,
- Moment,
- SparseImageWrapper,
-} from '../../type-definitions/quagga.d';
-import ArrayHelper from './array_helper';
-import { hsv2rgb } from './cv_utils';
-
-type PositiveNumber = number;
-function assertNumberPositive(val: number): asserts val is PositiveNumber {
- if (val < 0) {
- throw new Error(`expected positive number, received ${val}`);
- }
-}
-
-class ImageWrapper implements SparseImageWrapper {
- data: TypedArray | Array;
-
- size: XYSize;
-
- indexMapping?: WrapperIndexMapping;
-
- // Represents a basic image combining the data and size. In addition, some methods for
- // manipulation are contained within.
- constructor(
- size: XYSize,
- data?: TypedArray | Array,
- ArrayType: TypedArrayConstructor | ArrayConstructor = Uint8Array,
- initialize?: boolean,
- ) {
- if (!data) {
- this.data = new (ArrayType)(size.x * size.y);
- if (initialize) {
- ArrayHelper.init(this.data, 0);
- }
- } else {
- this.data = data;
- }
- this.size = size;
- }
-
- // tests if a position is within the image, extended out by a border on each side
- inImageWithBorder(imgRef: XYSize, border: PositiveNumber = 0): boolean {
- assertNumberPositive(border);
- return (imgRef.x >= 0)
- && (imgRef.y >= 0)
- && (imgRef.x < (this.size.x + (border * 2)))
- && (imgRef.y < (this.size.y + (border * 2)));
- }
-
- // Copy from THIS ImageWrapper to the new imageWrapper parameter, starting at from, stopping at
- // end of new imageWrapper size.
- subImageAsCopy(imageWrapper: ImageWrapper, from: XYSize): ImageWrapper {
- assertNumberPositive(from.x);
- assertNumberPositive(from.y);
- const { x: sizeX, y: sizeY } = imageWrapper.size;
- for (let x = 0; x < sizeX; x++) {
- for (let y = 0; y < sizeY; y++) {
- // eslint-disable-next-line no-param-reassign
- imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x];
- }
- }
- return imageWrapper;
- // TODO: this function really probably should call into ImageWrapper somewhere to make
- // sure that all of it's parameters are set properly, something like
- // ImageWrapper.UpdateFrom()
- // that might take a provided data and size, and make sure there's no invalid indexMapping
- // hanging around, and such.
- }
-
- // Retrieve a grayscale value at the given pixel position of the image
- get(x: number, y: number): number {
- return this.data[y * this.size.x + x];
- }
-
- // Retrieve a grayscale value at the given pixel position of the image (safe, whatever that
- // means)
- getSafe(x: number, y: number): number {
- // cache indexMapping because if we're using it once, we'll probably need it a bunch more
- // too
- if (!this.indexMapping) {
- this.indexMapping = {
- x: [],
- y: [],
- };
- for (let i = 0; i < this.size.x; i++) {
- this.indexMapping.x[i] = i;
- this.indexMapping.x[i + this.size.x] = i;
- }
- for (let i = 0; i < this.size.y; i++) {
- this.indexMapping.y[i] = i;
- this.indexMapping.y[i + this.size.y] = i;
- }
- }
- return this.data[(this.indexMapping.y[y + this.size.y]) * this.size.x + this.indexMapping.x[x + this.size.x]];
- }
-
- // Sets a given pixel position in the image to the given grayscale value
- set(x: number, y: number, value: number): ImageWrapper {
- this.data[y * this.size.x + x] = value;
- delete this.indexMapping;
- return this;
- }
-
- // Sets the border of the image (1 pixel) to zero
- zeroBorder(): ImageWrapper {
- const { x: width, y: height } = this.size;
- for (let i = 0; i < width; i++) {
- // eslint-disable-next-line no-multi-assign
- this.data[i] = this.data[(height - 1) * width + i] = 0;
- }
- for (let i = 1; i < height - 1; i++) {
- // eslint-disable-next-line no-multi-assign
- this.data[i * width] = this.data[i * width + (width - 1)] = 0;
- }
- delete this.indexMapping;
- return this;
- }
-
- // TODO: this function is entirely too large for me to reason out right at this moment that i'm handling
- // all the rest of it, so this is a verbatim copy of the javascript source, with only tweaks
- // necessary to get it to run, no thought put into it yet.
- moments(labelCount: number): Array {
- const { data } = this;
- let x;
- let y;
- const height = this.size.y;
- const width = this.size.x;
- let val;
- let ysq;
- const labelSum: Array = [];
- let i;
- let label;
- let mu11;
- let mu02;
- let mu20;
- let x_;
- let y_;
- let tmp;
- const result: Array = [];
- const { PI } = Math;
- const PI_4 = PI / 4;
-
- if (labelCount <= 0) {
- return result;
- }
-
- for (i = 0; i < labelCount; i++) {
- labelSum[i] = {
- m00: 0,
- m01: 0,
- m10: 0,
- m11: 0,
- m02: 0,
- m20: 0,
- theta: 0,
- rad: 0,
- };
- }
-
- for (y = 0; y < height; y++) {
- ysq = y * y;
- for (x = 0; x < width; x++) {
- val = data[y * width + x];
- if (val > 0) {
- label = labelSum[val - 1];
- label.m00 += 1;
- label.m01 += y;
- label.m10 += x;
- label.m11 += x * y;
- label.m02 += ysq;
- label.m20 += x * x;
- }
- }
- }
-
- for (i = 0; i < labelCount; i++) {
- label = labelSum[i];
- // eslint-disable-next-line no-restricted-globals
- if (!isNaN(label.m00) && label.m00 !== 0) {
- x_ = label.m10 / label.m00;
- y_ = label.m01 / label.m00;
- mu11 = label.m11 / label.m00 - x_ * y_;
- mu02 = label.m02 / label.m00 - y_ * y_;
- mu20 = label.m20 / label.m00 - x_ * x_;
- tmp = (mu02 - mu20) / (2 * mu11);
- tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4) + PI;
- // eslint-disable-next-line no-mixed-operators
- label.theta = (tmp * 180 / PI + 90) % 180 - 90;
- if (label.theta < 0) {
- label.theta += 180;
- }
- label.rad = tmp > PI ? tmp - PI : tmp;
- label.vec = vec2.clone([Math.cos(tmp), Math.sin(tmp)]);
- result.push(label);
- }
- }
- return result;
- }
-
- // return a Uint8ClampedArray containing this grayscale image converted to RGBA form
- getAsRGBA(scale = 1.0): Uint8ClampedArray {
- const ret = new Uint8ClampedArray(4 * this.size.x * this.size.y);
- for (let y = 0; y < this.size.y; y++) {
- for (let x = 0; x < this.size.x; x++) {
- const pixel = y * this.size.x + x;
- const current = this.get(x, y) * scale;
- ret[pixel * 4 + 0] = current;
- ret[pixel * 4 + 1] = current;
- ret[pixel * 4 + 2] = current;
- ret[pixel * 4 + 3] = 255;
- }
- }
- return ret;
- }
-
- // Display this ImageWrapper in a given Canvas element at the specified scale
- show(canvas: HTMLCanvasElement, scale = 1.0): void {
- console.warn('* imagewrapper show getcontext 2d');
- const ctx = canvas.getContext('2d');
- if (!ctx) {
- throw new Error('Unable to get canvas context');
- }
- const frame = ctx.getImageData(0, 0, canvas.width, canvas.height);
- const data = this.getAsRGBA(scale);
- // eslint-disable-next-line no-param-reassign
- canvas.width = this.size.x;
- // eslint-disable-next-line no-param-reassign
- canvas.height = this.size.y;
- const newFrame = new ImageData(data as Uint8ClampedArray, frame.width, frame.height);
- ctx.putImageData(newFrame, 0, 0);
- }
-
- // Displays a specified SubImage area in a given canvas. This differs drastically from
- // creating a new SubImage and using it's show() method. Why? I don't have the answer to that
- // yet. I suspect the HSV/RGB operations involved here are making it significantly different,
- // but until I can visualize these functions side by side, I'm just going to copy the existing
- // implementation.
- overlay(canvas: HTMLCanvasElement, inScale: number, from: XYSize): void {
- const adjustedScale = (inScale < 0 || inScale > 360) ? 360 : inScale;
- const hsv = [0, 1, 1];
- const rgb = [0, 0, 0];
- const whiteRgb = [255, 255, 255];
- const blackRgb = [0, 0, 0];
- let result = [];
- console.warn('* imagewrapper overlay getcontext 2d');
- const ctx = canvas.getContext('2d');
- if (!ctx) {
- throw new Error('Unable to get canvas context');
- }
- const frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y);
- const { data } = frame;
- let { length } = this.data;
- while (length--) {
- hsv[0] = this.data[length] * adjustedScale;
- // eslint-disable-next-line no-nested-ternary
- result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : hsv2rgb(hsv, rgb);
- const pos = length * 4;
- [data[pos], data[pos + 1], data[pos + 2]] = result;
- data[pos + 3] = 255;
- }
- ctx.putImageData(frame, from.x, from.y);
- }
-}
-
-export default ImageWrapper;
diff --git a/quagga2/quagga2-1.12.1/src/common/mediaDevices.ts b/quagga2/quagga2-1.12.1/src/common/mediaDevices.ts
deleted file mode 100644
index 2cb8e49..0000000
--- a/quagga2/quagga2-1.12.1/src/common/mediaDevices.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import Exception from '../quagga/Exception';
-
-const ERROR_DESC = 'This may mean that the user has declined camera access, or the browser does not support media APIs. If you are running in iOS, you must use Safari.';
-
-export function enumerateDevices(): Promise> {
- try {
- return navigator.mediaDevices.enumerateDevices();
- } catch (err) {
- const error: Error = new Exception(`enumerateDevices is not defined. ${ERROR_DESC}`, -1);
- return Promise.reject(error);
- }
-}
-
-export function getUserMedia(constraints: MediaStreamConstraints): Promise {
- try {
- return navigator.mediaDevices.getUserMedia(constraints);
- } catch (err) {
- const error: Error = new Exception(`getUserMedia is not defined. ${ERROR_DESC}`, -1);
- return Promise.reject(error);
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/common/subImage.ts b/quagga2/quagga2-1.12.1/src/common/subImage.ts
deleted file mode 100644
index c829132..0000000
--- a/quagga2/quagga2-1.12.1/src/common/subImage.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import type { ImageRef, SparseImageWrapper, XYSize } from '../../type-definitions/quagga.d';
-import ImageWrapper from './image_wrapper';
-
-// A window into a specific area of an ImageWrapper
-export class SubImage {
- I: ImageWrapper | SparseImageWrapper;
-
- data: ImageWrapper['data'];
-
- originalSize: XYSize;
-
- from: ImageRef;
-
- size: XYSize;
-
- // Construct representing a part of another {ImageWrapper}. Shares data between the parent and
- // child. Returns a shared part of the original image.
- constructor(from: ImageRef, size: XYSize, I: SparseImageWrapper = { data: null, size }) {
- this.data = I.data as ImageWrapper['data'];
- this.originalSize = size;
- this.I = I;
- this.from = from;
- this.size = size;
- }
-
- // Retrieves a given pixel position from the {SubImage}, returns the grayscale value at the position
- get(x: number, y: number): number {
- return this.data[(this.from.y + y) * this.originalSize.x + this.from.x + x];
- }
-
- // Displays the {SubImage} in a given canvas at a given scale
- show(canvas: HTMLCanvasElement, scale = 1.0): void {
- console.warn('* subImage.show getcontext 2d');
- const ctx = canvas.getContext('2d');
- if (!ctx) {
- throw new Error('Unable to get canvas context');
- }
- // eslint-disable-next-line no-param-reassign
- canvas.width = this.size.x;
- // eslint-disable-next-line no-param-reassign
- canvas.height = this.size.y;
- const frame = ctx.getImageData(0, 0, canvas.width, canvas.height);
- const { data } = frame;
- let current = 0;
- for (let y = 0; y < this.size.y; y++) {
- for (let x = 0; x < this.size.x; x++) {
- const pixel = y * this.size.x + x;
- current = this.get(x, y) * scale;
- data[pixel * 4 + 0] = current;
- data[pixel * 4 + 1] = current;
- data[pixel * 4 + 2] = current;
- data[pixel * 4 + 3] = 255;
- }
- }
- const newFrame = new ImageData(data, frame.width, frame.height);
- ctx.putImageData(newFrame, 0, 0);
- }
-
- // Updates the underlying data from a given {ImageWrapper}
- updateData(image: ImageWrapper): void {
- this.originalSize = image.size;
- this.data = image.data;
- }
-
- // Updates the position of the shared area, returns {this} for possible chaining
- updateFrom(from: ImageRef): SubImage {
- this.from = from;
- return this;
- }
-}
-
-export default SubImage;
diff --git a/quagga2/quagga2-1.12.1/src/common/test/area_overlay.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/area_overlay.spec.ts
deleted file mode 100644
index 7de627b..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/area_overlay.spec.ts
+++ /dev/null
@@ -1,205 +0,0 @@
-import { describe, it, beforeEach } from 'mocha';
-import { expect } from 'chai';
-import * as sinon from 'sinon';
-import {
- calculateAreaRect,
- isAreaDefined,
- shouldDrawAreaOverlay,
- drawAreaOverlay,
-} from '../area_overlay';
-import { type XYSize } from '../../../type-definitions/quagga.d';
-
-describe('Area Overlay', () => {
- describe('calculateAreaRect', () => {
- it('should calculate correct rect with default area (0%)', () => {
- const canvasSize: XYSize = { x: 800, y: 600, type: 'XYSize' };
- const area = { top: '0%', right: '0%', bottom: '0%', left: '0%' };
-
- const result = calculateAreaRect(canvasSize, area);
-
- expect(result.x).to.equal(0);
- expect(result.y).to.equal(0);
- expect(result.width).to.equal(800);
- expect(result.height).to.equal(600);
- });
-
- it('should calculate correct rect with 10% padding on all sides', () => {
- const canvasSize: XYSize = { x: 800, y: 600, type: 'XYSize' };
- const area = { top: '10%', right: '10%', bottom: '10%', left: '10%' };
-
- const result = calculateAreaRect(canvasSize, area);
-
- expect(result.x).to.equal(80); // 800 * 0.10
- expect(result.y).to.equal(60); // 600 * 0.10
- expect(result.width).to.equal(640); // 800 - 80 - 80
- expect(result.height).to.equal(480); // 600 - 60 - 60
- });
-
- it('should calculate correct rect with 25% horizontal center strip', () => {
- const canvasSize: XYSize = { x: 640, y: 480, type: 'XYSize' };
- const area = { top: '25%', right: '0%', bottom: '25%', left: '0%' };
-
- const result = calculateAreaRect(canvasSize, area);
-
- expect(result.x).to.equal(0);
- expect(result.y).to.equal(120); // 480 * 0.25
- expect(result.width).to.equal(640);
- expect(result.height).to.equal(240); // 480 - 120 - 120
- });
-
- it('should handle undefined values as 0%', () => {
- const canvasSize: XYSize = { x: 100, y: 100, type: 'XYSize' };
- const area = { top: '20%' }; // only top defined
-
- const result = calculateAreaRect(canvasSize, area);
-
- expect(result.x).to.equal(0);
- expect(result.y).to.equal(20);
- expect(result.width).to.equal(100);
- expect(result.height).to.equal(80);
- });
- });
-
- describe('isAreaDefined', () => {
- it('should return false for undefined area', () => {
- expect(isAreaDefined(undefined)).to.be.false;
- });
-
- it('should return false for default area (all 0%)', () => {
- const area = { top: '0%', right: '0%', bottom: '0%', left: '0%' };
- expect(isAreaDefined(area)).to.be.false;
- });
-
- it('should return true if top is non-zero', () => {
- const area = { top: '10%', right: '0%', bottom: '0%', left: '0%' };
- expect(isAreaDefined(area)).to.be.true;
- });
-
- it('should return true if right is non-zero', () => {
- const area = { top: '0%', right: '10%', bottom: '0%', left: '0%' };
- expect(isAreaDefined(area)).to.be.true;
- });
-
- it('should return true if bottom is non-zero', () => {
- const area = { top: '0%', right: '0%', bottom: '10%', left: '0%' };
- expect(isAreaDefined(area)).to.be.true;
- });
-
- it('should return true if left is non-zero', () => {
- const area = { top: '0%', right: '0%', bottom: '0%', left: '10%' };
- expect(isAreaDefined(area)).to.be.true;
- });
-
- it('should return false for empty area object', () => {
- const area = {};
- expect(isAreaDefined(area)).to.be.false;
- });
- });
-
- describe('shouldDrawAreaOverlay', () => {
- it('should return false for undefined area', () => {
- expect(shouldDrawAreaOverlay(undefined)).to.be.false;
- });
-
- it('should return false for empty area object', () => {
- expect(shouldDrawAreaOverlay({})).to.be.false;
- });
-
- it('should return true if borderColor is defined', () => {
- expect(shouldDrawAreaOverlay({ borderColor: 'red' })).to.be.true;
- });
-
- it('should return true if borderWidth > 0', () => {
- expect(shouldDrawAreaOverlay({ borderWidth: 2 })).to.be.true;
- });
-
- it('should return false if borderWidth is 0', () => {
- expect(shouldDrawAreaOverlay({ borderWidth: 0 })).to.be.false;
- });
-
- it('should return true if backgroundColor is defined', () => {
- expect(shouldDrawAreaOverlay({ backgroundColor: 'rgba(0, 255, 0, 0.1)' })).to.be.true;
- });
-
- it('should return false if borderColor is empty string', () => {
- expect(shouldDrawAreaOverlay({ borderColor: '' })).to.be.false;
- });
-
- it('should return false if backgroundColor is empty string', () => {
- expect(shouldDrawAreaOverlay({ backgroundColor: '' })).to.be.false;
- });
- });
-
- describe('drawAreaOverlay', () => {
- let mockCtx: sinon.SinonStubbedInstance;
-
- beforeEach(() => {
- mockCtx = {
- strokeStyle: '',
- lineWidth: 0,
- fillStyle: '',
- strokeRect: sinon.stub(),
- fillRect: sinon.stub(),
- } as unknown as sinon.SinonStubbedInstance;
- });
-
- it('should draw rectangle with default style', () => {
- const canvasSize: XYSize = { x: 800, y: 600, type: 'XYSize' };
- const area = { top: '10%', right: '10%', bottom: '10%', left: '10%' };
-
- drawAreaOverlay(mockCtx as unknown as CanvasRenderingContext2D, canvasSize, area);
-
- expect(mockCtx.strokeStyle).to.equal('rgba(0, 255, 0, 0.5)');
- expect(mockCtx.lineWidth).to.equal(2);
- expect((mockCtx.strokeRect as sinon.SinonStub).calledOnce).to.be.true;
- expect((mockCtx.strokeRect as sinon.SinonStub).firstCall.args).to.deep.equal([80, 60, 640, 480]);
- });
-
- it('should draw rectangle with custom style', () => {
- const canvasSize: XYSize = { x: 100, y: 100, type: 'XYSize' };
- const area = { top: '0%', right: '0%', bottom: '0%', left: '0%' };
-
- drawAreaOverlay(mockCtx as unknown as CanvasRenderingContext2D, canvasSize, area, 'red', 5);
-
- expect(mockCtx.strokeStyle).to.equal('red');
- expect(mockCtx.lineWidth).to.equal(5);
- });
-
- it('should not draw stroke when borderWidth is 0', () => {
- const canvasSize: XYSize = { x: 100, y: 100, type: 'XYSize' };
- const area = { top: '0%', right: '0%', bottom: '0%', left: '0%' };
-
- drawAreaOverlay(mockCtx as unknown as CanvasRenderingContext2D, canvasSize, area, 'red', 0);
-
- expect((mockCtx.strokeRect as sinon.SinonStub).called).to.be.false;
- });
-
- it('should draw background fill when backgroundColor is provided', () => {
- const canvasSize: XYSize = { x: 100, y: 100, type: 'XYSize' };
- const area = { top: '10%', right: '10%', bottom: '10%', left: '10%' };
-
- drawAreaOverlay(
- mockCtx as unknown as CanvasRenderingContext2D,
- canvasSize,
- area,
- 'red',
- 2,
- 'rgba(0, 255, 0, 0.1)',
- );
-
- expect(mockCtx.fillStyle).to.equal('rgba(0, 255, 0, 0.1)');
- expect((mockCtx.fillRect as sinon.SinonStub).calledOnce).to.be.true;
- expect((mockCtx.fillRect as sinon.SinonStub).firstCall.args).to.deep.equal([10, 10, 80, 80]);
- });
-
- it('should not draw background fill when backgroundColor is not provided', () => {
- const canvasSize: XYSize = { x: 100, y: 100, type: 'XYSize' };
- const area = { top: '0%', right: '0%', bottom: '0%', left: '0%' };
-
- drawAreaOverlay(mockCtx as unknown as CanvasRenderingContext2D, canvasSize, area, 'red', 2);
-
- expect((mockCtx.fillRect as sinon.SinonStub).called).to.be.false;
- });
- });
-
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/array_helper.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/array_helper.spec.ts
deleted file mode 100644
index 8e89c6b..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/array_helper.spec.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-
-import { describe, it, before, after } from 'mocha';
-import { expect } from 'chai';
-import sinon from 'sinon';
-import ArrayHelper from '../array_helper';
-
-describe('Array Helper', () => {
- describe('init', () => {
- it('initializes an array with the given value', () => {
- const input = [0, 0, 0];
- ArrayHelper.init(input, 5);
- expect(input).to.deep.equal([5, 5, 5]);
- });
- });
-
- describe('shuffle', () => {
- let MathStub: sinon.SinonStub;
- before(() => {
- // presumably, this makes the shuffle deterministic so it can be tested
- MathStub = sinon.stub(Math as any, 'random').returns(0.5); // TODO: remove as any, and fix this type def issue
- });
-
- after(() => {
- MathStub.restore();
- });
- it('shuffles the content of an array', () => {
- const input = [1, 2, 3];
- const output = ArrayHelper.shuffle(input);
- expect(output).to.be.an('Array').with.length(3);
- expect(output).to.not.deep.equal([1, 2, 3]);
- expect(output).to.be.an('Array').that.contains(1);
- expect(output).to.be.an('Array').that.contains(2);
- expect(output).to.be.an('Array').that.contains(3);
- });
- });
-
- describe('toPointList', () => {
- it('converts an Array to a List of points', () => {
- const input = [[1, 2], [2, 2], [3, 2]];
- expect(ArrayHelper.toPointList(input)).to.equal('[[1,2],\r\n[2,2],\r\n[3,2]]');
- });
- });
-
- describe('threshold', () => {
- it('returns all elements above the given threshold', () => {
- const input = [1, 2, 3];
- expect(ArrayHelper.threshold(input, 2, (score) => score * 1.5)).to.deep.equal([2, 3]);
- });
- });
-
- describe('maxIndex', () => {
- it('gets the index of the biggest element in the array', () => {
- const input = [1, 2, 3];
- expect(ArrayHelper.maxIndex(input)).to.equal(2);
- });
- });
-
- describe('max', () => {
- it('gets the biggest element in the array', () => {
- const input = [1, 3, 2];
- expect(ArrayHelper.max(input)).to.equal(3);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/browser/mediaDevices.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/browser/mediaDevices.spec.ts
deleted file mode 100644
index 3e4abe2..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/browser/mediaDevices.spec.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import { enumerateDevices, getUserMedia } from '../../mediaDevices';
-
-describe('mediaDevices (browser)', () => {
- describe('enumerateDevices', () => {
- it('rejects with an error if enumerateDevices is not supported in browser version', async () => {
- const origEnumerateDevices = navigator.mediaDevices.enumerateDevices;
- (navigator.mediaDevices as any).enumerateDevices = undefined;
- try {
- await enumerateDevices();
- expect.fail('Should have thrown due to missing enumerateDevices');
- } catch (err) {
- expect(err).to.exist;
- } finally {
- (navigator.mediaDevices as any).enumerateDevices = origEnumerateDevices;
- }
- });
- it('returns a Promise', () => {
- expect(enumerateDevices()).to.be.a('Promise');
- });
- it('resolves with an Array of InputDeviceInfo', async () => {
- const d = await enumerateDevices();
- expect(d).to.be.an('Array').of.length.greaterThan(1);
- console.warn('* d=', d);
- expect(d[0]).to.be.an.instanceof(InputDeviceInfo);
- });
- });
- describe('getUserMedia', () => {
- it('rejects with an error if getUserMedia is not supported', async () => {
- const origGetUserMedia = navigator.mediaDevices.getUserMedia;
- (navigator.mediaDevices as any).getUserMedia = undefined;
- try {
- await getUserMedia({});
- expect.fail('Should have thrown due to missing getUserMedia');
- } catch (err) {
- expect(err).to.exist;
- } finally {
- (navigator.mediaDevices as any).getUserMedia = origGetUserMedia;
- }
- });
- it('returns a Promise', () => {
- expect(getUserMedia({})).to.be.a('Promise');
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/cluster.spec.js b/quagga2/quagga2-1.12.1/src/common/test/cluster.spec.js
deleted file mode 100644
index f04b7a3..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/cluster.spec.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import cluster from '../cluster';
-
-describe('cluster module', () => {
- it('cluster.create');
- it('cluster.createPoint');
- describe('cluster object', () => {
- let testCluster;
- beforeEach(() => testCluster = cluster.create());
- it('i have no idea what im testing here');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/cv_utils.spec.js b/quagga2/quagga2-1.12.1/src/common/test/cv_utils.spec.js
deleted file mode 100644
index 64825bc..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/cv_utils.spec.js
+++ /dev/null
@@ -1,1265 +0,0 @@
-
-const { describe, it, beforeEach } = require('mocha');
-const { expect } = require('chai');
-const {
- imageRef,
- calculatePatchSize,
- _parseCSSDimensionValues,
- _dimensionsConverters,
- computeImageArea,
- computeIntegralImage,
- computeIntegralImage2,
- thresholdImage,
- computeHistogram,
- sharpenLine,
- determineOtsuThreshold,
- otsuThreshold,
- computeBinaryImage,
- cluster,
- Tracer,
- dilate,
- erode,
- subtract,
- bitwiseOr,
- countNonZero,
- topGeneric,
- halfSample,
- hsv2rgb,
- computeGray,
- grayAndHalfSampleFromCanvasData,
- _computeDivisors,
- DILATE,
- ERODE,
-} = require('../cv_utils');
-
-describe('CV Utils', () => {
- describe('imageRef', () => {
- it('gets the image Reference for a coordinate', () => {
- const res = imageRef(1, 2);
- expect(res.x).to.equal(1);
- expect(res.y).to.equal(2);
- expect(res.toVec2()[0]).to.equal(1);
- });
-
- it('toVec2 should return a 2D vector', () => {
- const res = imageRef(3, 4);
- const vec = res.toVec2();
- expect(vec).to.have.lengthOf(2);
- expect(vec[0]).to.equal(3);
- expect(vec[1]).to.equal(4);
- });
-
- it('toVec3 should return a 3D vector with 1 as third component', () => {
- const res = imageRef(5, 6);
- const vec = res.toVec3();
- expect(vec).to.have.lengthOf(3);
- expect(vec[0]).to.equal(5);
- expect(vec[1]).to.equal(6);
- expect(vec[2]).to.equal(1);
- });
-
- it('round should round positive coordinates correctly', () => {
- const res = imageRef(2.3, 4.7);
- res.round();
- expect(res.x).to.equal(2);
- expect(res.y).to.equal(5);
- });
-
- it('round should round negative coordinates correctly', () => {
- const res = imageRef(-2.3, -4.7);
- res.round();
- expect(res.x).to.equal(-3); // Math.floor(-2.3 - 0.5) = Math.floor(-2.8) = -3
- expect(res.y).to.equal(-6); // Math.floor(-4.7 - 0.5) = Math.floor(-5.2) = -6
- });
-
- it('round should handle edge case 0.5', () => {
- const res = imageRef(1.5, 2.5);
- res.round();
- expect(res.x).to.equal(2);
- expect(res.y).to.equal(3);
- });
-
- it('should handle zero coordinates', () => {
- const res = imageRef(0, 0);
- expect(res.x).to.equal(0);
- expect(res.y).to.equal(0);
- });
-
- it('should handle very large coordinates', () => {
- const res = imageRef(999999, 888888);
- expect(res.x).to.equal(999999);
- expect(res.y).to.equal(888888);
- });
-
- it('should handle Infinity', () => {
- const res = imageRef(Infinity, -Infinity);
- expect(res.x).to.equal(Infinity);
- expect(res.y).to.equal(-Infinity);
- });
-
- it('should handle NaN', () => {
- const res = imageRef(NaN, NaN);
- expect(res.x).to.be.NaN;
- expect(res.y).to.be.NaN;
- });
- });
-
- describe('calculatePatchSize', () => {
- it('should return expected patch size for valid image dimensions', () => {
- const expected = { x: 32, y: 32 };
- const patchSize = calculatePatchSize('medium', { x: 640, y: 480 });
-
- expect(patchSize).to.deep.equal(expected);
- });
-
- it('should return different patch sizes based on patchSize setting', () => {
- const imageSize = { x: 640, y: 480 };
-
- // Different patchSize settings should produce different results
- const medium = calculatePatchSize('medium', imageSize);
- const large = calculatePatchSize('large', imageSize);
- const small = calculatePatchSize('small', imageSize);
-
- // Larger patchSize setting = larger patches = fewer patches
- expect(large.x).to.be.greaterThan(medium.x);
- expect(medium.x).to.be.greaterThan(small.x);
- });
-
- // Test for issue #218: calculatePatchSize should return fallback for difficult dimensions
- it('should return image size as fallback for dimensions that cannot produce optimal patch size', () => {
- // Small prime dimensions are difficult to find common divisors for
- // The function should fall back to using image size instead of returning null
- const patchSize = calculatePatchSize('medium', { x: 7, y: 11 });
-
- // The function should return the image size as fallback
- expect(patchSize).to.deep.equal({ x: 7, y: 11 });
- });
-
- it('should return minimum 1x1 for zero-sized images', () => {
- // Edge case: zero-sized image should return 1x1 minimum
- const patchSize = calculatePatchSize('medium', { x: 0, y: 0 });
-
- expect(patchSize).to.deep.equal({ x: 1, y: 1 });
- });
-
- it('should always return a valid object, never null', () => {
- // Test various edge cases to ensure we always get a valid return
- const testCases = [
- { x: 7, y: 11 }, // small primes
- { x: 1, y: 1 }, // minimum size
- { x: 0, y: 0 }, // zero size
- { x: 13, y: 17 }, // larger primes
- ];
-
- testCases.forEach(size => {
- const patchSize = calculatePatchSize('medium', size);
- expect(patchSize).to.be.an('object');
- expect(patchSize).to.have.property('x').that.is.a('number');
- expect(patchSize).to.have.property('y').that.is.a('number');
- expect(patchSize.x).to.be.at.least(1);
- expect(patchSize.y).to.be.at.least(1);
- });
- });
- });
-
- describe('_parseCSSDimensionValues', () => {
- it('should convert a percentual value correctly', () => {
- const expected = {
- value: 10,
- unit: '%',
- };
- const result = _parseCSSDimensionValues('10%');
-
- expect(result).to.deep.equal(expected);
- });
-
- it('should convert a 0% value correctly', () => {
- const expected = {
- value: 100,
- unit: '%',
- };
- const result = _parseCSSDimensionValues('100%');
-
- expect(result).to.deep.equal(expected);
- });
-
- it('should convert a 100% value correctly', () => {
- const expected = {
- value: 0,
- unit: '%',
- };
- const result = _parseCSSDimensionValues('0%');
-
- expect(result).to.deep.equal(expected);
- });
-
- it('should convert a pixel value to percentage', () => {
- const expected = {
- value: 26.3,
- unit: '%',
- };
- const result = _parseCSSDimensionValues('26.3px');
-
- // console.log(result);
- expect(result).to.deep.equal(expected);
- });
- });
-
- describe('_dimensionsConverters', () => {
- let context;
-
- beforeEach(() => {
- context = {
- width: 640,
- height: 480,
- };
- });
-
- it('should convert a top-value correctly', () => {
- const expected = 48;
- const result = _dimensionsConverters.top({ value: 10, unit: '%' }, context);
-
- expect(result).to.be.equal(expected);
- });
-
- it('should convert a right-value correctly', () => {
- const expected = 640 - 128;
- const result = _dimensionsConverters.right({ value: 20, unit: '%' }, context);
-
- expect(result).to.be.equal(expected);
- });
-
- it('should convert a bottom-value correctly', () => {
- const expected = 480 - 77;
- const result = _dimensionsConverters.bottom({ value: 16, unit: '%' }, context);
-
- expect(result).to.be.equal(expected);
- });
-
- it('should convert a left-value correctly', () => {
- const expected = 57;
- const result = _dimensionsConverters.left({ value: 9, unit: '%' }, context);
-
- expect(result).to.be.equal(expected);
- });
- });
-
- describe('computeImageArea', () => {
- it('should calculate an image-area', () => {
- const expected = {
- sx: 115,
- sy: 48,
- sw: 429,
- sh: 336,
- };
- const result = computeImageArea(640, 480, {
- top: '10%',
- right: '15%',
- bottom: '20%',
- left: '18%',
- });
-
- expect(result).to.deep.equal(expected);
- });
-
- it('should calculate full image-area', () => {
- const expected = {
- sx: 0,
- sy: 0,
- sw: 640,
- sh: 480,
- };
- const result = computeImageArea(640, 480, {
- top: '0%',
- right: '0%',
- bottom: '0%',
- left: '0%',
- });
-
- expect(result).to.deep.equal(expected);
- });
- });
-
- describe('computeIntegralImage', () => {
- it('should compute integral image correctly for a 3x3 image', () => {
- const imageWrapper = {
- data: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]),
- size: { x: 3, y: 3 },
- };
- const integralWrapper = {
- data: new Uint8Array(9),
- size: { x: 3, y: 3 },
- };
- computeIntegralImage(imageWrapper, integralWrapper);
- expect(integralWrapper.data[0]).to.equal(1);
- expect(integralWrapper.data[1]).to.equal(3);
- expect(integralWrapper.data[2]).to.equal(6);
- expect(integralWrapper.data[4]).to.equal(12);
- expect(integralWrapper.data[8]).to.equal(45);
- });
-
- it('should handle a 2x2 image', () => {
- const imageWrapper = {
- data: new Uint8Array([1, 2, 3, 4]),
- size: { x: 2, y: 2 },
- };
- const integralWrapper = {
- data: new Uint8Array(4),
- size: { x: 2, y: 2 },
- };
- computeIntegralImage(imageWrapper, integralWrapper);
- expect(integralWrapper.data[0]).to.equal(1);
- expect(integralWrapper.data[1]).to.equal(3);
- expect(integralWrapper.data[2]).to.equal(4);
- expect(integralWrapper.data[3]).to.equal(10);
- });
-
- it('should produce non-decreasing values (integral property)', () => {
- const imageWrapper = {
- data: new Uint8Array([10, 20, 30, 40, 50, 60]),
- size: { x: 3, y: 2 },
- };
- const integralWrapper = {
- data: new Uint8Array(6),
- size: { x: 3, y: 2 },
- };
- computeIntegralImage(imageWrapper, integralWrapper);
- // Integral values should never decrease when moving right or down
- expect(integralWrapper.data[0]).to.be.at.most(integralWrapper.data[1]);
- expect(integralWrapper.data[1]).to.be.at.most(integralWrapper.data[2]);
- expect(integralWrapper.data[0]).to.be.at.most(integralWrapper.data[3]);
- });
- });
-
- describe('computeIntegralImage2', () => {
- it('should compute integral image correctly for a 3x3 image', () => {
- const imageWrapper = {
- data: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]),
- size: { x: 3, y: 3 },
- };
- const integralWrapper = {
- data: new Uint8Array(9),
- size: { x: 3, y: 3 },
- };
- computeIntegralImage2(imageWrapper, integralWrapper);
- expect(integralWrapper.data[4]).to.be.greaterThan(0);
- expect(integralWrapper.data[8]).to.be.greaterThan(0);
- });
-
- it('should handle a 4x4 image', () => {
- const imageWrapper = {
- data: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
- size: { x: 4, y: 4 },
- };
- const integralWrapper = {
- data: new Uint8Array(16),
- size: { x: 4, y: 4 },
- };
- computeIntegralImage2(imageWrapper, integralWrapper);
- expect(integralWrapper.data[5]).to.be.greaterThan(0);
- });
-
- it('should produce non-decreasing values (integral property)', () => {
- const imageWrapper = {
- data: new Uint8Array([10, 20, 30, 40, 50, 60]),
- size: { x: 3, y: 2 },
- };
- const integralWrapper = {
- data: new Uint8Array(6),
- size: { x: 3, y: 2 },
- };
- computeIntegralImage2(imageWrapper, integralWrapper);
- // Integral values should never decrease when moving right or down
- expect(integralWrapper.data[0]).to.be.at.most(integralWrapper.data[1]);
- expect(integralWrapper.data[1]).to.be.at.most(integralWrapper.data[2]);
- expect(integralWrapper.data[0]).to.be.at.most(integralWrapper.data[3]);
- });
- });
-
- describe('thresholdImage', () => {
- it('should threshold image correctly', () => {
- const imageWrapper = {
- data: new Uint8Array([10, 50, 100, 150, 200]),
- };
- const targetWrapper = {
- data: new Uint8Array(5),
- };
- thresholdImage(imageWrapper, 100, targetWrapper);
- expect(targetWrapper.data[0]).to.equal(1);
- expect(targetWrapper.data[1]).to.equal(1);
- expect(targetWrapper.data[2]).to.equal(0);
- expect(targetWrapper.data[3]).to.equal(0);
- expect(targetWrapper.data[4]).to.equal(0);
- });
-
- it('should use imageWrapper as target if no targetWrapper provided', () => {
- const imageWrapper = {
- data: new Uint8Array([10, 200, 50, 150]),
- };
- thresholdImage(imageWrapper, 100);
- expect(imageWrapper.data[0]).to.equal(1);
- expect(imageWrapper.data[1]).to.equal(0);
- expect(imageWrapper.data[2]).to.equal(1);
- expect(imageWrapper.data[3]).to.equal(0);
- });
-
- it('should only produce binary values (0 or 1)', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 255]),
- };
- const targetWrapper = {
- data: new Uint8Array(12),
- };
- thresholdImage(imageWrapper, 128, targetWrapper);
- // Every value should be exactly 0 or 1
- for (let i = 0; i < targetWrapper.data.length; i++) {
- expect(targetWrapper.data[i]).to.be.oneOf([0, 1]);
- }
- });
- });
-
- describe('computeHistogram', () => {
- it('should compute histogram with default 8 bits per pixel', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 50, 100, 150, 200, 255]),
- };
- const hist = computeHistogram(imageWrapper);
- expect(hist).to.be.an.instanceof(Int32Array);
- expect(hist.length).to.equal(256);
- expect(hist[0]).to.equal(1);
- expect(hist[255]).to.equal(1);
- });
-
- it('should compute histogram with 4 bits per pixel', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 16, 32, 48, 64, 128, 255]),
- };
- const hist = computeHistogram(imageWrapper, 4);
- expect(hist.length).to.equal(16);
- expect(hist[0]).to.equal(1);
- expect(hist[15]).to.equal(1);
- });
-
- it('should count pixel values correctly', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 0, 0, 128, 128, 255]),
- };
- const hist = computeHistogram(imageWrapper);
- expect(hist[0]).to.equal(3);
- expect(hist[128]).to.equal(2);
- expect(hist[255]).to.equal(1);
- });
-
- it('histogram counts should sum to total pixel count', () => {
- const imageWrapper = {
- data: new Uint8Array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]),
- };
- const hist = computeHistogram(imageWrapper);
- let sum = 0;
- for (let i = 0; i < hist.length; i++) {
- sum += hist[i];
- }
- expect(sum).to.equal(imageWrapper.data.length);
- });
- });
-
- describe('sharpenLine', () => {
- it('should sharpen a line using -1 4 -1 kernel', () => {
- const line = new Uint8Array([100, 120, 140, 120, 100]);
- const result = sharpenLine(line);
- expect(result).to.be.an.instanceof(Uint8Array);
- expect(result[0]).to.be.within(0, 255);
- expect(result[1]).to.be.within(0, 255);
- });
-
- it('should handle uniform line', () => {
- const line = new Uint8Array([128, 128, 128, 128]);
- sharpenLine(line);
- expect(line[0]).to.equal(0);
- expect(line[1]).to.equal(0);
- });
-
- it('should handle edge case with minimum values', () => {
- const line = new Uint8Array([0, 0, 0, 0]);
- sharpenLine(line);
- expect(line[0]).to.equal(0);
- });
-
- it('should handle empty array', () => {
- const line = new Uint8Array([]);
- const result = sharpenLine(line);
- expect(result).to.be.an.instanceof(Uint8Array);
- expect(result.length).to.equal(0);
- });
-
- it('should handle single element', () => {
- const line = new Uint8Array([128]);
- const result = sharpenLine(line);
- expect(result).to.be.an.instanceof(Uint8Array);
- });
-
- it('should handle two elements', () => {
- const line = new Uint8Array([100, 200]);
- const result = sharpenLine(line);
- expect(result).to.be.an.instanceof(Uint8Array);
- });
- });
-
- describe('determineOtsuThreshold', () => {
- it('should determine threshold for bimodal distribution', () => {
- const imageWrapper = {
- data: new Uint8Array([
- ...Array(50).fill(30),
- ...Array(50).fill(200),
- ]),
- };
- const threshold = determineOtsuThreshold(imageWrapper);
- expect(threshold).to.be.a('number');
- expect(threshold).to.be.at.least(0);
- expect(threshold).to.be.at.most(255);
- });
-
- it('should handle uniform image', () => {
- const imageWrapper = {
- data: new Uint8Array(100).fill(128),
- };
- const threshold = determineOtsuThreshold(imageWrapper);
- expect(threshold).to.be.a('number');
- });
-
- it('should accept bitsPerPixel parameter', () => {
- const imageWrapper = {
- data: new Uint8Array([
- ...Array(50).fill(0),
- ...Array(50).fill(255),
- ]),
- };
- const threshold = determineOtsuThreshold(imageWrapper, 4);
- expect(threshold).to.be.a('number');
- });
- });
-
- describe('otsuThreshold', () => {
- it('should compute and apply Otsu threshold', () => {
- const imageWrapper = {
- data: new Uint8Array([
- ...Array(25).fill(30),
- ...Array(25).fill(200),
- ]),
- };
- const targetWrapper = {
- data: new Uint8Array(50),
- };
- const threshold = otsuThreshold(imageWrapper, targetWrapper);
- expect(threshold).to.be.a('number');
- expect(targetWrapper.data[0]).to.be.oneOf([0, 1]);
- });
- });
-
- describe('computeBinaryImage', () => {
- it('should compute binary image using local thresholding', () => {
- const imageWrapper = {
- data: new Uint8Array(20 * 20).fill(128),
- size: { x: 20, y: 20 },
- };
- const integralWrapper = {
- data: new Uint8Array(20 * 20),
- size: { x: 20, y: 20 },
- };
- const targetWrapper = {
- data: new Uint8Array(20 * 20),
- size: { x: 20, y: 20 },
- };
- computeBinaryImage(imageWrapper, integralWrapper, targetWrapper);
- expect(targetWrapper.data).to.be.an.instanceof(Uint8Array);
- });
-
- it('should use imageWrapper as target if no targetWrapper provided', () => {
- const imageWrapper = {
- data: new Uint8Array(20 * 20).fill(128),
- size: { x: 20, y: 20 },
- };
- const integralWrapper = {
- data: new Uint8Array(20 * 20),
- size: { x: 20, y: 20 },
- };
- computeBinaryImage(imageWrapper, integralWrapper);
- expect(imageWrapper.data).to.be.an.instanceof(Uint8Array);
- });
- });
-
- describe('dilate', () => {
- it('should dilate binary image', () => {
- const inImageWrapper = {
- data: new Uint8Array([
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- ]),
- size: { x: 5, y: 5 },
- };
- const outImageWrapper = {
- data: new Uint8Array(25).fill(0),
- size: { x: 5, y: 5 },
- };
- dilate(inImageWrapper, outImageWrapper);
- expect(outImageWrapper.data[12]).to.equal(1); // center
- });
- });
-
- describe('erode', () => {
- it('should erode binary image', () => {
- const inImageWrapper = {
- data: new Uint8Array([
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- ]),
- size: { x: 5, y: 5 },
- };
- const outImageWrapper = {
- data: new Uint8Array(25),
- size: { x: 5, y: 5 },
- };
- erode(inImageWrapper, outImageWrapper);
- expect(outImageWrapper.data[12]).to.equal(1); // center should remain
- });
-
- it('should remove isolated pixels', () => {
- const inImageWrapper = {
- data: new Uint8Array([
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- ]),
- size: { x: 5, y: 5 },
- };
- const outImageWrapper = {
- data: new Uint8Array(25),
- size: { x: 5, y: 5 },
- };
- erode(inImageWrapper, outImageWrapper);
- expect(outImageWrapper.data[12]).to.equal(0); // isolated pixel removed
- });
- });
-
- describe('subtract', () => {
- it('should subtract two images', () => {
- const aImageWrapper = {
- data: new Uint8Array([100, 150, 200, 250]),
- };
- const bImageWrapper = {
- data: new Uint8Array([50, 50, 100, 100]),
- };
- const resultWrapper = {
- data: new Uint8Array(4),
- };
- subtract(aImageWrapper, bImageWrapper, resultWrapper);
- expect(resultWrapper.data[0]).to.equal(50);
- expect(resultWrapper.data[1]).to.equal(100);
- expect(resultWrapper.data[2]).to.equal(100);
- expect(resultWrapper.data[3]).to.equal(150);
- });
-
- it('should use aImageWrapper as result if no resultWrapper provided', () => {
- const aImageWrapper = {
- data: new Uint8Array([100, 150, 200]),
- };
- const bImageWrapper = {
- data: new Uint8Array([30, 50, 100]),
- };
- subtract(aImageWrapper, bImageWrapper);
- expect(aImageWrapper.data[0]).to.equal(70);
- expect(aImageWrapper.data[1]).to.equal(100);
- expect(aImageWrapper.data[2]).to.equal(100);
- });
-
- it('should not modify input images when separate result provided', () => {
- const aImageWrapper = {
- data: new Uint8Array([100, 150, 200]),
- };
- const bImageWrapper = {
- data: new Uint8Array([30, 50, 100]),
- };
- const resultWrapper = {
- data: new Uint8Array(3),
- };
- const aOriginal = [...aImageWrapper.data];
- const bOriginal = [...bImageWrapper.data];
- subtract(aImageWrapper, bImageWrapper, resultWrapper);
- // Input arrays should be unchanged
- expect([...aImageWrapper.data]).to.deep.equal(aOriginal);
- expect([...bImageWrapper.data]).to.deep.equal(bOriginal);
- });
- });
-
- describe('bitwiseOr', () => {
- it('should perform bitwise OR on two images', () => {
- const aImageWrapper = {
- data: new Uint8Array([0, 1, 0, 1]),
- };
- const bImageWrapper = {
- data: new Uint8Array([0, 0, 1, 1]),
- };
- const resultWrapper = {
- data: new Uint8Array(4),
- };
- bitwiseOr(aImageWrapper, bImageWrapper, resultWrapper);
- expect(resultWrapper.data[0]).to.equal(0);
- expect(resultWrapper.data[1]).to.equal(1);
- expect(resultWrapper.data[2]).to.equal(1);
- expect(resultWrapper.data[3]).to.equal(1);
- });
-
- it('should use aImageWrapper as result if no resultWrapper provided', () => {
- const aImageWrapper = {
- data: new Uint8Array([0, 1, 0]),
- };
- const bImageWrapper = {
- data: new Uint8Array([1, 0, 0]),
- };
- bitwiseOr(aImageWrapper, bImageWrapper);
- expect(aImageWrapper.data[0]).to.equal(1);
- expect(aImageWrapper.data[1]).to.equal(1);
- expect(aImageWrapper.data[2]).to.equal(0);
- });
-
- it('should not modify input images when separate result provided', () => {
- const aImageWrapper = {
- data: new Uint8Array([0, 1, 0, 1]),
- };
- const bImageWrapper = {
- data: new Uint8Array([1, 0, 1, 0]),
- };
- const resultWrapper = {
- data: new Uint8Array(4),
- };
- const aOriginal = [...aImageWrapper.data];
- const bOriginal = [...bImageWrapper.data];
- bitwiseOr(aImageWrapper, bImageWrapper, resultWrapper);
- // Input arrays should be unchanged
- expect([...aImageWrapper.data]).to.deep.equal(aOriginal);
- expect([...bImageWrapper.data]).to.deep.equal(bOriginal);
- });
- });
-
- describe('countNonZero', () => {
- it('should count non-zero pixels', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 1, 0, 2, 3, 0, 0, 5]),
- };
- const count = countNonZero(imageWrapper);
- expect(count).to.equal(11); // 1+2+3+5
- });
-
- it('should return 0 for all-zero image', () => {
- const imageWrapper = {
- data: new Uint8Array([0, 0, 0, 0]),
- };
- const count = countNonZero(imageWrapper);
- expect(count).to.equal(0);
- });
-
- it('should handle binary image', () => {
- const imageWrapper = {
- data: new Uint8Array([1, 0, 1, 1, 0, 1]),
- };
- const count = countNonZero(imageWrapper);
- expect(count).to.equal(4);
- });
-
- it('should handle empty image', () => {
- const imageWrapper = {
- data: new Uint8Array([]),
- };
- const count = countNonZero(imageWrapper);
- expect(count).to.equal(0);
- });
-
- it('should handle large values', () => {
- const imageWrapper = {
- data: new Uint8Array([255, 255, 255]),
- };
- const count = countNonZero(imageWrapper);
- expect(count).to.equal(765); // 255 * 3
- });
- });
-
- describe('cluster', () => {
- it('should cluster points based on threshold', () => {
- const points = [
- { x: 10, y: 10, rad: 1.0, vec: [10, 10] },
- { x: 11, y: 10, rad: 1.1, vec: [11, 10] },
- { x: 50, y: 50, rad: 1.0, vec: [50, 50] },
- { x: 51, y: 50, rad: 1.1, vec: [51, 50] },
- ];
- const clusters = cluster(points, 0.5, 'rad');
- expect(clusters).to.be.an('array');
- expect(clusters.length).to.be.at.least(1);
- });
-
- it('should use "rad" as default property', () => {
- const points = [
- { x: 10, y: 10, rad: 1.0, vec: [10, 10] },
- { x: 10, y: 10, rad: 1.05, vec: [10, 10] },
- ];
- const clusters = cluster(points, 0.1);
- expect(clusters).to.be.an('array');
- });
- });
-
- describe('Tracer', () => {
- describe('trace', () => {
- it('should trace a line through points', () => {
- const points = [
- { x: 10, y: 10 },
- { x: 15, y: 12 },
- { x: 20, y: 14 },
- { x: 25, y: 16 },
- ];
- const vec = [5, 2];
- const result = Tracer.trace(points, vec);
- expect(result).to.be.an('array');
- expect(result.length).to.be.at.least(1);
- });
-
- it('should handle single point', () => {
- const points = [{ x: 10, y: 10 }];
- const vec = [5, 2];
- const result = Tracer.trace(points, vec);
- expect(result).to.be.an('array');
- expect(result.length).to.equal(1);
- });
- });
- });
-
- describe('topGeneric', () => {
- it('should return top N items based on score function', () => {
- const list = [
- { value: 10 },
- { value: 50 },
- { value: 30 },
- { value: 70 },
- { value: 20 },
- ];
- const scoreFunc = (item) => item.value;
- const result = topGeneric(list, 3, scoreFunc);
- expect(result).to.be.an('array');
- expect(result.length).to.equal(3);
- expect(result[0].item).to.exist;
- });
-
- it('should handle requesting more items than available', () => {
- const list = [
- { value: 10 },
- { value: 20 },
- ];
- const scoreFunc = (item) => item.value;
- const result = topGeneric(list, 5, scoreFunc);
- expect(result).to.be.an('array');
- expect(result.length).to.equal(5);
- });
- });
-
- describe('halfSample', () => {
- it('should downsample image by factor of 2', () => {
- const inImgWrapper = {
- data: new Uint8Array([
- 10, 20, 30, 40,
- 50, 60, 70, 80,
- 90, 100, 110, 120,
- 130, 140, 150, 160,
- ]),
- size: { x: 4, y: 4 },
- };
- const outImgWrapper = {
- data: new Uint8Array(4),
- size: { x: 2, y: 2 },
- };
- halfSample(inImgWrapper, outImgWrapper);
- expect(outImgWrapper.data[0]).to.be.a('number');
- expect(outImgWrapper.data[0]).to.be.within(0, 255);
- expect(outImgWrapper.data.length).to.equal(4);
- });
-
- it('should average 2x2 blocks correctly', () => {
- const inImgWrapper = {
- data: new Uint8Array([
- 100, 100, 200, 200,
- 100, 100, 200, 200,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- ]),
- size: { x: 4, y: 4 },
- };
- const outImgWrapper = {
- data: new Uint8Array(4),
- size: { x: 2, y: 2 },
- };
- halfSample(inImgWrapper, outImgWrapper);
- expect(outImgWrapper.data[0]).to.equal(100);
- expect(outImgWrapper.data[1]).to.equal(200);
- expect(outImgWrapper.data[2]).to.equal(0);
- expect(outImgWrapper.data[3]).to.equal(0);
- });
-
- it('should handle 1x1 image', () => {
- const inImgWrapper = {
- data: new Uint8Array([128, 128, 128, 128]),
- size: { x: 2, y: 2 },
- };
- const outImgWrapper = {
- data: new Uint8Array(1),
- size: { x: 1, y: 1 },
- };
- halfSample(inImgWrapper, outImgWrapper);
- expect(outImgWrapper.data[0]).to.equal(128);
- });
- });
-
- describe('hsv2rgb', () => {
- it('should convert HSV to RGB (red)', () => {
- const hsv = [0, 1, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb[0]).to.equal(255);
- expect(rgb[1]).to.equal(0);
- expect(rgb[2]).to.equal(0);
- });
-
- it('should convert HSV to RGB (green)', () => {
- const hsv = [120, 1, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb[0]).to.equal(0);
- expect(rgb[1]).to.equal(255);
- expect(rgb[2]).to.equal(0);
- });
-
- it('should convert HSV to RGB (blue)', () => {
- const hsv = [240, 1, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb[0]).to.equal(0);
- expect(rgb[1]).to.equal(0);
- expect(rgb[2]).to.equal(255);
- });
-
- it('should handle grayscale (saturation = 0)', () => {
- const hsv = [0, 0, 0.5];
- const rgb = hsv2rgb(hsv);
- expect(rgb[0]).to.be.closeTo(127, 1);
- expect(rgb[1]).to.be.closeTo(127, 1);
- expect(rgb[2]).to.be.closeTo(127, 1);
- });
-
- it('should use provided rgb array', () => {
- const hsv = [60, 1, 1];
- const rgb = [0, 0, 0];
- const result = hsv2rgb(hsv, rgb);
- expect(result).to.equal(rgb);
- expect(rgb[0]).to.equal(255);
- expect(rgb[1]).to.equal(255);
- expect(rgb[2]).to.equal(0);
- });
-
- it('should handle hue >= 360', () => {
- const hsv = [400, 1, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb).to.be.an('array');
- expect(rgb[0]).to.be.within(0, 255);
- expect(rgb[1]).to.be.within(0, 255);
- expect(rgb[2]).to.be.within(0, 255);
- });
-
- it('should handle negative hue', () => {
- const hsv = [-60, 1, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb).to.be.an('array');
- });
-
- it('should handle saturation > 1', () => {
- const hsv = [120, 2, 1];
- const rgb = hsv2rgb(hsv);
- expect(rgb).to.be.an('array');
- });
-
- it('should handle value > 1', () => {
- const hsv = [120, 1, 2];
- const rgb = hsv2rgb(hsv);
- expect(rgb).to.be.an('array');
- });
-
- it('should always produce RGB values in valid range [0-255]', () => {
- // Test various HSV combinations
- const testCases = [
- [0, 0, 0], [0, 0, 0.5], [0, 0, 1],
- [60, 0.5, 0.5], [120, 1, 1], [180, 0.3, 0.7],
- [240, 0.8, 0.6], [300, 1, 1], [359, 1, 1],
- ];
- testCases.forEach((hsv) => {
- const rgb = hsv2rgb(hsv);
- rgb.forEach((value, i) => {
- expect(value).to.be.at.least(0, `RGB[${i}] < 0 for HSV ${JSON.stringify(hsv)}`);
- expect(value).to.be.at.most(255, `RGB[${i}] > 255 for HSV ${JSON.stringify(hsv)}`);
- expect(Number.isInteger(value)).to.be.true;
- });
- });
- });
- });
-
- describe('computeGray', () => {
- it('should convert RGBA to grayscale using luminance formula', () => {
- const imageData = new Uint8Array([
- 255, 0, 0, 255, // red pixel
- 0, 255, 0, 255, // green pixel
- 0, 0, 255, 255, // blue pixel
- ]);
- const outArray = new Uint8Array(3);
- computeGray(imageData, outArray);
- expect(outArray[0]).to.be.closeTo(76, 1); // red luminance
- expect(outArray[1]).to.be.closeTo(150, 1); // green luminance
- expect(outArray[2]).to.be.closeTo(29, 1); // blue luminance
- });
-
- it('should handle singleChannel mode', () => {
- const imageData = new Uint8Array([
- 100, 150, 200, 255,
- 50, 75, 100, 255,
- ]);
- const outArray = new Uint8Array(2);
- computeGray(imageData, outArray, { singleChannel: true });
- expect(outArray[0]).to.equal(100);
- expect(outArray[1]).to.equal(50);
- });
-
- it('should handle white pixel', () => {
- const imageData = new Uint8Array([255, 255, 255, 255]);
- const outArray = new Uint8Array(1);
- computeGray(imageData, outArray);
- expect(outArray[0]).to.be.closeTo(255, 1);
- });
-
- it('should handle black pixel', () => {
- const imageData = new Uint8Array([0, 0, 0, 255]);
- const outArray = new Uint8Array(1);
- computeGray(imageData, outArray);
- expect(outArray[0]).to.equal(0);
- });
-
- it('should treat transparent pixels as white regardless of RGB values', () => {
- // Transparent black (0,0,0,0) should be treated as white
- const imageData = new Uint8Array([
- 0, 0, 0, 0, // transparent black
- ]);
- const outArray = new Uint8Array(1);
- computeGray(imageData, outArray);
- // Result should be 255 (white) because alpha=0
- expect(outArray[0]).to.equal(255);
- // Alpha channel should NOT be modified (imageData not used after computeGray)
- expect(imageData[3]).to.equal(0);
- });
-
- it('should handle transparent white as white', () => {
- // Transparent white (255,255,255,0) should still be white
- const imageData = new Uint8Array([
- 255, 255, 255, 0, // transparent white
- ]);
- const outArray = new Uint8Array(1);
- computeGray(imageData, outArray);
- // Result should be 255 (white)
- expect(outArray[0]).to.equal(255);
- // Alpha channel should NOT be modified
- expect(imageData[3]).to.equal(0);
- });
-
- it('should handle semi-transparent pixels by their RGB value', () => {
- // Semi-transparent red (255,0,0,128) should use RGB red luminance
- const imageData = new Uint8Array([
- 255, 0, 0, 128, // semi-transparent red
- ]);
- const outArray = new Uint8Array(1);
- computeGray(imageData, outArray);
- // Result should be red luminance (~76), alpha=128 is not fully transparent
- expect(outArray[0]).to.be.closeTo(76, 1);
- // Alpha channel should NOT be modified (not fully transparent)
- expect(imageData[3]).to.equal(128);
- });
-
- it('should handle fully opaque pixels with various alpha values', () => {
- // Same RGB but different alpha should produce same grayscale output (if not alpha=0)
- const imageData = new Uint8Array([
- 255, 0, 0, 255, // fully opaque red
- 255, 0, 0, 128, // semi-transparent red
- 255, 0, 0, 1, // barely opaque red
- ]);
- const outArray = new Uint8Array(3);
- computeGray(imageData, outArray);
- // All three should produce the same grayscale red luminance (none are alpha=0)
- expect(outArray[0]).to.be.closeTo(76, 1);
- expect(outArray[1]).to.be.closeTo(76, 1);
- expect(outArray[2]).to.be.closeTo(76, 1);
- // Alpha channels should NOT be modified
- expect(imageData[3]).to.equal(255);
- expect(imageData[7]).to.equal(128);
- expect(imageData[11]).to.equal(1);
- });
-
- it('should handle PNG with transparent background and opaque content', () => {
- // Simulating a PNG: transparent areas + opaque black text
- const imageData = new Uint8Array([
- 0, 0, 0, 0, // transparent (background)
- 0, 0, 0, 255, // opaque black (text)
- 255, 255, 255, 0, // transparent white (background)
- 0, 0, 0, 255, // opaque black (text)
- ]);
- const outArray = new Uint8Array(4);
- computeGray(imageData, outArray);
- // All transparent areas (alpha=0) should become white (255) in grayscale output
- // All opaque areas should use their RGB values
- expect(outArray[0]).to.equal(255); // transparent black -> white
- expect(outArray[1]).to.equal(0); // opaque black -> black
- expect(outArray[2]).to.equal(255); // transparent white -> white
- expect(outArray[3]).to.equal(0); // opaque black -> black
- // Alpha channels should NOT be modified (imageData not used after computeGray)
- expect(imageData[3]).to.equal(0); // first pixel alpha (unchanged)
- expect(imageData[7]).to.equal(255); // second pixel alpha (unchanged)
- expect(imageData[11]).to.equal(0); // third pixel alpha (unchanged)
- expect(imageData[15]).to.equal(255); // fourth pixel alpha (unchanged)
- });
- });
-
- describe('grayAndHalfSampleFromCanvasData', () => {
- it('should convert to grayscale and downsample', () => {
- const canvasData = new Uint8Array([
- 100, 100, 100, 255, 150, 150, 150, 255,
- 100, 100, 100, 255, 150, 150, 150, 255,
- 200, 200, 200, 255, 250, 250, 250, 255,
- 200, 200, 200, 255, 250, 250, 250, 255,
- ]);
- const size = { x: 2, y: 4 };
- const outArray = new Uint8Array(2);
- grayAndHalfSampleFromCanvasData(canvasData, size, outArray);
- expect(outArray).to.be.an.instanceof(Uint8Array);
- expect(outArray.length).to.equal(2);
- expect(outArray[0]).to.be.within(0, 255);
- });
- });
-
- describe('_computeDivisors', () => {
- it('should compute divisors of 12', () => {
- const divisors = _computeDivisors(12);
- expect(divisors).to.deep.equal([1, 2, 3, 4, 6, 12]);
- });
-
- it('should compute divisors of prime number', () => {
- const divisors = _computeDivisors(13);
- expect(divisors).to.deep.equal([1, 13]);
- });
-
- it('should compute divisors of 1', () => {
- const divisors = _computeDivisors(1);
- expect(divisors).to.deep.equal([1]);
- });
-
- it('should compute divisors of perfect square', () => {
- const divisors = _computeDivisors(16);
- expect(divisors).to.deep.equal([1, 2, 4, 8, 16]);
- });
-
- it('should not contain duplicate values', () => {
- // Test various numbers that historically caused duplicates
- const testNumbers = [2, 6, 12, 20, 30, 42, 56, 72, 90, 100, 110, 120, 144, 156, 640, 480];
- testNumbers.forEach((n) => {
- const divisors = _computeDivisors(n);
- const unique = [...new Set(divisors)];
- expect(divisors.length).to.equal(unique.length, `n=${n} has duplicates: ${JSON.stringify(divisors)}`);
- });
- });
-
- it('should return divisors in sorted order', () => {
- const testNumbers = [12, 30, 72, 100, 144, 640];
- testNumbers.forEach((n) => {
- const divisors = _computeDivisors(n);
- const sorted = [...divisors].sort((a, b) => a - b);
- expect(divisors).to.deep.equal(sorted, `n=${n} is not sorted`);
- });
- });
-
- it('should return only actual divisors of the input', () => {
- const testNumbers = [12, 30, 72, 100, 144, 156, 640, 480, 1920];
- testNumbers.forEach((n) => {
- const divisors = _computeDivisors(n);
- divisors.forEach((d) => {
- expect(n % d).to.equal(0, `${d} does not divide ${n} evenly`);
- });
- });
- });
-
- it('should return all divisors (completeness check)', () => {
- // For smaller numbers, verify we got ALL divisors by brute force comparison
- const testNumbers = [12, 24, 30, 60];
- testNumbers.forEach((n) => {
- const divisors = _computeDivisors(n);
- // Find all actual divisors by brute force
- const allDivisors = [];
- for (let i = 1; i <= n; i++) {
- if (n % i === 0) allDivisors.push(i);
- }
- expect(divisors).to.deep.equal(allDivisors, `n=${n} missing divisors`);
- });
- });
-
- it('should handle 0', () => {
- const divisors = _computeDivisors(0);
- // Zero is a special case: every integer divides 0, but returning infinite divisors
- // is not practical. Convention: return empty array.
- expect(divisors).to.be.an('array');
- expect(divisors).to.have.lengthOf(0);
- });
-
- it('should handle negative numbers', () => {
- const divisors = _computeDivisors(-12);
- // Negative numbers technically have divisors (e.g., -12 has Âą1, Âą2, Âą3, Âą4, Âą6, Âą12)
- // but this complicates the API. Convention: only compute for positive integers.
- expect(divisors).to.be.an('array');
- expect(divisors).to.have.lengthOf(0);
- });
-
- it('should handle Infinity', () => {
- const divisors = _computeDivisors(Infinity);
- // Infinity has no finite divisors
- expect(divisors).to.be.an('array');
- expect(divisors).to.have.lengthOf(0);
- });
-
- it('should handle NaN', () => {
- const divisors = _computeDivisors(NaN);
- // Not a number - no meaningful divisors exist
- expect(divisors).to.be.an('array');
- expect(divisors).to.have.lengthOf(0);
- });
-
- it('should handle non-integer values', () => {
- const divisors = _computeDivisors(12.5);
- // Non-integers: the function tests integer values i where n % i === 0
- // For 12.5: 12.5 % 1 = 0.5, 12.5 % 2 = 0.5, etc. - no integer divisors!
- // Only values like 2.5, 5, 12.5 would mathematically divide evenly, but we only test integers
- expect(divisors).to.be.an('array');
- expect(divisors).to.have.lengthOf(0);
- });
- });
-
- describe('DILATE and ERODE constants', () => {
- it('should have DILATE constant defined', () => {
- expect(DILATE).to.equal(1);
- });
-
- it('should have ERODE constant defined', () => {
- expect(ERODE).to.equal(2);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/events.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/events.spec.ts
deleted file mode 100644
index f42bca2..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/events.spec.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { describe, it, beforeEach } from 'mocha';
-import { expect } from 'chai';
-
-import sinon, { SinonSpy } from 'sinon';
-import Events from '../events';
-
-describe('Events', () => {
- beforeEach(() => {
- Events.unsubscribe();
- });
-
- describe('subscribe', () => {
- it('should call one callback for a single event', () => {
- const callbackA = sinon.stub();
- const callbackB = sinon.stub();
-
- Events.subscribe('test', callbackA);
- Events.subscribe('test', callbackB);
- Events.publish('test');
-
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
- });
-
- it('should call one callback twice if published twice', () => {
- const callback = sinon.stub();
-
- Events.subscribe('test', callback);
-
- Events.publish('test');
- Events.publish('test');
-
- expect(callback.calledTwice).to.be.equal(true);
- });
-
- it('should call the callback asynchronously', (done) => {
- const test = {
- callback: (): void => {
-
- },
- };
-
- sinon.stub(test, 'callback').callsFake(() => {
- expect((test.callback as SinonSpy).calledOnce).to.equal(true);
- done();
- });
- Events.subscribe('test', test.callback, true);
- Events.publish('test');
- expect((test.callback as SinonSpy).called).to.equal(false);
- });
- });
-
- describe('once', () => {
- it('should call the callback once, even when published twice', () => {
- const callbackA = sinon.stub();
- const callbackB = sinon.stub();
-
- Events.once('test', callbackA);
- Events.subscribe('test', callbackB);
-
- Events.publish('test');
- Events.publish('test');
-
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledTwice).to.be.equal(true);
- });
- });
-
- describe('unsubscribe', () => {
- it('should unsubscribe all callbacks from a single event', () => {
- const callbackA = sinon.stub();
- const callbackB = sinon.stub();
- const callbackC = sinon.stub();
-
- Events.subscribe('test', callbackA);
- Events.subscribe('test', callbackB);
- Events.subscribe('testC', callbackC);
-
- Events.publish('test');
-
- expect(callbackC.called).to.be.equal(false);
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
-
- Events.publish('testC');
-
- expect(callbackC.calledOnce).to.be.equal(true);
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
-
- Events.unsubscribe('test');
- Events.publish('test');
-
- expect(callbackC.calledOnce).to.be.equal(true);
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
- });
-
- it('should unsubscribe a single callback from a single event', () => {
- const callbackA = sinon.stub();
- const callbackB = sinon.stub();
-
- Events.subscribe('test', callbackA);
- Events.subscribe('test', callbackB);
-
- Events.publish('test');
-
- expect(callbackA.calledOnce).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
-
-
- Events.unsubscribe('test', callbackB);
- Events.publish('test');
-
- expect(callbackA.calledTwice).to.be.equal(true);
- expect(callbackB.calledOnce).to.be.equal(true);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/image_wrapper.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/image_wrapper.spec.ts
deleted file mode 100644
index cddfd2f..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/image_wrapper.spec.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-import { describe, it, beforeEach } from 'mocha';
-import { expect } from 'chai';
-import ImageWrapper from '../image_wrapper';
-
-describe('Image Wrapper', () => {
- it('constructs', () => {
- const iw = new ImageWrapper({ x: 320, y: 240, type: 'XYSize' }, undefined, Uint8Array, true);
- expect(iw).to.be.an.instanceOf(ImageWrapper);
- expect(iw.data).to.be.a('Uint8Array').with.lengthOf(320 * 240);
- expect(iw.size).to.deep.equal({ x: 320, y: 240, type: 'XYSize' });
- });
- describe('inImageWithBorder', () => {
- let iw: ImageWrapper;
- // eslint-disable-next-line no-return-assign
- beforeEach(() => iw = new ImageWrapper({ x: 320, y: 240, type: 'XYSize' }, undefined, Uint8Array, true));
- it('returns true for location inside image', () => {
- expect(iw.inImageWithBorder({ x: 100, y: 100, type: 'XYSize' })).to.equal(true);
- });
- it('returns false for location outside image', () => {
- expect(iw.inImageWithBorder({ x: 1000, y: 1000, type: 'XYSize' })).to.equal(false);
- });
- it('returns true for locations inside border area', () => {
- expect(iw.inImageWithBorder({ x: 325, y: 245, type: 'XYSize' }, 15)).to.equal(true);
- });
- it('returns false for location outside image and border', () => {
- expect(iw.inImageWithBorder({ x: 330, y: 250, type: 'XYSize' }, 5)).to.equal(false);
- });
- it('throws with negative borders', () => {
- expect(iw.inImageWithBorder.bind(iw, { x: 320, y: 240, type: 'XYSize' }, -240)).to.throw();
- });
- });
- describe('subImageAsCopy', () => {
- let iw: ImageWrapper;
- // eslint-disable-next-line no-return-assign
- beforeEach(() => iw = new ImageWrapper({ x: 320, y: 240, type: 'XYSize' }, undefined, Uint8Array, true));
- it('returns a correctly sized image', () => {
- const testIW = iw.subImageAsCopy(new ImageWrapper({ x: 220, y: 140, type: 'XYSize' }), { x: 100, y: 100, type: 'XYSize' });
- expect(testIW).to.be.an.instanceOf(ImageWrapper);
- expect(testIW.data).to.be.a('Uint8Array').with.lengthOf(220 * 140);
- expect(testIW.size).to.deep.equal({ x: 220, y: 140, type: 'XYSize' });
- });
- it('TODO: write a test that does this with a real image and compares');
- });
- describe('set/get/getSafe', () => {
- let iw: ImageWrapper;
- // eslint-disable-next-line no-return-assign
- beforeEach(() => iw = new ImageWrapper({ x: 320, y: 240, type: 'XYSize' }, undefined, Uint8Array, true));
- it('set and get', () => {
- expect(iw.get(100, 100)).to.equal(0);
- iw.set(100, 100, 255);
- expect(iw.get(100, 100)).to.equal(255);
- });
- it('set and getSafe', () => {
- expect(iw.getSafe(100, 100)).to.equal(0);
- iw.set(100, 100, 255);
- expect(iw.getSafe(100, 100)).to.equal(255);
- });
- // Today, I learned that Uint8Array will silently ignore
- // out of bound sets, and return undefined for out of bounds
- // queries.
- it('get returns undefined for out-of-bounds', () => {
- expect(iw.get(5000, 5000)).to.equal(undefined);
- });
- it('set does nothing for out-of-bounds', () => {
- expect(iw.set.bind(iw, 5000, 5000, 5000)).to.not.throw();
- });
- it('getSafe returns undefined for out-of-bounds', () => {
- expect(iw.getSafe(5000, 5000)).to.equal(undefined);
- });
- });
- describe.skip('moments', () => {
- it('TODO');
- });
- describe('getAsRGBA', () => {
- let iw: ImageWrapper;
- // eslint-disable-next-line no-return-assign
- beforeEach(() => iw = new ImageWrapper({ x: 320, y: 240, type: 'XYSize' }, undefined, Uint8Array, true));
- it('returns a 1:1 copy by default', () => {
- iw.set(0, 0, 128);
- iw.set(200, 200, 227);
- const image = iw.getAsRGBA();
- // cy.log(`${JSON.stringify(image)}`);
- expect(image).to.be.a('Uint8ClampedArray').with.lengthOf(4 * 320 * 240);
- expect(image[0]).to.equal(128);
- expect(image[1]).to.equal(128);
- expect(image[2]).to.equal(128);
- expect(image[3]).to.equal(255);
- expect(image[4]).to.equal(0);
- const pixel = (200 * 320 + 200) * 4;
- expect(image[pixel + 0]).to.equal(227);
- expect(image[pixel + 1]).to.equal(227);
- expect(image[pixel + 2]).to.equal(227);
- expect(image[pixel + 3]).to.equal(255);
- expect(image[pixel + 4]).to.equal(0);
- });
- it('TODO: test rescaling');
- });
- describe('show', () => {
- it('TODO: create a CanvasElement and load an image into it and test this. expect it to blow up righteously in node');
- });
- describe('overlay', () => {
- it('TODO: same as show but for overlay');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/test/node/mediaDevices.spec.ts b/quagga2/quagga2-1.12.1/src/common/test/node/mediaDevices.spec.ts
deleted file mode 100644
index 2768c2d..0000000
--- a/quagga2/quagga2-1.12.1/src/common/test/node/mediaDevices.spec.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import { enumerateDevices, getUserMedia } from '../../mediaDevices';
-import Exception from '../../../quagga/Exception';
-
-describe('mediaDevices (node)', () => {
- it('enumerateDevices rejects', async () => {
- try {
- const x = await enumerateDevices();
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err: unknown) {
- const ex = err as Exception;
- expect(ex.code).to.equal(-1);
- expect(ex.message).to.include('enumerateDevices is not defined');
- }
- });
- it('getUserMedia rejects', async () => {
- try {
- const x = await getUserMedia({});
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err: unknown) {
- const ex = err as Exception;
- expect(ex.code).to.equal(-1);
- expect(ex.message).to.include('getUserMedia is not defined');
- }
- });
- it('enumerateDevices error includes helpful description when serialized', async () => {
- try {
- await enumerateDevices();
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect.fail('Should have thrown');
- } catch (err: unknown) {
- const json = JSON.stringify(err);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.include('enumerateDevices is not defined');
- expect(parsed.message).to.include('iOS');
- expect(parsed.code).to.equal(-1);
- }
- });
- it('getUserMedia error includes helpful description when serialized', async () => {
- try {
- await getUserMedia({});
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect.fail('Should have thrown');
- } catch (err: unknown) {
- const json = JSON.stringify(err);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.include('getUserMedia is not defined');
- expect(parsed.message).to.include('iOS');
- expect(parsed.code).to.equal(-1);
- }
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/common/typedefs.js b/quagga2/quagga2-1.12.1/src/common/typedefs.js
deleted file mode 100644
index 360b984..0000000
--- a/quagga2/quagga2-1.12.1/src/common/typedefs.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * typedefs.js
- * Normalizes browser-specific prefixes and provide some basic polyfills
- */
-
-if (typeof window !== 'undefined') {
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = (function () {
- return window.webkitRequestAnimationFrame
- || window.mozRequestAnimationFrame
- || window.oRequestAnimationFrame
- || window.msRequestAnimationFrame
- || function (/* function FrameRequestCallback */ callback) {
- window.setTimeout(callback, 1000 / 60);
- };
- }());
- }
-}
-
-if (typeof Math.imul !== 'function') {
- /* eslint-disable no-bitwise */
- Math.imul = function (a, b) {
- const ah = (a >>> 16) & 0xffff;
- const al = a & 0xffff;
- const bh = (b >>> 16) & 0xffff;
- const bl = b & 0xffff;
- // the shift by 0 fixes the sign on the high part
- // the final |0 converts the unsigned value into a signed value
- return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) | 0);
- };
- /* eslint-enable no-bitwise */
-}
-
-if (typeof Object.assign !== 'function') {
- Object.assign = function (target) { // .length of function is 2
-
-'use strict';
-
- if (target === null) { // TypeError if undefined or null
- throw new TypeError('Cannot convert undefined or null to object');
- }
-
- const to = Object(target);
-
- for (let index = 1; index < arguments.length; index++) {
- // eslint-disable-next-line prefer-rest-params
- const nextSource = arguments[index];
-
- if (nextSource !== null) { // Skip over if undefined or null
- // eslint-disable-next-line no-restricted-syntax
- for (const nextKey in nextSource) {
- // Avoid bugs when hasOwnProperty is shadowed
- if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
- to[nextKey] = nextSource[nextKey];
- }
- }
- }
- }
- return to;
- };
-}
diff --git a/quagga2/quagga2-1.12.1/src/config/config.dev.ts b/quagga2/quagga2-1.12.1/src/config/config.dev.ts
deleted file mode 100644
index 99aa1c8..0000000
--- a/quagga2/quagga2-1.12.1/src/config/config.dev.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { QuaggaJSConfigObject } from '../../type-definitions/quagga.d';
-
-const DevConfig: QuaggaJSConfigObject = {
- inputStream: {
- type: 'LiveStream',
- constraints: {
- width: 640,
- height: 480,
- // aspectRatio: 640/480, // optional
- facingMode: 'environment', // or user
- // deviceId: "38745983457387598375983759834"
- },
- area: {
- top: '0%',
- right: '0%',
- left: '0%',
- bottom: '0%',
- // borderColor: 'rgba(0, 255, 0, 0.5)', // uncomment to draw area border
- // borderWidth: 2, // uncomment to draw area border
- // backgroundColor: 'rgba(0, 255, 0, 0.1)', // uncomment to tint the scan area
- },
- singleChannel: false, // true: only the red color-channel is read
- debug: {
- showImageDetails: false, // logs frame grabber info, canvas size adjustments
- },
- },
- locate: true,
- canvas: {
- createOverlay: true, // set to false to skip creating overlay canvas (drawingBuffer)
- },
- decoder: {
- readers: [
- 'code_128_reader',
- ],
- debug: {
- drawBoundingBox: false,
- showFrequency: false,
- drawScanline: false,
- showPattern: false,
- printReaderInfo: false, // logs reader registration and initialization
- },
- },
- locator: {
- halfSample: true,
- patchSize: 'medium', // x-small, small, medium, large, x-large
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- showPatchSize: false, // logs calculated patch size
- showImageDetails: false, // logs image wrapper size, canvas details
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false,
- },
- },
- },
-};
-
-export default DevConfig;
diff --git a/quagga2/quagga2-1.12.1/src/config/config.node.ts b/quagga2/quagga2-1.12.1/src/config/config.node.ts
deleted file mode 100644
index e2bc363..0000000
--- a/quagga2/quagga2-1.12.1/src/config/config.node.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { QuaggaJSConfigObject } from '../../type-definitions/quagga.d';
-
-const NodeConfig: QuaggaJSConfigObject = {
- inputStream: {
- type: 'ImageStream',
- sequence: false,
- size: 800,
- area: {
- top: '0%',
- right: '0%',
- left: '0%',
- bottom: '0%',
- },
- singleChannel: false, // true: only the red color-channel is read
- },
- locate: true,
- canvas: {
- createOverlay: true, // set to false to skip creating overlay canvas (drawingBuffer)
- },
- decoder: {
- readers: [
- 'code_128_reader',
- ],
- },
- locator: {
- halfSample: true,
- patchSize: 'medium', // x-small, small, medium, large, x-large
- },
-};
-
-export default NodeConfig;
diff --git a/quagga2/quagga2-1.12.1/src/config/config.prod.ts b/quagga2/quagga2-1.12.1/src/config/config.prod.ts
deleted file mode 100644
index 153e3d6..0000000
--- a/quagga2/quagga2-1.12.1/src/config/config.prod.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { QuaggaJSConfigObject } from '../../type-definitions/quagga.d';
-
-const ProdConfig: QuaggaJSConfigObject = {
- inputStream: {
- type: 'LiveStream',
- constraints: {
- width: 640,
- height: 480,
- // aspectRatio: 640/480, // optional
- facingMode: 'environment', // or user
- // deviceId: "38745983457387598375983759834"
- },
- area: {
- top: '0%',
- right: '0%',
- left: '0%',
- bottom: '0%',
- },
- singleChannel: false, // true: only the red color-channel is read
- },
- locate: true,
- canvas: {
- createOverlay: true, // set to false to skip creating overlay canvas (drawingBuffer)
- },
- decoder: {
- readers: [
- 'code_128_reader',
- ],
- },
- locator: {
- halfSample: true,
- patchSize: 'medium', // x-small, small, medium, large, x-large
- },
-};
-
-export default ProdConfig;
diff --git a/quagga2/quagga2-1.12.1/src/config/config.ts b/quagga2/quagga2-1.12.1/src/config/config.ts
deleted file mode 100644
index a8643d0..0000000
--- a/quagga2/quagga2-1.12.1/src/config/config.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { QuaggaJSConfigObject } from '../../type-definitions/quagga.d';
-import DevConfig from './config.dev';
-import NodeConfig from './config.node';
-import ProdConfig from './config.prod';
-
-const ExportConfig: QuaggaJSConfigObject = (() => {
- let QuaggaConfig: QuaggaJSConfigObject;
- if (typeof ENV === 'undefined' || ENV.development) {
- QuaggaConfig = DevConfig;
- } else if (ENV.node) {
- QuaggaConfig = NodeConfig;
- } else {
- QuaggaConfig = ProdConfig;
- }
- return QuaggaConfig;
-})();
-
-export default ExportConfig;
diff --git a/quagga2/quagga2-1.12.1/src/decoder/barcode_decoder.js b/quagga2/quagga2-1.12.1/src/decoder/barcode_decoder.js
deleted file mode 100644
index 5d4d64f..0000000
--- a/quagga2/quagga2-1.12.1/src/decoder/barcode_decoder.js
+++ /dev/null
@@ -1,520 +0,0 @@
-/* eslint-disable import/no-cycle */
-
-/**
- * Barcode Decoder Module
- *
- * This module handles the decoding of barcodes using configured readers.
- *
- * READER ORDER GUARANTEE:
- * Readers are processed in the exact order they are specified in the `readers`
- * config array. The first reader to successfully decode the barcode wins.
- *
- * Example:
- * readers: ['ean_reader', 'upc_e_reader', 'code_128_reader']
- *
- * Decoding order:
- * 1. ean_reader attempts to decode
- * 2. If ean_reader returns null, upc_e_reader attempts to decode
- * 3. If upc_e_reader returns null, code_128_reader attempts to decode
- * 4. First non-null result is returned
- *
- * EXTERNAL READERS:
- * External readers must be registered via registerReader() before use.
- * Once registered, they follow the same ordering rules as built-in readers.
- * Their position in the `readers` array determines their priority.
- *
- * To prioritize an external reader:
- * Quagga.registerReader('my_reader', MyReader);
- * config.decoder.readers = ['my_reader', 'ean_reader']; // my_reader tried first
- */
-
-import ImageDebug from '../common/image_debug';
-import TwoOfFiveReader from '../reader/2of5_reader';
-import CodabarReader from '../reader/codabar_reader';
-import Code128Reader from '../reader/code_128_reader';
-import Code32Reader from '../reader/code_32_reader';
-import Code39Reader from '../reader/code_39_reader';
-import Code39VINReader from '../reader/code_39_vin_reader';
-import Code93Reader from '../reader/code_93_reader';
-import EAN2Reader from '../reader/ean_2_reader';
-import EAN5Reader from '../reader/ean_5_reader';
-import EAN8Reader from '../reader/ean_8_reader';
-import EANReader from '../reader/ean_reader';
-import I2of5Reader from '../reader/i2of5_reader';
-import PharmacodeReader from '../reader/pharmacode_reader';
-import UPCEReader from '../reader/upc_e_reader';
-import UPCReader from '../reader/upc_reader';
-import Bresenham from './bresenham';
-
-const READERS = {
- code_128_reader: Code128Reader,
- ean_reader: EANReader,
- ean_5_reader: EAN5Reader,
- ean_2_reader: EAN2Reader,
- ean_8_reader: EAN8Reader,
- code_39_reader: Code39Reader,
- code_39_vin_reader: Code39VINReader,
- codabar_reader: CodabarReader,
- upc_reader: UPCReader,
- upc_e_reader: UPCEReader,
- i2of5_reader: I2of5Reader,
- '2of5_reader': TwoOfFiveReader,
- code_93_reader: Code93Reader,
- code_32_reader: Code32Reader,
- pharmacode_reader: PharmacodeReader,
-};
-
-export default {
- /**
- * Registers an external/custom barcode reader.
- * Once registered, the reader can be used in config.readers array.
- * The reader's position in config.readers determines its decoding priority.
- *
- * @param name - The identifier to use in config.readers (e.g., 'my_custom_reader')
- * @param reader - The reader class (must extend BarcodeReader)
- *
- * @example
- * // Register a custom reader
- * BarcodeDecoder.registerReader('my_reader', MyCustomReader);
- *
- * // Use it with high priority (first in array)
- * config.decoder.readers = ['my_reader', 'ean_reader', 'code_128_reader'];
- */
- registerReader: (name, reader) => {
- READERS[name] = reader;
- },
- create(config, inputImageWrapper) {
- const _canvas = {
- ctx: {
- frequency: null,
- pattern: null,
- overlay: null,
- },
- dom: {
- frequency: null,
- pattern: null,
- overlay: null,
- },
- };
- const _barcodeReaders = [];
-
- initCanvas();
- initReaders();
- initConfig();
-
- function initCanvas() {
- if (typeof ENV !== 'undefined' && ENV.development && typeof document !== 'undefined') {
- const $debug = document.querySelector('#debug.detection');
- _canvas.dom.frequency = document.querySelector('canvas.frequency');
- if (!_canvas.dom.frequency) {
- _canvas.dom.frequency = document.createElement('canvas');
- _canvas.dom.frequency.className = 'frequency';
- if ($debug) {
- $debug.appendChild(_canvas.dom.frequency);
- }
- }
- if (typeof ENV !== 'undefined' && ENV.development && config.debug?.printReaderInfo) {
- console.warn('* barcode decoder initCanvas getcontext 2d');
- }
- _canvas.ctx.frequency = _canvas.dom.frequency.getContext('2d');
-
- _canvas.dom.pattern = document.querySelector('canvas.patternBuffer');
- if (!_canvas.dom.pattern) {
- _canvas.dom.pattern = document.createElement('canvas');
- _canvas.dom.pattern.className = 'patternBuffer';
- if ($debug) {
- $debug.appendChild(_canvas.dom.pattern);
- }
- }
- _canvas.ctx.pattern = _canvas.dom.pattern.getContext('2d');
-
- _canvas.dom.overlay = document.querySelector('canvas.drawingBuffer');
- if (_canvas.dom.overlay) {
- _canvas.ctx.overlay = _canvas.dom.overlay.getContext('2d');
- }
- }
- }
-
- /**
- * Initializes barcode readers from config.readers array.
- * Readers are instantiated and stored in the order they appear in config,
- * which determines their decoding priority (first in array = highest priority).
- */
- function initReaders() {
- config.readers.forEach((readerConfig) => {
- let reader;
- let configuration = {};
- let supplements = [];
-
- if (typeof readerConfig === 'object') {
- reader = readerConfig.format;
- configuration = readerConfig.config;
- } else if (typeof readerConfig === 'string') {
- reader = readerConfig;
- }
- if (typeof ENV !== 'undefined' && ENV.development && config.debug?.printReaderInfo) {
- console.log('Before registering reader: ', reader);
- }
- if (configuration.supplements) {
- supplements = configuration
- .supplements.map((supplement) => new READERS[supplement]());
- }
- try {
- const readerObj = new READERS[reader](configuration, supplements);
- _barcodeReaders.push(readerObj);
- } catch (err) {
- console.error('* Error constructing reader ', reader, err);
- throw err;
- }
- });
- if (typeof ENV !== 'undefined' && ENV.development && config.debug?.printReaderInfo) {
- console.log(`Registered Readers: ${_barcodeReaders
- .map((reader) => JSON.stringify({ format: reader.FORMAT, config: reader.config }))
- .join(', ')}`);
- }
- }
-
- function initConfig() {
- if (typeof ENV !== 'undefined' && ENV.development && typeof document !== 'undefined') {
- let i;
- const vis = [{
- node: _canvas.dom.frequency,
- prop: config.debug.showFrequency,
- }, {
- node: _canvas.dom.pattern,
- prop: config.debug.showPattern,
- }];
-
- for (i = 0; i < vis.length; i++) {
- if (vis[i].prop === true) {
- vis[i].node.style.display = 'block';
- } else {
- vis[i].node.style.display = 'none';
- }
- }
- }
- }
-
- /**
- * extend the line on both ends
- * @param {Array} line
- * @param {Number} angle
- */
- function getExtendedLine(line, angle, ext) {
- function extendLine(amount) {
- const extension = {
- y: amount * Math.sin(angle),
- x: amount * Math.cos(angle),
- };
- /* eslint-disable no-param-reassign */
- line[0].y -= extension.y;
- line[0].x -= extension.x;
- line[1].y += extension.y;
- line[1].x += extension.x;
- /* eslint-enable no-param-reassign */
- }
-
- // check if inside image
- extendLine(ext);
- while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0])
- || !inputImageWrapper.inImageWithBorder(line[1]))) {
- // eslint-disable-next-line no-param-reassign
- ext -= Math.ceil(ext / 2);
- extendLine(-ext);
- }
- return line;
- }
-
- function getLine(box) {
- return [{
- x: (box[1][0] - box[0][0]) / 2 + box[0][0],
- y: (box[1][1] - box[0][1]) / 2 + box[0][1],
- }, {
- x: (box[3][0] - box[2][0]) / 2 + box[2][0],
- y: (box[3][1] - box[2][1]) / 2 + box[2][1],
- }];
- }
-
- /**
- * Validate that barcode position is stable across adjacent Y-scanlines.
- * Real barcodes have consistent start position; tilted barcodes shift left/right as Y changes.
- * @param {Array} line The original scan line [p1, p2]
- * @param {Object} result The successful decode result with .start position
- * @param {Object} reader The reader instance that succeeded
- * @param {Object} inputImageWrapper The full image data
- * @returns {boolean} true if barcode position is stable (âĨ1 adjacent Y-line matches)
- */
- function validateAdjacentYLines(line, result, reader, inputImageWrapper) {
- // Extract original Y position and X start position
- const originalY = Math.round(line[1].y);
- const originalXStart = result.start;
- const constructorFn = reader.constructor;
- const requiredMatches = (constructorFn && constructorFn.adjacentLineValidationMatches) || 0;
-
- if (requiredMatches <= 0) {
- return true;
- }
-
- let matchCount = 0;
- let done = false;
-
- // Check YÂą1, YÂą2, YÂą3 to see if barcode appears at same X position
- for (const yOffset of [1, 2, 3]) {
- if (done) {
- break;
- }
- for (const direction of [-1, 1]) {
- if (done) {
- break;
- }
- const newY = originalY + (yOffset * direction);
-
- // Bounds check
- if (newY < 0 || newY >= inputImageWrapper.size.y) {
- continue;
- }
-
- // Create new line at adjusted Y, keeping same X range
- const newP1 = { x: line[0].x, y: newY };
- const newP2 = { x: line[1].x, y: newY };
-
- try {
- // Extract grayscale at new Y
- const newBarcodeLine = Bresenham.getBarcodeLine(inputImageWrapper, newP1, newP2);
-
- // Binarize
- Bresenham.toBinaryLine(newBarcodeLine);
-
- // Set the row for _findStart() to search in
- reader._row = newBarcodeLine.line;
-
- // Try to find barcode start at this Y
- const startFound = reader._findStart();
-
- if (startFound !== null && startFound.start === originalXStart) {
- matchCount++;
- if (matchCount >= requiredMatches) {
- done = true;
- break;
- }
- }
- } catch (e) {
- // Ignore errors, treat failures as "no match" so we can try again on the next line
- }
- }
- }
-
- const isValid = matchCount >= requiredMatches;
- return isValid;
- }
-
- /**
- * Attempts to decode a barcode from a scan line.
- * Readers are tried in order (as specified in config.readers).
- * The first reader to return a non-null result wins.
- * @param {Array} line The scan line to decode
- * @returns {Object|null} Decoded result or null if no reader succeeded
- */
- function tryDecode(line) {
- let result = null;
- let i;
- const barcodeLine = Bresenham.getBarcodeLine(inputImageWrapper, line[0], line[1]);
-
- if (typeof ENV !== 'undefined' && ENV.development && config.debug.showFrequency) {
- if (_canvas.ctx.overlay) {
- ImageDebug.drawPath(line, { x: 'x', y: 'y' }, _canvas.ctx.overlay, { color: 'red', lineWidth: 3 });
- }
- Bresenham.debug.printFrequency(barcodeLine.line, _canvas.dom.frequency);
- }
-
- Bresenham.toBinaryLine(barcodeLine);
-
- if (typeof ENV !== 'undefined' && ENV.development && config.debug.showPattern) {
- Bresenham.debug.printPattern(barcodeLine.line, _canvas.dom.pattern);
- }
-
- // Iterate readers in order - first successful decode wins
- let successfulReaderIndex = -1;
- for (i = 0; i < _barcodeReaders.length && result === null; i++) {
- // Provide image context to readers that want it (e.g., pharmacode PGM dumps)
- if (typeof _barcodeReaders[i].setImageWrapper === 'function') {
- _barcodeReaders[i].setImageWrapper(inputImageWrapper);
- }
- result = _barcodeReaders[i].decodePattern(barcodeLine.line);
- if (result !== null) {
- successfulReaderIndex = i;
- }
- }
- if (result === null) {
- return null;
- }
-
- // Validate that barcode position is stable across adjacent Y-scanlines
- // This rejects tilted barcodes that only appear valid at one specific angle
- // Only apply to PharmacodeReader (which explicitly made _findStart public for this validation)
- if (successfulReaderIndex >= 0 && _barcodeReaders[successfulReaderIndex] instanceof PharmacodeReader) {
- if (!validateAdjacentYLines(line, result, _barcodeReaders[successfulReaderIndex], inputImageWrapper)) {
- return null;
- }
- }
-
- return {
- codeResult: result,
- barcodeLine,
- };
- }
-
- /**
- * This method slices the given area apart and tries to detect a barcode-pattern
- * for each slice. It returns the decoded barcode, or null if nothing was found
- * @param {Array} box
- * @param {Array} line
- * @param {Number} lineAngle
- */
- function tryDecodeBruteForce(box, line, lineAngle) {
- const sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow((box[1][1] - box[0][1]), 2));
- let i;
- const slices = 16;
- let result = null;
- let dir;
- let extension;
- const xdir = Math.sin(lineAngle);
- const ydir = Math.cos(lineAngle);
-
- for (i = 1; i < slices && result === null; i++) {
- // move line perpendicular to angle
- // eslint-disable-next-line no-mixed-operators
- dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1);
- extension = {
- y: dir * xdir,
- x: dir * ydir,
- };
- /* eslint-disable no-param-reassign */
- line[0].y += extension.x;
- line[0].x -= extension.y;
- line[1].y += extension.x;
- line[1].x -= extension.y;
- /* eslint-enable no-param-reassign */
-
- result = tryDecode(line);
- }
- return result;
- }
-
- function getLineLength(line) {
- return Math.sqrt(
- Math.pow(Math.abs(line[1].y - line[0].y), 2)
- + Math.pow(Math.abs(line[1].x - line[0].x), 2),
- );
- }
-
- /**
- * Decodes from a full image using readers that support image-based decoding.
- * Readers are tried in order (as specified in config.readers).
- * @param {Object} imageWrapper The image to decode
- * @returns {Object|null} Decoded result or null
- */
- async function decodeFromImage(imageWrapper) {
- let result = null;
- // Iterate readers in order - first successful decode wins
- for (const reader of _barcodeReaders) {
- if (reader.decodeImage) {
- result = await reader.decodeImage(imageWrapper);
- if (result) {
- break;
- }
- }
- }
- return result;
- }
- /**
- * With the help of the configured readers (Code128 or EAN) this function tries to detect a
- * valid barcode pattern within the given area.
- * @param {Object} box The area to search in
- * @returns {Object} the result {codeResult, line, angle, pattern, threshold}
- */
- function decodeFromBoundingBox(box) {
- let line;
- const ctx = _canvas.ctx.overlay;
- let result;
-
- if (typeof ENV !== 'undefined' && ENV.development) {
- if (config.debug.drawBoundingBox && ctx) {
- ImageDebug.drawPath(box, { x: 0, y: 1 }, ctx, { color: 'blue', lineWidth: 2 });
- }
- }
-
- line = getLine(box);
- const lineLength = getLineLength(line);
- const lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x);
- line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1));
- if (line === null) {
- return null;
- }
-
- result = tryDecode(line);
- if (result === null) {
- result = tryDecodeBruteForce(box, line, lineAngle);
- }
-
- if (result === null) {
- return null;
- }
-
- if (typeof ENV !== 'undefined' && ENV.development && result && config.debug.drawScanline && ctx) {
- ImageDebug.drawPath(line, { x: 'x', y: 'y' }, ctx, { color: 'red', lineWidth: 3 });
- }
-
- return {
- codeResult: result.codeResult,
- line,
- angle: lineAngle,
- pattern: result.barcodeLine.line,
- threshold: result.barcodeLine.threshold,
- };
- }
-
- return {
- decodeFromBoundingBox(box) {
- return decodeFromBoundingBox(box);
- },
- decodeFromBoundingBoxes(boxes) {
- let i; let result;
- const barcodes = [];
- const { multiple } = config;
-
- for (i = 0; i < boxes.length; i++) {
- const box = boxes[i];
- result = decodeFromBoundingBox(box) || {};
- result.box = box;
-
- if (multiple) {
- barcodes.push(result);
- } else if (result.codeResult) {
- return result;
- }
- }
-
- return {
- barcodes,
- };
- },
- async decodeFromImage(imageWrapperIn) {
- const result = await decodeFromImage(imageWrapperIn);
- return result;
- },
- registerReader(name, reader) {
- if (READERS[name]) {
- throw new Error('cannot register existing reader', name);
- }
- READERS[name] = reader;
- },
- setReaders(readers) {
- // eslint-disable-next-line no-param-reassign
- config.readers = readers;
- _barcodeReaders.length = 0;
- initReaders();
- },
- };
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/decoder/bresenham.js b/quagga2/quagga2-1.12.1/src/decoder/bresenham.js
deleted file mode 100644
index a0c9678..0000000
--- a/quagga2/quagga2-1.12.1/src/decoder/bresenham.js
+++ /dev/null
@@ -1,197 +0,0 @@
-const Bresenham = {};
-
-const Slope = {
- DIR: {
- UP: 1,
- DOWN: -1,
- },
-};
-/**
- * Scans a line of the given image from point p1 to p2 and returns a result object containing
- * gray-scale values (0-255) of the underlying pixels in addition to the min
- * and max values.
- * @param {Object} imageWrapper
- * @param {Object} p1 The start point {x,y}
- * @param {Object} p2 The end point {x,y}
- * @returns {line, min, max}
- */
-Bresenham.getBarcodeLine = function (imageWrapper, p1, p2) {
- /* eslint-disable no-bitwise */
- let x0 = p1.x | 0;
- let y0 = p1.y | 0;
- let x1 = p2.x | 0;
- let y1 = p2.y | 0;
- /* eslint-disable no-bitwise */
- const steep = Math.abs(y1 - y0) > Math.abs(x1 - x0);
- let error;
- let y;
- let tmp;
- let x;
- const line = [];
- const imageData = imageWrapper.data;
- const width = imageWrapper.size.x;
- let val;
- let min = 255;
- let max = 0;
-
- function read(a, b) {
- val = imageData[b * width + a];
- min = val < min ? val : min;
- max = val > max ? val : max;
- line.push(val);
- }
-
- if (steep) {
- tmp = x0;
- x0 = y0;
- y0 = tmp;
-
- tmp = x1;
- x1 = y1;
- y1 = tmp;
- }
- if (x0 > x1) {
- tmp = x0;
- x0 = x1;
- x1 = tmp;
-
- tmp = y0;
- y0 = y1;
- y1 = tmp;
- }
- const deltaX = x1 - x0;
- const deltaY = Math.abs(y1 - y0);
- error = (deltaX / 2) | 0;
- y = y0;
- const yStep = y0 < y1 ? 1 : -1;
- for (x = x0; x < x1; x++) {
- if (steep) {
- read(y, x);
- } else {
- read(x, y);
- }
- error -= deltaY;
- if (error < 0) {
- y += yStep;
- error += deltaX;
- }
- }
-
- return {
- line,
- min,
- max,
- };
-};
-
-/**
- * Converts the result from getBarcodeLine into a binary representation
- * also considering the frequency and slope of the signal for more robust results
- * @param {Object} result {line, min, max}
- */
-Bresenham.toBinaryLine = function (result) {
- const { min } = result;
- const { max } = result;
- const { line } = result;
- let slope;
- let slope2;
- const center = min + (max - min) / 2;
- const extrema = [];
- let currentDir;
- let dir;
- let threshold = (max - min) / 12;
- const rThreshold = -threshold;
- let i;
- let j;
-
- // 1. find extrema
- currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN;
- extrema.push({
- pos: 0,
- val: line[0],
- });
- for (i = 0; i < line.length - 2; i++) {
- slope = (line[i + 1] - line[i]);
- slope2 = (line[i + 2] - line[i + 1]);
- if ((slope + slope2) < rThreshold && line[i + 1] < (center * 1.5)) {
- dir = Slope.DIR.DOWN;
- } else if ((slope + slope2) > threshold && line[i + 1] > (center * 0.5)) {
- dir = Slope.DIR.UP;
- } else {
- dir = currentDir;
- }
-
- if (currentDir !== dir) {
- extrema.push({
- pos: i,
- val: line[i],
- });
- currentDir = dir;
- }
- }
- extrema.push({
- pos: line.length,
- val: line[line.length - 1],
- });
-
- for (j = extrema[0].pos; j < extrema[1].pos; j++) {
- line[j] = line[j] > center ? 0 : 1;
- }
-
- // iterate over extrema and convert to binary based on avg between minmax
- for (i = 1; i < extrema.length - 1; i++) {
- if (extrema[i + 1].val > extrema[i].val) {
- threshold = (extrema[i].val + ((extrema[i + 1].val - extrema[i].val) / 3) * 2) | 0;
- } else {
- threshold = (extrema[i + 1].val + ((extrema[i].val - extrema[i + 1].val) / 3)) | 0;
- }
-
- for (j = extrema[i].pos; j < extrema[i + 1].pos; j++) {
- line[j] = line[j] > threshold ? 0 : 1;
- }
- }
-
- return {
- line,
- threshold,
- };
-};
-
-/**
- * Used for development only
- */
-Bresenham.debug = {
- printFrequency(line, canvas) {
- let i;
- const ctx = canvas.getContext('2d');
- // eslint-disable-next-line no-param-reassign
- canvas.width = line.length;
- // eslint-disable-next-line no-param-reassign
- canvas.height = 256;
-
- ctx.beginPath();
- ctx.strokeStyle = 'blue';
- for (i = 0; i < line.length; i++) {
- ctx.moveTo(i, 255);
- ctx.lineTo(i, 255 - line[i]);
- }
- ctx.stroke();
- ctx.closePath();
- },
-
- printPattern(line, canvas) {
- const ctx = canvas.getContext('2d'); let
- i;
-
- // eslint-disable-next-line no-param-reassign
- canvas.width = line.length;
- ctx.fillColor = 'black';
- for (i = 0; i < line.length; i++) {
- if (line[i] === 1) {
- ctx.fillRect(i, 0, 1, 100);
- }
- }
- },
-};
-
-export default Bresenham;
diff --git a/quagga2/quagga2-1.12.1/src/global.d.ts b/quagga2/quagga2-1.12.1/src/global.d.ts
deleted file mode 100644
index e13e820..0000000
--- a/quagga2/quagga2-1.12.1/src/global.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-interface QuaggaBuildEnvironment {
- development?: boolean;
- node?: boolean;
-}
-
-// injected by the build system
-declare const ENV: QuaggaBuildEnvironment;
diff --git a/quagga2/quagga2-1.12.1/src/input/camera_access.ts b/quagga2/quagga2-1.12.1/src/input/camera_access.ts
deleted file mode 100644
index c5a7bf3..0000000
--- a/quagga2/quagga2-1.12.1/src/input/camera_access.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-// TODO: when this file was written years ago, HTMLMediaElement.play() did not return a useful value
-// to let us know when the video started playing. Now, it does. So, we shouldn't need to run this
-// odd waitForVideo() function that polls to see if the video has started.
-import omit from 'lodash/omit';
-import { getUserMedia, enumerateDevices } from '../common/mediaDevices';
-import Exception from '../quagga/Exception';
-import type {
- MediaTrackConstraintsWithDeprecated,
- QuaggaJSCameraAccess as CameraAccessType,
-} from '../../type-definitions/quagga.d';
-
-let streamRef: MediaStream | null;
-
-function waitForVideo(video: HTMLVideoElement): Promise {
- return new Promise((resolve, reject) => {
- let attempts = 10;
-
- function checkVideo(): void {
- if (attempts > 0) {
- if (video.videoWidth > 10 && video.videoHeight > 10) {
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log(`* dev: checkVideo found ${video.videoWidth}px x ${video.videoHeight}px`);
- }
- resolve();
- } else {
- window.setTimeout(checkVideo, 500);
- }
- } else {
- reject(new Exception('Unable to play video stream. Is webcam working?', -1)); // TODO: add error code
- }
- attempts--;
- }
- checkVideo();
- });
-}
-
-/**
- * Tries to attach the camera-stream to a given video-element
- * and calls the callback function when the content is ready
- * @param {Object} constraints
- * @param {Object} video
- */
-async function initCamera(video: HTMLVideoElement | null, constraints: MediaStreamConstraints): Promise {
- const stream = await getUserMedia(constraints);
- streamRef = stream;
- if (video) {
- video.setAttribute('autoplay', 'true');
- video.setAttribute('muted', 'true');
- video.setAttribute('playsinline', 'true'); // not listed on MDN...
- // eslint-disable-next-line no-param-reassign
- video.srcObject = stream;
- video.addEventListener('loadedmetadata', () => {
- video.play().catch((err) => {
- console.warn('* Error while trying to play video stream:', err);
- });
- });
- return waitForVideo(video);
- }
- return Promise.resolve();
-}
-
-function deprecatedConstraints(videoConstraints: MediaTrackConstraintsWithDeprecated): MediaTrackConstraints {
- // Remove deprecated properties (facing, minAspectRatio, maxAspectRatio) while
- // preserving all valid MediaTrackConstraints including advanced, zoom, torch, etc.
- const normalized: MediaTrackConstraints = omit(videoConstraints, ['facing', 'minAspectRatio', 'maxAspectRatio']);
-
- if (typeof videoConstraints.minAspectRatio !== 'undefined'
- && videoConstraints.minAspectRatio > 0) {
- normalized.aspectRatio = videoConstraints.minAspectRatio;
- console.log('WARNING: Constraint \'minAspectRatio\' is deprecated; Use \'aspectRatio\' instead');
- }
- if (typeof videoConstraints.facing !== 'undefined') {
- normalized.facingMode = videoConstraints.facing;
- console.log('WARNING: Constraint \'facing\' is deprecated. Use \'facingMode\' instead\'');
- }
- return normalized;
-}
-
-// TODO: #192 I don't think there's any good reason pickConstraints should return a Promise,
-// I think it was just that way so it could be chained to other functions that did return a Promise.
-// That's not necessary with async functions being a thing, so that should be fixed.
-export function pickConstraints(videoConstraints: MediaTrackConstraintsWithDeprecated = {}): Promise {
- const video = deprecatedConstraints(videoConstraints);
-
- if (video && video.deviceId && video.facingMode) {
- delete video.facingMode;
- }
- return Promise.resolve({ audio: false, video });
-}
-
-/**
- * Enumerates video input devices, optionally filtering by constraints.
- * @param videoConstraints Optional constraints to filter devices.
- * When provided, only devices that satisfy the given constraints will be returned.
- * This works by attempting to get a media stream for each device with the constraints
- * and returning only the devices that succeed.
- * @returns Promise resolving to an array of MediaDeviceInfo for video input devices.
- */
-async function enumerateVideoDevices(
- videoConstraints?: MediaTrackConstraintsWithDeprecated,
-): Promise> {
- const devices = await enumerateDevices();
- const videoDevices = devices.filter((device: MediaDeviceInfo) => device.kind === 'videoinput');
-
- // If no constraints are provided, return all video devices
- if (!videoConstraints) {
- return videoDevices;
- }
-
- // Filter devices based on constraints by trying to get a media stream for each
- const constrainedDevices: Array = [];
-
- // Process constraints but exclude deviceId since we'll set it ourselves for each device
- const processedConstraints = deprecatedConstraints(videoConstraints);
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- const { deviceId: _, ...constraintsWithoutDeviceId } = processedConstraints;
-
- for (const device of videoDevices) {
- try {
- const constraints: MediaStreamConstraints = {
- audio: false,
- video: {
- ...constraintsWithoutDeviceId,
- deviceId: { exact: device.deviceId },
- },
- };
- const stream = await getUserMedia(constraints);
- // Stop all tracks immediately after testing
- stream.getTracks().forEach((track) => track.stop());
- constrainedDevices.push(device);
- } catch {
- // Device doesn't support the constraints, skip it.
- // This catch is intentionally empty as we're using getUserMedia to test if
- // each device supports the constraints. Errors here indicate the device
- // doesn't meet the requirements (OverconstrainedError) or other issues
- // that mean we should exclude this device from the results.
- }
- }
-
- return constrainedDevices;
-}
-
-function getActiveTrack(): MediaStreamTrack | null {
- if (!streamRef) {
- return null;
- }
- const tracks = streamRef.getVideoTracks();
- return tracks && tracks?.length ? tracks[0] : null;
-}
-
-/**
- * Returns the active MediaStream, or null if no stream is active.
- * Use this when you need access to the full stream, for example to pass to WebRTC
- * or to clone the stream. For just the video track, use getActiveTrack() instead.
- * @returns The active MediaStream, or null if no camera is currently active.
- */
-function getActiveStream(): MediaStream | null {
- return streamRef ?? null;
-}
-
-/**
- * Used for accessing information about the active stream track and available video devices.
- */
-const QuaggaJSCameraAccess: CameraAccessType = {
- requestedVideoElement: null,
- async request(video: HTMLVideoElement | null, videoConstraints?: MediaTrackConstraintsWithDeprecated): Promise {
- QuaggaJSCameraAccess.requestedVideoElement = video;
- const newConstraints = await pickConstraints(videoConstraints);
- return initCamera(video, newConstraints);
- },
- release(): Promise {
- const tracks = streamRef && streamRef.getVideoTracks();
- if (QuaggaJSCameraAccess.requestedVideoElement !== null) {
- QuaggaJSCameraAccess.requestedVideoElement.pause();
- }
- return new Promise((resolve) => {
- setTimeout(() => {
- if (tracks && tracks.length) {
- tracks.forEach((track) => track.stop());
- }
- streamRef = null;
- QuaggaJSCameraAccess.requestedVideoElement = null;
- resolve();
- }, 0);
- });
- },
- enumerateVideoDevices,
- getActiveStream,
- getActiveStreamLabel(): string {
- const track = getActiveTrack();
- return track ? track.label : '';
- },
- getActiveTrack,
- async disableTorch() {
- const track = getActiveTrack();
- // TODO: should we acquire camera access even if there's no current camera open?
- // TODO: what happens on iOS or another device where torch isn't supported at all? Should we throw an error?
- if (track) {
- try {
- await track.applyConstraints({ advanced: [{ torch: false }] } as MediaTrackConstraintSet);
- } catch (err) {
- if (err instanceof OverconstrainedError) {
- console.warn('quagga2/CameraAccess: Torch not supported on this device');
- }
- throw err;
- }
- }
- },
- async enableTorch() {
- const track = getActiveTrack();
- // TODO: should we acquire camera access even if there's no current camera open?
- // TODO: what happens on iOS or another device where torch isn't supported at all? Should we throw an error?
- if (track) {
- try {
- await track.applyConstraints({ advanced: [{ torch: true }] } as MediaTrackConstraintSet);
- } catch (err) {
- if (err instanceof OverconstrainedError) {
- console.warn('quagga2/CameraAccess: Torch not supported on this device');
- }
- throw err;
- }
- }
- },
-};
-
-export default QuaggaJSCameraAccess;
diff --git a/quagga2/quagga2-1.12.1/src/input/exif_helper.js b/quagga2/quagga2-1.12.1/src/input/exif_helper.js
deleted file mode 100644
index ad547d3..0000000
--- a/quagga2/quagga2-1.12.1/src/input/exif_helper.js
+++ /dev/null
@@ -1,151 +0,0 @@
-// NOTE: (SOME OF) THIS IS BROWSER ONLY CODE. Node does not have 'atob' built in, nor XMLHttpRequest.
-// How exactly is this set of functions used in Quagga? Do we need the browser specific code? Do we
-// need to port any part of this that doesn't work in Node to node?
-
-// Tags scraped from https://github.com/exif-js/exif-js
-const ExifTags = { 0x0112: 'orientation' };
-export const AvailableTags = Object.keys(ExifTags).map((key) => ExifTags[key]);
-
-export function findTagsInObjectURL(src, tags = AvailableTags) {
- if (/^blob:/i.test(src)) {
- return objectURLToBlob(src)
- .then(readToBuffer)
- .then((buffer) => findTagsInBuffer(buffer, tags));
- }
- return Promise.resolve(null);
-}
-
-export function base64ToArrayBuffer(dataUrl) {
- const base64 = dataUrl.replace(/^data:([^;]+);base64,/gmi, '');
- const binary = atob(base64);
- const len = binary.length;
- const buffer = new ArrayBuffer(len);
- const view = new Uint8Array(buffer);
-
- for (let i = 0; i < len; i++) {
- view[i] = binary.charCodeAt(i);
- }
- return buffer;
-}
-
-function readToBuffer(blob) {
- return new Promise((resolve) => {
- const fileReader = new FileReader();
- fileReader.onload = function (e) {
- return resolve(e.target.result);
- };
- fileReader.readAsArrayBuffer(blob);
- });
-}
-
-function objectURLToBlob(url) {
- return new Promise((resolve, reject) => {
- const http = new XMLHttpRequest();
- http.open('GET', url, true);
- http.responseType = 'blob';
- http.onreadystatechange = function () {
- if (http.readyState === XMLHttpRequest.DONE && (http.status === 200 || http.status === 0)) {
- resolve(this.response);
- }
- };
- http.onerror = reject;
- http.send();
- });
-}
-
-export function findTagsInBuffer(file, selectedTags = AvailableTags) {
- const dataView = new DataView(file);
- const length = file.byteLength;
- const exifTags = selectedTags.reduce((result, selectedTag) => {
- const exifTag = Object.keys(ExifTags).filter((tag) => ExifTags[tag] === selectedTag)[0];
- if (exifTag) {
- result[exifTag] = selectedTag;
- }
- return result;
- }, {});
- let offset = 2;
- let marker;
-
- if ((dataView.getUint8(0) !== 0xFF) || (dataView.getUint8(1) !== 0xD8)) {
- return false;
- }
-
- while (offset < length) {
- if (dataView.getUint8(offset) !== 0xFF) {
- return false;
- }
-
- marker = dataView.getUint8(offset + 1);
- if (marker === 0xE1) {
- return readEXIFData(dataView, offset + 4, exifTags);
- }
- offset += 2 + dataView.getUint16(offset + 2);
- }
-
- return false;
-}
-
-function readEXIFData(file, start, exifTags) {
- if (getStringFromBuffer(file, start, 4) !== 'Exif') {
- return false;
- }
-
- const tiffOffset = start + 6;
- let bigEnd;
-
- if (file.getUint16(tiffOffset) === 0x4949) {
- bigEnd = false;
- } else if (file.getUint16(tiffOffset) === 0x4D4D) {
- bigEnd = true;
- } else {
- return false;
- }
-
- if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {
- return false;
- }
-
- const firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);
- if (firstIFDOffset < 0x00000008) {
- return false;
- }
-
- const tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, exifTags, bigEnd);
- return tags;
-}
-
-function readTags(file, tiffStart, dirStart, strings, bigEnd) {
- const entries = file.getUint16(dirStart, !bigEnd);
- const tags = {};
-
- for (let i = 0; i < entries; i++) {
- const entryOffset = dirStart + i * 12 + 2;
- const tag = strings[file.getUint16(entryOffset, !bigEnd)];
- if (tag) {
- tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);
- }
- }
- return tags;
-}
-
-function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {
- const type = file.getUint16(entryOffset + 2, !bigEnd);
- const numValues = file.getUint32(entryOffset + 4, !bigEnd);
-
- switch (type) {
- case 3:
- if (numValues === 1) {
- return file.getUint16(entryOffset + 8, !bigEnd);
- }
- }
-
- return null;
-}
-
-function getStringFromBuffer(buffer, start, length) {
- let outstr = '';
- for (let n = start; n < start + length; n++) {
- outstr += String.fromCharCode(buffer.getUint8(n));
- }
- return outstr;
-}
diff --git a/quagga2/quagga2-1.12.1/src/input/frame_grabber.js b/quagga2/quagga2-1.12.1/src/input/frame_grabber.js
deleted file mode 100644
index 936af2e..0000000
--- a/quagga2/quagga2-1.12.1/src/input/frame_grabber.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// NOTE FOR ANYONE IN HERE IN THE FUTURE: This module is used when the module is built for use in Node.
-// Webpack.config.js explicitly REPLACES this module with the file called frame_grabber_browser when it is packing the Browser distribution.
-
-const CVUtils = require('../common/cv_utils');
-const Ndarray = require('ndarray');
-const Interp2D = require('ndarray-linear-interpolate').d2;
-
-const FrameGrabber = {};
-
-FrameGrabber.create = function (inputStream, canvas) {
- // console.warn('*** FrameGrabberNode create()');
- const _that = {};
- const _videoSize = CVUtils.imageRef(inputStream.getRealWidth(), inputStream.getRealHeight());
- const _canvasSize = inputStream.getCanvasSize();
- const _size = CVUtils.imageRef(inputStream.getWidth(), inputStream.getHeight());
- const _topRight = inputStream.getTopRight();
- let _data = new Uint8Array(_size.x * _size.y);
- const _grayData = new Uint8Array(_videoSize.x * _videoSize.y);
- const _canvasData = new Uint8Array(_canvasSize.x * _canvasSize.y);
- /* eslint-disable new-cap */
- const _grayImageArray = Ndarray(_grayData, [_videoSize.y, _videoSize.x]).transpose(1, 0);
- const _canvasImageArray = Ndarray(_canvasData, [_canvasSize.y, _canvasSize.x]).transpose(1, 0);
- const _targetImageArray = _canvasImageArray
- .hi(_topRight.x + _size.x, _topRight.y + _size.y)
- .lo(_topRight.x, _topRight.y);
- const _stepSizeX = _videoSize.x / _canvasSize.x;
- const _stepSizeY = _videoSize.y / _canvasSize.y;
- const _streamConfig = inputStream.getConfig();
-
- if (typeof ENV !== 'undefined' && ENV.development && _streamConfig.debug?.showImageDetails) {
- console.log('FrameGrabber', JSON.stringify({
- videoSize: _grayImageArray.shape,
- canvasSize: _canvasImageArray.shape,
- stepSize: [_stepSizeX, _stepSizeY],
- size: _targetImageArray.shape,
- topRight: _topRight,
- }));
- }
-
- /**
- * Uses the given array as frame-buffer
- */
- _that.attachData = function (data) {
- _data = data;
- };
-
- /**
- * Returns the used frame-buffer
- */
- _that.getData = function () {
- return _data;
- };
-
- /**
- * Fetches a frame from the input-stream and puts into the frame-buffer.
- * The image-data is converted to gray-scale and then half-sampled if configured.
- */
- _that.grab = function () {
- const frame = inputStream.getFrame();
-
- if (frame) {
- this.scaleAndCrop(frame);
- return true;
- }
- return false;
- };
-
- // eslint-disable-next-line
- _that.scaleAndCrop = function(frame) {
- // 1. compute full-sized gray image
- CVUtils.computeGray(frame.data, _grayData);
-
- // 2. interpolate
- for (let y = 0; y < _canvasSize.y; y++) {
- for (let x = 0; x < _canvasSize.x; x++) {
- // eslint-disable-next-line no-bitwise
- _canvasImageArray.set(x, y, (Interp2D(_grayImageArray, x * _stepSizeX, y * _stepSizeY)) | 0);
- }
- }
-
- // targetImageArray must be equal to targetSize
- if (_targetImageArray.shape[0] !== _size.x
- || _targetImageArray.shape[1] !== _size.y) {
- throw new Error('Shapes do not match!');
- }
-
- // 3. crop
- for (let y = 0; y < _size.y; y++) {
- for (let x = 0; x < _size.x; x++) {
- _data[y * _size.x + x] = _targetImageArray.get(x, y);
- }
- }
- };
-
- _that.getSize = function () {
- return _size;
- };
-
- return _that;
-};
-
-module.exports = FrameGrabber;
diff --git a/quagga2/quagga2-1.12.1/src/input/frame_grabber_browser.js b/quagga2/quagga2-1.12.1/src/input/frame_grabber_browser.js
deleted file mode 100644
index 6642b46..0000000
--- a/quagga2/quagga2-1.12.1/src/input/frame_grabber_browser.js
+++ /dev/null
@@ -1,203 +0,0 @@
-// NOTE FOR ANYONE IN HERE IN THE FUTURE:
-// webpack.config.js replaces the frame_grabber module with THIS module when it is building for a Browser environment.
-
-import {
- imageRef,
- grayAndHalfSampleFromCanvasData,
- computeGray,
-} from '../common/cv_utils';
-
-const TO_RADIANS = Math.PI / 180;
-
-function adjustCanvasSize(canvas, targetSize, debug) {
- if (canvas.width !== targetSize.x) {
- if (typeof ENV !== 'undefined' && ENV.development && debug?.showImageDetails) {
- console.log('WARNING: canvas-size needs to be adjusted');
- }
- canvas.width = targetSize.x;
- }
- if (canvas.height !== targetSize.y) {
- if (typeof ENV !== 'undefined' && ENV.development && debug?.showImageDetails) {
- console.log('WARNING: canvas-size needs to be adjusted');
- }
- canvas.height = targetSize.y;
- }
-}
-
-const FrameGrabber = {};
-
-FrameGrabber.create = function (inputStream, canvas) {
- // console.warn('*** FrameGrabberBrowser create');
- const _that = {};
- const _streamConfig = inputStream.getConfig();
- const _videoSize = imageRef(inputStream.getRealWidth(), inputStream.getRealHeight());
- const _canvasSize = inputStream.getCanvasSize();
- const _size = imageRef(inputStream.getWidth(), inputStream.getHeight());
- const topRight = inputStream.getTopRight();
- const _sx = topRight.x;
- const _sy = topRight.y;
- let _canvas;
- let _ctx = null;
- let _data = null;
- const { willReadFrequently } = _streamConfig;
-
- _canvas = canvas || document.createElement('canvas');
- _canvas.width = _canvasSize.x;
- _canvas.height = _canvasSize.y;
- if (typeof ENV !== 'undefined' && ENV.development && _streamConfig.debug?.showImageDetails) {
- console.warn('*** frame_grabber_browser: willReadFrequently=', willReadFrequently, 'canvas=', _canvas);
- }
- _ctx = _canvas.getContext('2d', { willReadFrequently: !!willReadFrequently }); // double not because we have an optional bool that needs to pass as a bool
- _data = new Uint8Array(_size.x * _size.y);
- if (typeof ENV !== 'undefined' && ENV.development && _streamConfig.debug?.showImageDetails) {
- console.log('FrameGrabber', JSON.stringify({
- size: _size,
- topRight,
- videoSize: _videoSize,
- canvasSize: _canvasSize,
- }));
- }
-
- /**
- * Uses the given array as frame-buffer
- */
- _that.attachData = function (data) {
- _data = data;
- };
-
- /**
- * Returns the used frame-buffer
- */
- _that.getData = function () {
- return _data;
- };
-
- // Bilinear interpolation for grayscale data (to match Node's behavior)
- function bilinearInterpolate(grayData, width, height, x, y) {
- const x0 = Math.floor(x);
- const y0 = Math.floor(y);
- const x1 = Math.min(x0 + 1, width - 1);
- const y1 = Math.min(y0 + 1, height - 1);
-
- const fx = x - x0;
- const fy = y - y0;
-
- const v00 = grayData[y0 * width + x0];
- const v10 = grayData[y0 * width + x1];
- const v01 = grayData[y1 * width + x0];
- const v11 = grayData[y1 * width + x1];
-
- const v0 = v00 * (1 - fx) + v10 * fx;
- const v1 = v01 * (1 - fx) + v11 * fx;
-
- return v0 * (1 - fy) + v1 * fy;
- }
-
- /**
- * Fetches a frame from the input-stream and puts into the frame-buffer.
- * The image-data is converted to gray-scale and then half-sampled if configured.
- *
- * For improved accuracy (matching Node's processing), non-half-sampled images
- * use bilinear interpolation on grayscale data instead of scaling RGB then converting.
- *
- * IMPORTANT: The image is ALWAYS drawn to the visible canvas for overlays and display.
- */
- _that.grab = function () {
- const doHalfSample = _streamConfig.halfSample;
- const frame = inputStream.getFrame();
- let drawable = frame;
- let drawAngle = 0;
-
- if (drawable) {
- adjustCanvasSize(_canvas, _canvasSize, _streamConfig.debug);
- if (_streamConfig.type === 'ImageStream') {
- drawable = frame.img;
- if (frame.tags && frame.tags.orientation) {
- switch (frame.tags.orientation) {
- case 6:
- drawAngle = 90 * TO_RADIANS;
- break;
- case 8:
- drawAngle = -90 * TO_RADIANS;
- break;
- }
- }
- }
-
- // ALWAYS draw to visible canvas (for overlays, display, and toDataURL)
- if (drawAngle !== 0) {
- _ctx.translate(_canvasSize.x / 2, _canvasSize.y / 2);
- _ctx.rotate(drawAngle);
- _ctx.drawImage(drawable, -_canvasSize.y / 2, -_canvasSize.x / 2, _canvasSize.y, _canvasSize.x);
- _ctx.rotate(-drawAngle);
- _ctx.translate(-_canvasSize.x / 2, -_canvasSize.y / 2);
- } else {
- _ctx.drawImage(drawable, 0, 0, _canvasSize.x, _canvasSize.y);
- }
-
- if (doHalfSample) {
- // Half-sample path: use existing optimized approach
- const ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;
- grayAndHalfSampleFromCanvasData(ctxData, _size, _data);
- } else {
- // Non-half-sample: use improved bilinear interpolation for better accuracy
- // Process at original size, then scale grayscale data
- const tempCanvas = document.createElement('canvas');
- tempCanvas.width = _videoSize.x;
- tempCanvas.height = _videoSize.y;
- const tempCtx = tempCanvas.getContext('2d');
-
- if (drawAngle !== 0) {
- tempCtx.translate(_videoSize.x / 2, _videoSize.y / 2);
- tempCtx.rotate(drawAngle);
- tempCtx.drawImage(drawable, -_videoSize.y / 2, -_videoSize.x / 2, _videoSize.y, _videoSize.x);
- } else {
- tempCtx.drawImage(drawable, 0, 0, _videoSize.x, _videoSize.y);
- }
-
- // Convert to grayscale at original size
- const originalImageData = tempCtx.getImageData(0, 0, _videoSize.x, _videoSize.y).data;
- const grayData = new Uint8Array(_videoSize.x * _videoSize.y);
- computeGray(originalImageData, grayData, _streamConfig);
-
- // Scale grayscale data using bilinear interpolation
- const scaledGrayData = new Uint8Array(_canvasSize.x * _canvasSize.y);
- const stepSizeX = _videoSize.x / _canvasSize.x;
- const stepSizeY = _videoSize.y / _canvasSize.y;
-
- for (let y = 0; y < _canvasSize.y; y++) {
- for (let x = 0; x < _canvasSize.x; x++) {
- const srcX = x * stepSizeX;
- const srcY = y * stepSizeY;
- scaledGrayData[y * _canvasSize.x + x] = bilinearInterpolate(
- grayData,
- _videoSize.x,
- _videoSize.y,
- srcX,
- srcY
- ) | 0;
- }
- }
-
- // Crop to target region
- for (let y = 0; y < _size.y; y++) {
- for (let x = 0; x < _size.x; x++) {
- const srcIdx = (y + _sy) * _canvasSize.x + (x + _sx);
- _data[y * _size.x + x] = scaledGrayData[srcIdx];
- }
- }
- }
-
- return true;
- }
- return false;
- };
-
- _that.getSize = function () {
- return _size;
- };
-
- return _that;
-};
-
-export default FrameGrabber;
diff --git a/quagga2/quagga2-1.12.1/src/input/image_loader.js b/quagga2/quagga2-1.12.1/src/input/image_loader.js
deleted file mode 100644
index 21aba78..0000000
--- a/quagga2/quagga2-1.12.1/src/input/image_loader.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import { findTagsInObjectURL } from './exif_helper';
-
-// Exported helper for filename generation
-export function generateImageFilename(directory, num) {
- return `${directory}image-${num.toString().padStart(3, '0')}.jpg`;
-}
-
-const ImageLoader = {};
-ImageLoader.load = function (directory, callback, offset, size, sequence, config) {
- const htmlImagesSrcArray = new Array(size);
- const htmlImagesArray = new Array(htmlImagesSrcArray.length);
- let i;
- let img;
- let num;
-
- if (sequence === false) {
- htmlImagesSrcArray[0] = directory;
- } else {
- for (i = 0; i < htmlImagesSrcArray.length; i++) {
- num = (offset + i);
- htmlImagesSrcArray[i] = generateImageFilename(directory, num);
- }
- }
- htmlImagesArray.notLoaded = [];
- htmlImagesArray.addImage = function (image) {
- htmlImagesArray.notLoaded.push(image);
- };
- htmlImagesArray.loaded = function (loadedImg) {
- const notloadedImgs = htmlImagesArray.notLoaded;
- for (let x = 0; x < notloadedImgs.length; x++) {
- if (notloadedImgs[x] === loadedImg) {
- notloadedImgs.splice(x, 1);
- for (let y = 0; y < htmlImagesSrcArray.length; y++) {
- // Use encodeURI for matching filenames with spaces and special characters
- const imgName = encodeURI(htmlImagesSrcArray[y].substr(htmlImagesSrcArray[y].lastIndexOf('/')));
- if (loadedImg.src.lastIndexOf(imgName) !== -1) {
- htmlImagesArray[y] = { img: loadedImg };
- break;
- }
- }
- break;
- }
- }
- if (notloadedImgs.length === 0) {
- if (typeof ENV !== 'undefined' && ENV.development && config?.debug?.showImageDetails) {
- console.log(`Images loaded: ${htmlImagesArray.length} image${htmlImagesArray.length !== 1 ? 's' : ''} from ${sequence === false ? directory : directory + ' (sequence)'}`);
- }
- if (sequence === false) {
- findTagsInObjectURL(directory, ['orientation'])
- .then((tags) => {
- htmlImagesArray[0].tags = tags;
- callback(htmlImagesArray);
- }).catch((e) => {
- console.log(e);
- callback(htmlImagesArray);
- });
- } else {
- callback(htmlImagesArray);
- }
- }
- };
-
- for (i = 0; i < htmlImagesSrcArray.length; i++) {
- img = new Image();
- htmlImagesArray.addImage(img);
- addOnloadHandler(img, htmlImagesArray);
- img.src = htmlImagesSrcArray[i];
- }
-};
-
-function addOnloadHandler(img, htmlImagesArray) {
- img.onload = function () {
- htmlImagesArray.loaded(this);
- };
- img.onerror = function () {
- htmlImagesArray.loaded(this);
- };
-}
-
-export default (ImageLoader);
diff --git a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.d.ts b/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.d.ts
deleted file mode 100644
index a6b2f6b..0000000
--- a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.d.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { XYSize, Point } from '../../../type-definitions/quagga.d';
-
-type EventHandler = (arg?: any) => void;
-
-export type EventHandlerList = {
- [index: string]: Array;
-};
-
-export interface InputStream {
- addEventListener(event: string, f: (args?: any) => void, bool?: boolean): void;
- clearEventHandlers(): void;
- ended(): boolean;
- getCanvasSize(): XYSize;
- getConfig(): any;
- getFrame(): any;
- getHeight(): number;
- getRealHeight(): number;
- getRealWidth(): number;
- getTopRight(): Point;
- getWidth(): number;
- pause(): void;
- play(): void;
- setAttribute(name: any, value: any): void;
- setCanvasSize(size: XYSize): void;
- setCurrentTime(time: number): void;
- setHeight(height: number): void;
- setInputStream(config: any): void;
- setTopRight(topRight: Point): void;
- setWidth(width: number): void;
- trigger(eventName: any, args?: any): void;
-}
-
-type VideoStreamFactory = (video: HTMLVideoElement) => InputStream;
-type LiveStreamFactory = (video: HTMLVideoElement) => InputStream;
-type ImageStreamFactory = () => InputStream;
-
-export interface InputStreamFactory {
- createImageStream: ImageStreamFactory;
- createLiveStream: LiveStreamFactory;
- createVideoStream: VideoStreamFactory;
-}
diff --git a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.ts b/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.ts
deleted file mode 100644
index a792286..0000000
--- a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream.ts
+++ /dev/null
@@ -1,266 +0,0 @@
-// TODO: It's pretty likely that this shares code with the browser version, investigate that
-// FOR ANYONE IN HERE IN THE FUTURE: This is the default input_stream module used for the Node bundle.
-// webpack.config.js *replaces* this with input_stream_browser.ts when the bundle is being built for browser.
-
-import * as fs from 'fs';
-import * as http from 'http';
-import * as https from 'https';
-import { URL } from 'url';
-import { getPixels } from 'ndarray-pixels';
-import { Point, XYSize } from '../../../type-definitions/quagga.d';
-import { InputStreamFactory, InputStream, EventHandlerList } from './input_stream.d';
-
-const inputStreamFactory: InputStreamFactory = {
- createVideoStream(): never {
- throw new Error('createVideoStream not available');
- },
- createLiveStream(): never {
- throw new Error('createLiveStream not available');
- },
- createImageStream(): InputStream {
- // console.warn('* InputStreamNode createImageStream');
- let _config: { mime: string; size: number; src: any } | null = null;
-
- let width = 0;
- let height = 0;
- let loaded = false;
- // TODO: frame should be a type NdArray, but NdArray doesn't have ts definitions
- // TODO: there is a ts-ndarray that might work, though
- let frame: any = null;
- let baseUrl: string;
- const ended = false;
- let calculatedWidth: number;
- let calculatedHeight: number;
- const _eventNames = ['canrecord', 'ended'];
- const _eventHandlers: EventHandlerList = {};
- const _topRight: Point = { x: 0, y: 0, type: 'Point' };
- const _canvasSize: XYSize = { x: 0, y: 0, type: 'XYSize' };
- /* eslint-disable no-unused-vars */ // false eslint errors? weird.
- // @ts-ignore
- let size = 0;
- // @ts-ignore
- let frameIdx = 0;
- // @ts-ignore
- let paused = false;
- /* eslint-enable no-unused-vars */
-
- async function loadImageData(url: string): Promise {
- return new Promise((resolve, reject) => {
- // Handle file paths
- if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
- fs.readFile(url, (err, data) => {
- if (err) reject(err);
- else resolve(data);
- });
- return;
- }
-
- // Handle data URLs
- if (url.startsWith('data:')) {
- const matches = url.match(/^data:([^;]+);base64,(.+)$/);
- if (!matches) {
- reject(new Error('Invalid data URL'));
- return;
- }
- resolve(Buffer.from(matches[2], 'base64'));
- return;
- }
-
- // Handle HTTP/HTTPS URLs
- const parsedUrl = new URL(url);
- const client = parsedUrl.protocol === 'https:' ? https : http;
-
- client.get(url, (response) => {
- if (!response.statusCode || response.statusCode < 200 || response.statusCode >= 300) {
- reject(new Error(`Failed to fetch ${url}: ${response.statusCode || 'unknown status'}`));
- return;
- }
-
- const chunks: Buffer[] = [];
- response.on('data', (chunk) => chunks.push(chunk));
- response.on('end', () => resolve(Buffer.concat(chunks)));
- response.on('error', reject);
- }).on('error', reject);
- });
- }
-
- async function loadImages(): Promise {
- loaded = false;
- try {
- // Load the image data first
- const imageData = await loadImageData(baseUrl);
-
- // Determine the mime type
- let mimeType = 'image/jpeg';
- if (_config?.mime) {
- mimeType = _config.mime;
- } else if (baseUrl.endsWith('.png')) {
- mimeType = 'image/png';
- } else if (baseUrl.endsWith('.jpg') || baseUrl.endsWith('.jpeg')) {
- mimeType = 'image/jpeg';
- }
-
- // Use ndarray-pixels to decode the image
- // Cast to Uint8Array for ndarray-pixels compatibility
- const uint8Data = new Uint8Array(imageData.buffer, imageData.byteOffset, imageData.byteLength);
- let pixels;
- try {
- pixels = await getPixels(uint8Data, mimeType);
- } catch (err) {
- if ((err as Error).message?.includes('Cannot find module')) {
- throw new Error('missing dependencies: npm install ndarray-pixels sharp');
- }
- throw err;
- }
-
- loaded = true;
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log('* InputStreamNode pixels.shape', pixels.shape);
- }
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- frame = pixels;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- [width, height] = pixels.shape;
- // eslint-disable-next-line no-nested-ternary
- calculatedWidth = _config?.size
- ? width / height > 1
- ? _config.size
- : Math.floor((width / height) * _config.size)
- : width;
- // eslint-disable-next-line no-nested-ternary
- calculatedHeight = _config?.size
- ? width / height > 1
- ? Math.floor((height / width) * _config.size)
- : _config.size
- : height;
-
- _canvasSize.x = calculatedWidth;
- _canvasSize.y = calculatedHeight;
-
- setTimeout(() => {
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
- publishEvent('canrecord', []);
- }, 0);
- } catch (err) {
- console.error('**** quagga loadImages error:', err);
- throw new Error('error decoding pixels in loadImages');
- }
- }
-
- function publishEvent(eventName: string, args: Array): void {
- const handlers = _eventHandlers[eventName];
-
- if (handlers && handlers.length > 0) {
- for (let j = 0; j < handlers.length; j++) {
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
- handlers[j].apply(inputStream, args as any);
- }
- }
- }
-
- // eslint-disable-next-line no-var,vars-on-top
- var inputStream: InputStream = {
- trigger: publishEvent,
-
- getWidth() {
- return calculatedWidth;
- },
-
- getHeight() {
- return calculatedHeight;
- },
-
- setWidth(w) {
- calculatedWidth = w;
- },
-
- setHeight(h) {
- calculatedHeight = h;
- },
-
- getRealWidth() {
- return width;
- },
-
- getRealHeight() {
- return height;
- },
-
- setInputStream(stream) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- _config = stream;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
- baseUrl = _config?.src;
- size = 1;
- loadImages().catch((err) => {
- console.error('Failed to load images:', err);
- });
- },
-
- ended() {
- return ended;
- },
-
- setAttribute() { },
-
- getConfig() {
- return _config;
- },
-
- pause() {
- paused = true;
- },
-
- play() {
- paused = false;
- },
-
- setCurrentTime(time) {
- frameIdx = time;
- },
-
- addEventListener(event, f) {
- if (_eventNames.indexOf(event) !== -1) {
- if (!_eventHandlers[event]) {
- _eventHandlers[event] = [];
- }
- _eventHandlers[event].push(f);
- }
- },
-
- clearEventHandlers() {
- Object.keys(_eventHandlers).forEach((ind) => delete _eventHandlers[ind]);
- },
-
-
- setTopRight(topRight) {
- _topRight.x = topRight.x;
- _topRight.y = topRight.y;
- },
-
- getTopRight() {
- return _topRight;
- },
-
- setCanvasSize(sz) {
- _canvasSize.x = sz.x;
- _canvasSize.y = sz.y;
- },
-
- getCanvasSize() {
- return _canvasSize;
- },
-
- getFrame() {
- if (!loaded) {
- return null;
- }
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
- return frame;
- },
- };
- return inputStream;
- },
-};
-export default inputStreamFactory;
diff --git a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream_browser.ts b/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream_browser.ts
deleted file mode 100644
index b8ace59..0000000
--- a/quagga2/quagga2-1.12.1/src/input/input_stream/input_stream_browser.ts
+++ /dev/null
@@ -1,360 +0,0 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-
-import ImageLoader from '../image_loader';
-import { XYSize, Point } from '../../../type-definitions/quagga.d';
-import { InputStreamFactory, InputStream, EventHandlerList } from './input_stream.d';
-
-const inputStreamFactory: InputStreamFactory = {
- createVideoStream(video): InputStream {
- console.warn('**** InputStreamBrowser createVideoStream');
- let _config: { size: number; type: string } | null = null;
- const _eventNames = ['canrecord', 'ended'];
- const _eventHandlers: EventHandlerList = {};
- let _calculatedWidth: number;
- let _calculatedHeight: number;
- const _topRight: Point = { x: 0, y: 0, type: 'Point' };
- const _canvasSize: XYSize = { x: 0, y: 0, type: 'XYSize' };
-
- function initSize(): void {
- const width = video.videoWidth;
- const height = video.videoHeight;
-
- // eslint-disable-next-line no-nested-ternary
- _calculatedWidth = _config?.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;
- // eslint-disable-next-line no-nested-ternary
- _calculatedHeight = _config?.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;
-
- _canvasSize.x = _calculatedWidth;
- _canvasSize.y = _calculatedHeight;
- }
- const inputStream: InputStream = {
- getRealWidth() {
- return video.videoWidth;
- },
-
- getRealHeight() {
- return video.videoHeight;
- },
-
- getWidth() {
- return _calculatedWidth;
- },
-
- getHeight() {
- return _calculatedHeight;
- },
-
- setWidth(width) {
- _calculatedWidth = width;
- },
-
- setHeight(height) {
- _calculatedHeight = height;
- },
-
- setInputStream(config) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- _config = config;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- this.setAttribute('src', (typeof config.src !== 'undefined') ? config.src : '');
- },
-
- ended() {
- return video.ended;
- },
-
- getConfig() {
- return _config;
- },
-
- setAttribute(name, value) {
- if (video) {
- video.setAttribute(name, value);
- }
- },
-
- pause() {
- video.pause();
- },
-
- play() {
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- video.play();
- },
-
- setCurrentTime(time) {
- if (_config?.type !== 'LiveStream') {
- this.setAttribute('currentTime', time.toString());
- }
- },
-
- addEventListener(event, f, bool) {
- if (_eventNames.indexOf(event) !== -1) {
- if (!_eventHandlers[event]) {
- _eventHandlers[event] = [];
- }
- _eventHandlers[event].push(f);
- } else {
- video.addEventListener(event, f, bool);
- }
- },
-
- clearEventHandlers() {
- _eventNames.forEach((eventName) => {
- const handlers = _eventHandlers[eventName];
- if (handlers && handlers.length > 0) {
- handlers.forEach((handler) => {
- video.removeEventListener(eventName, handler);
- });
- }
- });
- },
-
- trigger(eventName, args) {
- let j;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- const handlers = _eventHandlers[eventName];
-
- if (eventName === 'canrecord') {
- initSize();
- }
- if (handlers && handlers.length > 0) {
- for (j = 0; j < handlers.length; j++) {
- handlers[j].apply(inputStream, args);
- }
- }
- },
-
- setTopRight(topRight) {
- _topRight.x = topRight.x;
- _topRight.y = topRight.y;
- },
-
- getTopRight() {
- return _topRight;
- },
-
- setCanvasSize(size) {
- _canvasSize.x = size.x;
- _canvasSize.y = size.y;
- },
-
- getCanvasSize() {
- return _canvasSize;
- },
-
- getFrame() {
- return video;
- },
- };
- return inputStream;
- },
- createLiveStream(video): InputStream {
- console.warn('**** InputStreamBrowser createLiveStream');
- if (video) {
- video.setAttribute('autoplay', 'true');
- }
- const that = inputStreamFactory.createVideoStream(video);
- that.ended = function ended(): false {
- return false;
- };
- return that;
- },
- createImageStream(): InputStream {
- // console.warn('**** InputStreamBrowser createImageStream');
- let _config: { size: number; sequence: any } | null = null;
-
- let width = 0;
- let height = 0;
- let frameIdx = 0;
- let paused = true;
- let loaded = false;
- let imgArray: any[] | null = null;
- let size = 0;
- const offset = 1;
- let baseUrl: string | null = null;
- let ended = false;
- let calculatedWidth: number;
- let calculatedHeight: number;
- const _eventNames = ['canrecord', 'ended'];
- const _eventHandlers: EventHandlerList = {};
- const _topRight: Point = { x: 0, y: 0, type: 'Point' };
- const _canvasSize: XYSize = { x: 0, y: 0, type: 'XYSize' };
-
- function loadImages(): void {
- loaded = false;
- ImageLoader.load(baseUrl, (imgs: Array<{ tags: any; img: HTMLImageElement}>) => {
- imgArray = imgs;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- if (imgs[0].tags && imgs[0].tags.orientation) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- switch (imgs[0].tags.orientation) {
- case 6:
- case 8:
- width = imgs[0].img.height;
- height = imgs[0].img.width;
- break;
- default:
- width = imgs[0].img.width;
- height = imgs[0].img.height;
- }
- } else {
- width = imgs[0].img.width;
- height = imgs[0].img.height;
- }
- // eslint-disable-next-line no-nested-ternary
- calculatedWidth = _config?.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;
- // eslint-disable-next-line no-nested-ternary
- calculatedHeight = _config?.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;
- _canvasSize.x = calculatedWidth;
- _canvasSize.y = calculatedHeight;
- loaded = true;
- frameIdx = 0;
- setTimeout(() => {
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
- publishEvent('canrecord', []);
- }, 0);
- }, offset, size, _config?.sequence, _config);
- }
-
- function publishEvent(eventName: string, args: Array): void {
- let j;
- const handlers = _eventHandlers[eventName];
-
- if (handlers && handlers.length > 0) {
- for (j = 0; j < handlers.length; j++) {
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
- handlers[j].apply(inputStream, args as any); // TODO: typescript complains that any[] is not valid for a second arg for apply?!
- }
- }
- }
-
- // TODO: any code shared with the first InputStream above should be shared not copied
- // TODO: publishEvent needs access to inputStream, but inputStream needs access to publishEvent
- // TODO: This is why it's a 'var', so it hoists back. This is ugly, and should be changed.
- // eslint-disable-next-line no-var,vars-on-top
- var inputStream: InputStream = {
-
- trigger: publishEvent,
-
- getWidth() {
- return calculatedWidth;
- },
-
- getHeight() {
- return calculatedHeight;
- },
-
- setWidth(newWidth) {
- calculatedWidth = newWidth;
- },
-
- setHeight(newHeight) {
- calculatedHeight = newHeight;
- },
-
- getRealWidth() {
- return width;
- },
-
- getRealHeight() {
- return height;
- },
-
- setInputStream(stream) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- _config = stream;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
- if (stream.sequence === false) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
- baseUrl = stream.src;
- size = 1;
- } else {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
- baseUrl = stream.src;
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
- size = stream.length;
- }
- loadImages();
- },
-
- ended() {
- return ended;
- },
-
- setAttribute() {},
-
- getConfig() {
- return _config;
- },
-
- pause() {
- paused = true;
- },
-
- play() {
- paused = false;
- },
-
- setCurrentTime(time) {
- frameIdx = time;
- },
-
- addEventListener(event, f) {
- if (_eventNames.indexOf(event) !== -1) {
- if (!_eventHandlers[event]) {
- _eventHandlers[event] = [];
- }
- _eventHandlers[event].push(f);
- }
- },
-
- clearEventHandlers() {
- Object.keys(_eventHandlers).forEach((ind) => delete _eventHandlers[ind]);
- },
-
- setTopRight(topRight) {
- _topRight.x = topRight.x;
- _topRight.y = topRight.y;
- },
-
- getTopRight() {
- return _topRight;
- },
-
- setCanvasSize(canvasSize) {
- _canvasSize.x = canvasSize.x;
- _canvasSize.y = canvasSize.y;
- },
-
- getCanvasSize() {
- return _canvasSize;
- },
-
- getFrame() {
- let frame;
-
- if (!loaded) {
- return null;
- }
- if (!paused) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- frame = imgArray?.[frameIdx];
- if (frameIdx < (size - 1)) {
- frameIdx++;
- } else {
- setTimeout(() => {
- ended = true;
- publishEvent('ended', []);
- }, 0);
- }
- }
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
- return frame;
- },
- };
- return inputStream;
- },
-};
-
-export default inputStreamFactory;
diff --git a/quagga2/quagga2-1.12.1/src/input/test/browser/camera_access.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/browser/camera_access.spec.ts
deleted file mode 100644
index 2508b8b..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/browser/camera_access.spec.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-import { describe, it, after } from 'mocha';
-import { expect } from 'chai';
-import CameraAccess, { pickConstraints } from '../../camera_access';
-import { MediaTrackConstraintsWithDeprecated } from '../../../../type-definitions/quagga.d';
-
-const Quagga = { CameraAccess };
-
-describe('CameraAccess (browser)', () => {
- // TODO: move pickConstraints tests into "universal" test, no reason it shouldn't work in node, even if you wouldn't use it.
- // TODO: consider moving the entire CameraAccess section to a separate library
- describe('pickConstraints', () => {
- it('should return the given constraints if no facingMode is defined', async () => {
- const givenConstraints = { width: 180 };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal(givenConstraints);
- });
-
- it('should return the given constraints if deviceId is defined', async () => {
- const givenConstraints = { width: 180, deviceId: '4343' };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal(givenConstraints);
- });
-
- it('should remove facingMode if deviceId is defined', async () => {
- const givenConstraints = { deviceId: 'dummy', facingMode: 'user' };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal({ deviceId: 'dummy' });
- });
-
- it('should pass through advanced constraints with zoom', async () => {
- const givenConstraints = {
- width: 640,
- height: 480,
- advanced: [{ zoom: 2 }],
- };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal(givenConstraints);
- });
-
- it('should pass through frameRate constraints', async () => {
- const givenConstraints = {
- width: 640,
- height: 480,
- frameRate: { ideal: 30, max: 60 },
- };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal(givenConstraints);
- });
-
- it('should pass through multiple advanced constraints', async () => {
- const givenConstraints = {
- width: 640,
- height: 480,
- facingMode: 'environment',
- advanced: [{ zoom: 2 }, { torch: true }],
- };
- const actualConstraints = await pickConstraints(givenConstraints);
- expect(actualConstraints.video).to.deep.equal(givenConstraints);
- });
- });
-
- // These tests rely on Cypress providing a fake camera device via Chrome's
- // --use-fake-ui-for-media-stream and --use-fake-device-for-media-stream flags.
- // The fake device has the label 'fake_device_0' and supports common resolutions.
- describe('enumerateVideoDevices', () => {
- it('works', async () => {
- // TODO: if someone runs this test in live Chrome with no video devices, it should
- // fail .. hmm...
- const v = await Quagga.CameraAccess.enumerateVideoDevices();
- expect(v).to.be.an('Array').of.length(1);
- expect(v[0]).to.be.an.instanceof(InputDeviceInfo);
- expect(v[0].deviceId).to.be.a('string');
- expect(v[0].groupId).to.be.a('string');
- expect(v[0].kind).to.equal('videoinput');
- expect(v[0].label).to.equal('fake_device_0');
- });
-
- it('works with constraints (no filtering)', async () => {
- // With constraints that the Cypress fake camera device can satisfy,
- // should return the same device
- const v = await Quagga.CameraAccess.enumerateVideoDevices({ width: 320, height: 240 });
- expect(v).to.be.an('Array').of.length(1);
- expect(v[0]).to.be.an.instanceof(InputDeviceInfo);
- expect(v[0].kind).to.equal('videoinput');
- });
-
- it('works with constraints that filter out devices', async () => {
- // Request constraints that the Cypress fake camera device cannot satisfy
- // (very high resolution that Chrome's fake device doesn't support)
- const v = await Quagga.CameraAccess.enumerateVideoDevices({
- width: { exact: 9999 },
- height: { exact: 9999 },
- });
- expect(v).to.be.an('Array').of.length(0);
- });
-
- it('works with deprecated constraints', async () => {
- // Use deprecated constraint syntax with the Cypress fake camera device
- const v = await Quagga.CameraAccess.enumerateVideoDevices({
- width: 320,
- height: 240,
- facing: 'user',
- });
- expect(v).to.be.an('Array');
- });
- });
-
- describe('request', () => {
- const video = document.createElement('video');
- after(() => {
- video.pause();
- Quagga.CameraAccess.release();
- });
- it('works', async () => {
- await Quagga.CameraAccess.request(video, {});
- expect(video.srcObject).to.not.equal(null);
- // "as any" here to prevent typescript blowing up because it doesn't understand 'id' and
- // 'active' as members of MediaStream | MediaSource | Blob .. why?
- expect(((video?.srcObject) as any)?.id).to.be.a('string');
- expect(((video?.srcObject) as any)?.active).to.equal(true);
- });
-
- it('should allow deprecated constraints to be used', async () => {
- await Quagga.CameraAccess.request(video, {
- width: 320, height: 240, facing: 'user', minAspectRatio: 2, maxAspectRatio: 100,
- });
- const activeTrack = Quagga.CameraAccess.getActiveTrack();
- const constraints = activeTrack?.getConstraints() as MediaTrackConstraintsWithDeprecated;
- if (!constraints) {
- throw new Error('no active track constraints');
- }
- expect(constraints.width).to.equal(320);
- expect(constraints.height).to.equal(240);
- expect(constraints.facingMode).to.equal('user');
- expect(constraints.aspectRatio).to.equal(2);
- /* eslint-disable no-unused-expressions */
- /* eslint-disable @typescript-eslint/no-unused-expressions */
- expect(constraints.facing).to.not.exist;
- expect(constraints.minAspectRatio).to.not.exist;
- expect(constraints.maxAspectRatio).to.not.exist;
- /* eslint-enable no-unused-expressions */
- /* eslint-enable @typescript-eslint/no-unused-expressions */
- });
-
- it('will fail on NotAllowedError', async () => {
- cy.stub(navigator.mediaDevices, 'getUserMedia').rejects(new DOMException('Not Allowed', 'NotAllowedError'));
- const video = document.createElement('video');
- try {
- const x = await Quagga.CameraAccess.request(video, { width: 320, height: 240 });
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err) {
- expect(err).to.be.an.instanceOf(DOMException);
- expect(err.name).to.equal('NotAllowedError');
- }
- });
-
- it('fails eventually on unacceptable video size', async function () {
- this.timeout(10000);
- const video = document.createElement('video');
- try {
- const x = await Quagga.CameraAccess.request(video, { width: 5, height: 5 });
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err) {
- expect(err.message).to.equal('Unable to play video stream. Is webcam working?');
- }
- });
- it('fails if getUserMedia is missing', async () => {
- const origGetUserMedia = navigator.mediaDevices.getUserMedia;
- navigator.mediaDevices.getUserMedia = undefined;
- const video = document.createElement('video');
- try {
- await Quagga.CameraAccess.request(video, { width: 320, height: 240 });
- expect.fail('Should have thrown due to missing getUserMedia');
- } catch (err) {
- expect(err).to.exist;
- } finally {
- navigator.mediaDevices.getUserMedia = origGetUserMedia;
- }
- });
- });
-
- describe('release', () => {
- it('works', async () => {
- const video = document.createElement('video');
- await Quagga.CameraAccess.request(video, {});
- await Quagga.CameraAccess.release();
- expect(((video?.srcObject) as any)?.active).to.equal(false);
- });
- });
-
- describe('getActiveStream', () => {
- after(() => Quagga.CameraAccess.release());
- it('no active stream', () => {
- const x = Quagga.CameraAccess.getActiveStream();
- expect(x).to.equal(null);
- });
-
- it('with active stream', async () => {
- const video = document.createElement('video');
- await Quagga.CameraAccess.request(video, {});
- const stream = Quagga.CameraAccess.getActiveStream();
- expect(stream).to.be.an.instanceof(MediaStream);
- expect(stream?.active).to.equal(true);
- expect(stream?.getVideoTracks()).to.have.length(1);
- });
- });
-
- describe('getActiveStreamLabel', () => {
- after(() => Quagga.CameraAccess.release());
- it('no active stream', () => {
- const x = Quagga.CameraAccess.getActiveStreamLabel();
- expect(x).to.equal('');
- });
-
- it('with active stream', async () => {
- const video = document.createElement('video');
- await Quagga.CameraAccess.request(video, {});
- const x = Quagga.CameraAccess.getActiveStreamLabel();
- const v = await Quagga.CameraAccess.enumerateVideoDevices();
- expect(x).to.equal(v[0].label);
- });
- });
-
- describe('enableTorch', () => {
- it('does not throw if no active track', async () => {
- await Quagga.CameraAccess.release();
- await Quagga.CameraAccess.enableTorch();
- });
- });
- describe('disableTorch', () => {
- it('does not throw if no active track', async () => {
- await Quagga.CameraAccess.release();
- await Quagga.CameraAccess.disableTorch();
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/browser/data_uri.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/browser/data_uri.spec.ts
deleted file mode 100644
index db6a6dc..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/browser/data_uri.spec.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-import { expect } from 'chai';
-import Quagga from '../../../quagga';
-
-/**
- * Tests to verify that Data URIs work correctly in the browser environment.
- * This is a critical test case as mentioned in GitHub issue regarding Data URL support.
- * Referenced in GitHub issue serratus/quaggaJS#433.
- *
- * In the browser, Data URLs are natively supported by the Image element,
- * which is used by image_loader.js. These tests confirm that the integration works.
- */
-describe('Data URI Support (Browser)', () => {
- /**
- * Test that decodeSingle can process a Data URI containing a barcode image.
- * The browser uses native Image element which supports Data URLs natively.
- */
- describe('decodeSingle with Data URI', () => {
- it('should decode a Code 128 barcode from a Data URI', function(done) {
- this.timeout(20000); // Allow time for image processing
-
- // First, load the test image via fetch and convert to Data URI
- fetch('/test/fixtures/code_128/image-001.jpg')
- .then(response => response.blob())
- .then(blob => {
- const reader = new FileReader();
- reader.onloadend = function() {
- const dataUri = reader.result as string;
-
- const config = {
- src: dataUri,
- inputStream: {
- size: 800,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['code_128_reader'],
- },
- locate: true,
- };
-
- Quagga.decodeSingle(config).then((result) => {
- try {
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.code).to.equal('0001285112001000040801');
- expect(result.codeResult.format).to.equal('code_128');
- done();
- } catch (err) {
- done(err);
- }
- }).catch(done);
- };
- reader.readAsDataURL(blob);
- })
- .catch(done);
- });
-
- it('should decode an EAN-13 barcode from a Data URI', function(done) {
- this.timeout(20000);
-
- // First, load the test image via fetch and convert to Data URI
- fetch('/test/fixtures/ean/image-001.jpg')
- .then(response => response.blob())
- .then(blob => {
- const reader = new FileReader();
- reader.onloadend = function() {
- const dataUri = reader.result as string;
-
- const config = {
- src: dataUri,
- inputStream: {
- size: 640,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['ean_reader'],
- },
- locate: true,
- };
-
- Quagga.decodeSingle(config).then((result) => {
- try {
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.code).to.equal('3574660239843');
- expect(result.codeResult.format).to.equal('ean_13');
- done();
- } catch (err) {
- done(err);
- }
- }).catch(done);
- };
- reader.readAsDataURL(blob);
- })
- .catch(done);
- });
-
- it('should decode a barcode from a base64 Data URI string', function(done) {
- this.timeout(20000);
-
- // First, load the test image via fetch and convert to Data URI
- fetch('/test/fixtures/ean/image-002.jpg')
- .then(response => response.blob())
- .then(blob => {
- const reader = new FileReader();
- reader.onloadend = function() {
- const dataUri = reader.result as string;
-
- // Verify we got a proper data URL
- expect(dataUri).to.be.a('string');
- expect(dataUri.startsWith('data:image/')).to.be.true;
- expect(dataUri.includes('base64,')).to.be.true;
-
- const config = {
- src: dataUri,
- inputStream: {
- size: 640,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['ean_reader'],
- },
- locate: true,
- };
-
- Quagga.decodeSingle(config).then((result) => {
- try {
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- // image-002.jpg should decode to 8032754490297
- expect(result.codeResult.code).to.equal('8032754490297');
- expect(result.codeResult.format).to.equal('ean_13');
- done();
- } catch (err) {
- done(err);
- }
- }).catch(done);
- };
- reader.readAsDataURL(blob);
- })
- .catch(done);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/browser/exif_helper.spec.js b/quagga2/quagga2-1.12.1/src/input/test/browser/exif_helper.spec.js
deleted file mode 100644
index e79e5cf..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/browser/exif_helper.spec.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import {
- findTagsInObjectURL,
- findTagsInBuffer,
- base64ToArrayBuffer,
-} from '../../exif_helper';
-
-
-const fixtures = {
- orientation: {
- 'none': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QQuRXhpZgAASUkqAAgAAAALAAMBAwABAAAABgAAAA8BAgAIAAAAkgAAABABAgAJAAAAmgAAABoBBQABAAAApAAAABsBBQABAAAArAAAACgBAwABAAAAAgAAADEBAgAMAAAAtAAAADIBAgAUAAAAwAAAABMCAwABAAAAAQAAAGmHBAABAAAA1AAAACWIBAABAAAA7gIAALwDAABzYW1zdW5nAFNNLUc5MjBGAABIAAAAAQAAAEgAAAABAAAAR0lNUCAyLjguMTAAMjAxNjowODoxNSAwMDoyMjoxNQAZAJqCBQABAAAABgIAAJ2CBQABAAAADgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIyMAOQAgAUAAAAFgIAAASQAgAUAAAAKgIAAAGSCgABAAAAPgIAAAKSBQABAAAARgIAAAOSCgABAAAATgIAAASSCgABAAAAVgIAAAWSBQABAAAAXgIAAAeSAwABAAAAAgAAAAmSAwABAAAAAAAAAAqSBQABAAAAZgIAAHySBwBiAAAAbgIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAKgBAABAAAAEAAAAAOgBAABAAAACQAAAAKkAwABAAAAAAAAAAOkAwABAAAAAAAAAAWkAwABAAAAHAAAAAakAwABAAAAAAAAACCkAgAeAAAA0AIAAAAAAAABAAAAMgAAABMAAAAKAAAAMjAxNjowODoxNSAwMDowNDoxNwAyMDE2OjA4OjE1IDAwOjA0OjE3ACMsAADSBwAAOTEAAJQaAAAMAQAAZAAAAAAAAAABAAAAOTEAAJQaAAArAAAACgAAAAcAAQAHAAQAAAAwMTAwAgAEAAEAAAAAIAEADAAEAAEAAAAAAAAAEAAFAAEAAABaAAAAQAAEAAEAAAAAAAAAUAAEAAEAAAABAAAAAAEDAAEAAAAAAAAAAAAAAAAAAAAAAAAAQTE2TExJQzA4U00gQTE2TExJTDAyR00KAAAAAAAACQAAAAEABAAAAAICAAABAAIAAgAAAE4AAAACAAUAAwAAAGADAAADAAIAAgAAAEUAAAAEAAUAAwAAAHgDAAAFAAEAAQAAAAEAAAAGAAUAAQAAAJADAAAHAAUAAwAAAJgDAAAdAAIACwAAALADAAAAAAAALwAAAAEAAAAGAAAAAQAAABAAAAABAAAADwAAAAEAAAAZAAAAAQAAABYAAAABAAAAAAAAAAEAAAAWAAAAAQAAAAQAAAABAAAADQAAAAEAAAAyMDE2OjA4OjE0AAAHAAABBAABAAAAAAIAAAEBBAABAAAAIAEAAAMBAwABAAAABgAAABIBAwABAAAABgAAABoBBQABAAAAFgQAABsBBQABAAAAHgQAACgBAwABAAAAAgAAAAAAAABIAAAAAQAAAEgAAAABAAAA/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdfYmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8AAEQgACQAQAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A57SbCC+aRZmdQoXleoJYD+tV9Vshp2tSWiuXWM8E/Sot7lzS/v2Lvh7/AFlx/ur/AOhiq+uf8hp/r/jVP4BL4z//2Q==',
- '6': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QQ6RXhpZgAASUkqAAgAAAAMAAMBAwABAAAABgAAAA8BAgAIAAAAngAAABABAgAJAAAApgAAABIBAwABAAAABgAAABoBBQABAAAAsAAAABsBBQABAAAAuAAAACgBAwABAAAAAgAAADEBAgAMAAAAwAAAADIBAgAUAAAAzAAAABMCAwABAAAAAQAAAGmHBAABAAAA4AAAACWIBAABAAAA+gIAAMgDAABzYW1zdW5nAFNNLUc5MjBGAABIAAAAAQAAAEgAAAABAAAAR0lNUCAyLjguMTAAMjAxNjowODoxNSAwMDoyMjoxNQAZAJqCBQABAAAAEgIAAJ2CBQABAAAAGgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIyMAOQAgAUAAAAIgIAAASQAgAUAAAANgIAAAGSCgABAAAASgIAAAKSBQABAAAAUgIAAAOSCgABAAAAWgIAAASSCgABAAAAYgIAAAWSBQABAAAAagIAAAeSAwABAAAAAgAAAAmSAwABAAAAAAAAAAqSBQABAAAAcgIAAHySBwBiAAAAegIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAKgBAABAAAAEAAAAAOgBAABAAAACQAAAAKkAwABAAAAAAAAAAOkAwABAAAAAAAAAAWkAwABAAAAHAAAAAakAwABAAAAAAAAACCkAgAeAAAA3AIAAAAAAAABAAAAMgAAABMAAAAKAAAAMjAxNjowODoxNSAwMDowNDoxNwAyMDE2OjA4OjE1IDAwOjA0OjE3ACMsAADSBwAAOTEAAJQaAAAMAQAAZAAAAAAAAAABAAAAOTEAAJQaAAArAAAACgAAAAcAAQAHAAQAAAAwMTAwAgAEAAEAAAAAIAEADAAEAAEAAAAAAAAAEAAFAAEAAABaAAAAQAAEAAEAAAAAAAAAUAAEAAEAAAABAAAAAAEDAAEAAAAAAAAAAAAAAAAAAAAAAAAAQTE2TExJQzA4U00gQTE2TExJTDAyR00KAAAAAAAACQAAAAEABAAAAAICAAABAAIAAgAAAE4AAAACAAUAAwAAAGwDAAADAAIAAgAAAEUAAAAEAAUAAwAAAIQDAAAFAAEAAQAAAAEAAAAGAAUAAQAAAJwDAAAHAAUAAwAAAKQDAAAdAAIACwAAALwDAAAAAAAALwAAAAEAAAAGAAAAAQAAABAAAAABAAAADwAAAAEAAAAZAAAAAQAAABYAAAABAAAAAAAAAAEAAAAWAAAAAQAAAAQAAAABAAAADQAAAAEAAAAyMDE2OjA4OjE0AAAHAAABBAABAAAAAAIAAAEBBAABAAAAIAEAAAMBAwABAAAABgAAABIBAwABAAAABgAAABoBBQABAAAAIgQAABsBBQABAAAAKgQAACgBAwABAAAAAgAAAAAAAABIAAAAAQAAAEgAAAABAAAA/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdfYmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8AAEQgACQAQAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A57SbCC+aRZmdQoXleoJYD+tV9Vshp2tSWiuXWM8E/Sot7lzS/v2Lvh7/AFlx/ur/AOhiq+uf8hp/r/jVP4BL4z//2Q==',
- '3': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QQ6RXhpZgAASUkqAAgAAAAMAAMBAwABAAAABgAAAA8BAgAIAAAAngAAABABAgAJAAAApgAAABIBAwABAAAAAwAAABoBBQABAAAAsAAAABsBBQABAAAAuAAAACgBAwABAAAAAgAAADEBAgAMAAAAwAAAADIBAgAUAAAAzAAAABMCAwABAAAAAQAAAGmHBAABAAAA4AAAACWIBAABAAAA+gIAAMgDAABzYW1zdW5nAFNNLUc5MjBGAABIAAAAAQAAAEgAAAABAAAAR0lNUCAyLjguMTAAMjAxNjowODoxNSAwMDoyMjoxNQAZAJqCBQABAAAAEgIAAJ2CBQABAAAAGgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIyMAOQAgAUAAAAIgIAAASQAgAUAAAANgIAAAGSCgABAAAASgIAAAKSBQABAAAAUgIAAAOSCgABAAAAWgIAAASSCgABAAAAYgIAAAWSBQABAAAAagIAAAeSAwABAAAAAgAAAAmSAwABAAAAAAAAAAqSBQABAAAAcgIAAHySBwBiAAAAegIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAKgBAABAAAAEAAAAAOgBAABAAAACQAAAAKkAwABAAAAAAAAAAOkAwABAAAAAAAAAAWkAwABAAAAHAAAAAakAwABAAAAAAAAACCkAgAeAAAA3AIAAAAAAAABAAAAMgAAABMAAAAKAAAAMjAxNjowODoxNSAwMDowNDoxNwAyMDE2OjA4OjE1IDAwOjA0OjE3ACMsAADSBwAAOTEAAJQaAAAMAQAAZAAAAAAAAAABAAAAOTEAAJQaAAArAAAACgAAAAcAAQAHAAQAAAAwMTAwAgAEAAEAAAAAIAEADAAEAAEAAAAAAAAAEAAFAAEAAABaAAAAQAAEAAEAAAAAAAAAUAAEAAEAAAABAAAAAAEDAAEAAAAAAAAAAAAAAAAAAAAAAAAAQTE2TExJQzA4U00gQTE2TExJTDAyR00KAAAAAAAACQAAAAEABAAAAAICAAABAAIAAgAAAE4AAAACAAUAAwAAAGwDAAADAAIAAgAAAEUAAAAEAAUAAwAAAIQDAAAFAAEAAQAAAAEAAAAGAAUAAQAAAJwDAAAHAAUAAwAAAKQDAAAdAAIACwAAALwDAAAAAAAALwAAAAEAAAAGAAAAAQAAABAAAAABAAAADwAAAAEAAAAZAAAAAQAAABYAAAABAAAAAAAAAAEAAAAWAAAAAQAAAAQAAAABAAAADQAAAAEAAAAyMDE2OjA4OjE0AAAHAAABBAABAAAAAAIAAAEBBAABAAAAIAEAAAMBAwABAAAABgAAABIBAwABAAAABgAAABoBBQABAAAAIgQAABsBBQABAAAAKgQAACgBAwABAAAAAgAAAAAAAABIAAAAAQAAAEgAAAABAAAA/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdfYmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8AAEQgACQAQAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A57SbCC+aRZmdQoXleoJYD+tV9Vshp2tSWiuXWM8E/Sot7lzS/v2Lvh7/AFlx/ur/AOhiq+uf8hp/r/jVP4BL4z//2Q==',
- '8': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QQ6RXhpZgAASUkqAAgAAAAMAAMBAwABAAAABgAAAA8BAgAIAAAAngAAABABAgAJAAAApgAAABIBAwABAAAACAAAABoBBQABAAAAsAAAABsBBQABAAAAuAAAACgBAwABAAAAAgAAADEBAgAMAAAAwAAAADIBAgAUAAAAzAAAABMCAwABAAAAAQAAAGmHBAABAAAA4AAAACWIBAABAAAA+gIAAMgDAABzYW1zdW5nAFNNLUc5MjBGAABIAAAAAQAAAEgAAAABAAAAR0lNUCAyLjguMTAAMjAxNjowODoxNSAwMDoyMjoxNQAZAJqCBQABAAAAEgIAAJ2CBQABAAAAGgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIyMAOQAgAUAAAAIgIAAASQAgAUAAAANgIAAAGSCgABAAAASgIAAAKSBQABAAAAUgIAAAOSCgABAAAAWgIAAASSCgABAAAAYgIAAAWSBQABAAAAagIAAAeSAwABAAAAAgAAAAmSAwABAAAAAAAAAAqSBQABAAAAcgIAAHySBwBiAAAAegIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAKgBAABAAAAEAAAAAOgBAABAAAACQAAAAKkAwABAAAAAAAAAAOkAwABAAAAAAAAAAWkAwABAAAAHAAAAAakAwABAAAAAAAAACCkAgAeAAAA3AIAAAAAAAABAAAAMgAAABMAAAAKAAAAMjAxNjowODoxNSAwMDowNDoxNwAyMDE2OjA4OjE1IDAwOjA0OjE3ACMsAADSBwAAOTEAAJQaAAAMAQAAZAAAAAAAAAABAAAAOTEAAJQaAAArAAAACgAAAAcAAQAHAAQAAAAwMTAwAgAEAAEAAAAAIAEADAAEAAEAAAAAAAAAEAAFAAEAAABaAAAAQAAEAAEAAAAAAAAAUAAEAAEAAAABAAAAAAEDAAEAAAAAAAAAAAAAAAAAAAAAAAAAQTE2TExJQzA4U00gQTE2TExJTDAyR00KAAAAAAAACQAAAAEABAAAAAICAAABAAIAAgAAAE4AAAACAAUAAwAAAGwDAAADAAIAAgAAAEUAAAAEAAUAAwAAAIQDAAAFAAEAAQAAAAEAAAAGAAUAAQAAAJwDAAAHAAUAAwAAAKQDAAAdAAIACwAAALwDAAAAAAAALwAAAAEAAAAGAAAAAQAAABAAAAABAAAADwAAAAEAAAAZAAAAAQAAABYAAAABAAAAAAAAAAEAAAAWAAAAAQAAAAQAAAABAAAADQAAAAEAAAAyMDE2OjA4OjE0AAAHAAABBAABAAAAAAIAAAEBBAABAAAAIAEAAAMBAwABAAAABgAAABIBAwABAAAABgAAABoBBQABAAAAIgQAABsBBQABAAAAKgQAACgBAwABAAAAAgAAAAAAAABIAAAAAQAAAEgAAAABAAAA/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdfYmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8AAEQgACQAQAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A57SbCC+aRZmdQoXleoJYD+tV9Vshp2tSWiuXWM8E/Sot7lzS/v2Lvh7/AFlx/ur/AOhiq+uf8hp/r/jVP4BL4z//2Q==',
- '1': 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QQ6RXhpZgAASUkqAAgAAAAMAAMBAwABAAAABgAAAA8BAgAIAAAAngAAABABAgAJAAAApgAAABIBAwABAAAAAQAAABoBBQABAAAAsAAAABsBBQABAAAAuAAAACgBAwABAAAAAgAAADEBAgAMAAAAwAAAADIBAgAUAAAAzAAAABMCAwABAAAAAQAAAGmHBAABAAAA4AAAACWIBAABAAAA+gIAAMgDAABzYW1zdW5nAFNNLUc5MjBGAABIAAAAAQAAAEgAAAABAAAAR0lNUCAyLjguMTAAMjAxNjowODoxNSAwMDoyMjoxNQAZAJqCBQABAAAAEgIAAJ2CBQABAAAAGgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIyMAOQAgAUAAAAIgIAAASQAgAUAAAANgIAAAGSCgABAAAASgIAAAKSBQABAAAAUgIAAAOSCgABAAAAWgIAAASSCgABAAAAYgIAAAWSBQABAAAAagIAAAeSAwABAAAAAgAAAAmSAwABAAAAAAAAAAqSBQABAAAAcgIAAHySBwBiAAAAegIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAKgBAABAAAAEAAAAAOgBAABAAAACQAAAAKkAwABAAAAAAAAAAOkAwABAAAAAAAAAAWkAwABAAAAHAAAAAakAwABAAAAAAAAACCkAgAeAAAA3AIAAAAAAAABAAAAMgAAABMAAAAKAAAAMjAxNjowODoxNSAwMDowNDoxNwAyMDE2OjA4OjE1IDAwOjA0OjE3ACMsAADSBwAAOTEAAJQaAAAMAQAAZAAAAAAAAAABAAAAOTEAAJQaAAArAAAACgAAAAcAAQAHAAQAAAAwMTAwAgAEAAEAAAAAIAEADAAEAAEAAAAAAAAAEAAFAAEAAABaAAAAQAAEAAEAAAAAAAAAUAAEAAEAAAABAAAAAAEDAAEAAAAAAAAAAAAAAAAAAAAAAAAAQTE2TExJQzA4U00gQTE2TExJTDAyR00KAAAAAAAACQAAAAEABAAAAAICAAABAAIAAgAAAE4AAAACAAUAAwAAAGwDAAADAAIAAgAAAEUAAAAEAAUAAwAAAIQDAAAFAAEAAQAAAAEAAAAGAAUAAQAAAJwDAAAHAAUAAwAAAKQDAAAdAAIACwAAALwDAAAAAAAALwAAAAEAAAAGAAAAAQAAABAAAAABAAAADwAAAAEAAAAZAAAAAQAAABYAAAABAAAAAAAAAAEAAAAWAAAAAQAAAAQAAAABAAAADQAAAAEAAAAyMDE2OjA4OjE0AAAHAAABBAABAAAAAAIAAAEBBAABAAAAIAEAAAMBAwABAAAABgAAABIBAwABAAAABgAAABoBBQABAAAAIgQAABsBBQABAAAAKgQAACgBAwABAAAAAgAAAAAAAABIAAAAAQAAAEgAAAABAAAA/9sAQwAQCwwODAoQDg0OEhEQExgoGhgWFhgxIyUdKDozPTw5Mzg3QEhcTkBEV0U3OFBtUVdfYmdoZz5NcXlwZHhcZWdj/9sAQwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8AAEQgACQAQAwEhAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A57SbCC+aRZmdQoXleoJYD+tV9Vshp2tSWiuXWM8E/Sot7lzS/v2Lvh7/AFlx/ur/AOhiq+uf8hp/r/jVP4BL4z//2Q==',
- },
-};
-
-describe('EXIF Helper', () => {
- describe('findTagsInObjectURL', () => {
- it('should return null if the src type is not supported', (done) => {
- findTagsInObjectURL('blabla').then(tags => {
- expect(tags === null).to.equal(true);
- done();
- });
- });
-
- it('should fail for an invalid blob type', (done) => {
- findTagsInObjectURL('blob:balbla')
- .then(() => {
- done(new Error('Expected promise to reject'));
- })
- .catch(err => {
- expect(err).to.exist;
- done();
- });
- });
-
- it('should extract orientation from a valid Blob URL', (done) => {
- // Create a Blob from a valid JPEG base64 fixture
- const base64 = fixtures.orientation['6'].replace(/^data:image\/jpeg;base64,/, '');
- const binary = atob(base64);
- const array = new Uint8Array(binary.length);
- for (let i = 0; i < binary.length; i++) array[i] = binary.charCodeAt(i);
- const blob = new Blob([array], { type: 'image/jpeg' });
- const url = URL.createObjectURL(blob);
- findTagsInObjectURL(url).then(tags => {
- expect(tags).to.deep.equal({ orientation: 6 });
- URL.revokeObjectURL(url);
- done();
- }).catch(err => {
- URL.revokeObjectURL(url);
- done(err);
- });
- });
- });
-
- describe('findTagsInBuffer', () => {
- it('should result in a rotation value of 1', () => {
- const result = findTagsInBuffer(base64ToArrayBuffer(fixtures.orientation['1']));
- expect(result).to.deep.equal({orientation: 1});
- });
- it('should result in a rotation value of 6', () => {
- const result = findTagsInBuffer(base64ToArrayBuffer(fixtures.orientation['6']));
- expect(result).to.deep.equal({orientation: 6});
- });
- it('should result in a rotation value of 3', () => {
- const result = findTagsInBuffer(base64ToArrayBuffer(fixtures.orientation['3']));
- expect(result).to.deep.equal({orientation: 3});
- });
- it('should result in a rotation value of 4', () => {
- const result = findTagsInBuffer(base64ToArrayBuffer(fixtures.orientation['8']));
- expect(result).to.deep.equal({orientation: 8});
- });
- it('should return nothing if orientation is not found', () => {
- const result = findTagsInBuffer(base64ToArrayBuffer(fixtures.orientation.none));
- expect(result).to.deep.equal({});
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/browser/frame_grabber_halfsample.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/browser/frame_grabber_halfsample.spec.ts
deleted file mode 100644
index e3b4a1f..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/browser/frame_grabber_halfsample.spec.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import { expect } from 'chai';
-import Quagga from '../../../quagga';
-
-// Utility to build a base config for browser decodeSingle
-function baseConfig() {
- return {
- inputStream: {
- type: 'ImageStream',
- size: 640,
- // sequence disabled; single image
- },
- locator: {
- patchSize: 'medium',
- halfSample: false,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['code_128_reader'],
- },
- locate: true,
- src: '/test/fixtures/code_128/image-001.jpg',
- } as any;
-}
-
-describe('FrameGrabber Browser inputStream.halfSample', () => {
- function canvasMeanRGBA(canvas?: HTMLCanvasElement | null) {
- if (!canvas) return { r: 0, g: 0, b: 0, a: 0 };
- const ctx = canvas.getContext('2d');
- if (!ctx) return { r: 0, g: 0, b: 0, a: 0 };
- const w = canvas.width;
- const h = canvas.height;
- const img = ctx.getImageData(0, 0, w, h).data;
- let r = 0, g = 0, b = 0, a = 0;
- for (let i = 0; i < img.length; i += 4) {
- r += img[i];
- g += img[i + 1];
- b += img[i + 2];
- a += img[i + 3];
- }
- const count = img.length / 4;
- return { r: r / count, g: g / count, b: b / count, a: a / count };
- }
-
- it('captures decode result and optional canvas with inputStream.halfSample=false', async function() {
- this.timeout(10000);
- const config = baseConfig();
- // Explicitly ensure inputStream.halfSample is false
- (config as any).inputStream.halfSample = false;
- const result = await Quagga.decodeSingle(config as any);
- expect(result, 'expect decode to succeed without halfSample at acquisition').to.be.an('Object');
- expect(Quagga.canvas).to.be.an('Object');
- expect(Quagga.canvas.dom).to.be.an('Object');
- expect(Quagga.canvas.ctx).to.be.an('Object');
- const imgCanvas = (Quagga.canvas.dom && (Quagga.canvas.dom as any).image) || (Quagga.canvas.ctx && (Quagga.canvas.ctx as any).image && (Quagga.canvas.ctx as any).image.canvas) || null;
- const overlayCanvas = (Quagga.canvas.dom && (Quagga.canvas.dom as any).overlay) || (Quagga.canvas.ctx && (Quagga.canvas.ctx as any).overlay && (Quagga.canvas.ctx as any).overlay.canvas) || null;
- const docCanvas = document.querySelector('canvas') as HTMLCanvasElement | null;
- const chosen = (imgCanvas || overlayCanvas || docCanvas) as HTMLCanvasElement | null;
- const mean = canvasMeanRGBA(chosen);
- // Store on window for comparison in next test
- (window as any).__mean_no_halfsample = mean;
- });
-
- it('captures decode result and optional canvas with inputStream.halfSample=true', async function() {
- this.timeout(10000);
- const config = baseConfig();
- // Toggle inputStream.halfSample to true to exercise half-sample path in browser grabber
- (config as any).inputStream.halfSample = true;
- const result = await Quagga.decodeSingle(config as any);
- // Decode may return null when halfSample is applied at acquisition
- expect(result === null || typeof result === 'object', 'result should be object or null').to.be.true;
- const imgCanvas = (Quagga.canvas.dom && (Quagga.canvas.dom as any).image) || (Quagga.canvas.ctx && (Quagga.canvas.ctx as any).image && (Quagga.canvas.ctx as any).image.canvas) || null;
- const overlayCanvas = (Quagga.canvas.dom && (Quagga.canvas.dom as any).overlay) || (Quagga.canvas.ctx && (Quagga.canvas.ctx as any).overlay && (Quagga.canvas.ctx as any).overlay.canvas) || null;
- const docCanvas = document.querySelector('canvas') as HTMLCanvasElement | null;
- const chosen = (imgCanvas || overlayCanvas || docCanvas) as HTMLCanvasElement | null;
- const mean = canvasMeanRGBA(chosen);
- const prev = (window as any).__mean_no_halfsample;
- // Validate a difference: either decode differs or canvas mean differs
- const decodeDiffers = (result === null);
- const delta = Math.abs(mean.r - prev.r) + Math.abs(mean.g - prev.g) + Math.abs(mean.b - prev.b);
- expect(decodeDiffers || delta > 1, 'expect either decode result or canvas to differ').to.be.true;
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/browser/image_loader.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/browser/image_loader.spec.ts
deleted file mode 100644
index 9dcd42d..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/browser/image_loader.spec.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { expect } from 'chai';
-import ImageLoader, { generateImageFilename } from '../../image_loader';
-
-describe('generateImageFilename', () => {
- it('should pad numbers to 3 digits', () => {
- expect(generateImageFilename('/images/', 1)).to.equal('/images/image-001.jpg');
- expect(generateImageFilename('/images/', 42)).to.equal('/images/image-042.jpg');
- expect(generateImageFilename('/images/', 999)).to.equal('/images/image-999.jpg');
- });
- it('should not truncate large numbers', () => {
- expect(generateImageFilename('/images/', 9931)).to.equal('/images/image-9931.jpg');
- });
-});
-
-describe('ImageLoader (browser)', () => {
- it('should load a regular image by URL', (done) => {
- const imgUrl = '../../../../test/fixtures/code_128/image-001.jpg';
- ImageLoader.load(imgUrl, (images: Array<{ img: HTMLImageElement }>) => {
- expect(images).to.have.lengthOf(1);
- const img = images[0].img;
- expect(img).to.be.instanceOf(Image);
- expect(img.complete).to.be.true;
- expect(img.naturalWidth).to.be.greaterThan(0);
- done();
- }, 0, 1, false, {});
- });
-
- it('should load an image with spaces in the filename', (done) => {
- const imgUrl = '../../../../test/fixtures/test image with spaces.jpg';
- ImageLoader.load(imgUrl, (images: Array<{ img: HTMLImageElement }>) => {
- expect(images).to.have.lengthOf(1);
- const img = images[0]?.img;
- expect(img).to.be.instanceOf(Image);
- expect(img.complete).to.be.true;
- expect(img.naturalWidth).to.be.greaterThan(0);
- done();
- }, 0, 1, false, {});
- });
-
- it('should handle load errors gracefully', (done) => {
- const badUrl = '../../../../test/fixtures/does-not-exist.jpg';
- ImageLoader.load(badUrl, (images: Array<{ img: HTMLImageElement }>) => {
- expect(images).to.have.lengthOf(1);
- const img = images[0]?.img;
- expect(img).to.be.instanceOf(Image);
- expect(img.complete).to.be.true;
- expect(img.naturalWidth).to.equal(0); // Should be 0 for failed load
- done();
- }, 0, 1, false, {});
- });
-
- it('should load an image via Blob URL', (done) => {
- // Valid 1x1 PNG image
- const base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wIAAgMBApUeD5cAAAAASUVORK5CYII=";
- const binary = atob(base64);
- const array = new Uint8Array(binary.length);
- for (let i = 0; i < binary.length; i++) {
- array[i] = binary.charCodeAt(i);
- }
- const blob = new Blob([array], { type: 'image/png' });
- const url = URL.createObjectURL(blob);
- ImageLoader.load(url, (images: Array<{ img: HTMLImageElement }>) => {
- expect(images).to.have.lengthOf(1);
- const img = images[0]?.img;
- expect(img).to.be.instanceOf(Image);
- expect(img.complete).to.be.true;
- expect(img.naturalWidth).to.be.greaterThan(0);
- URL.revokeObjectURL(url); // Clean up Blob URL
- done();
- }, 0, 1, false, {});
- });
-});
-
-describe('ImageLoader sequence integration (code_128 sequence)', () => {
- it('should load images 1-10 from code_128 fixture', function(done) {
- const directory = '../../../../test/fixtures/code_128/';
- ImageLoader.load(directory, (images: Array<{ img: HTMLImageElement }>) => {
- expect(images).to.have.lengthOf(10);
- images.forEach((imgObj, idx) => {
- const img = imgObj.img;
- expect(img).to.be.instanceOf(Image);
- expect(img.complete).to.be.true;
- expect(img.naturalWidth).to.be.greaterThan(0);
- const num = idx + 1;
- const ext = '.jpg';
- expect(img.src).to.match(new RegExp(`image-${num.toString().padStart(3, '0')}${ext}$`));
- });
- done();
- }, 1, 10, true, {});
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/node/camera_access.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/node/camera_access.spec.ts
deleted file mode 100644
index 5df9120..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/node/camera_access.spec.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import CameraAccess from '../../camera_access';
-import Exception from '../../../quagga/Exception';
-
-const Quagga = { CameraAccess };
-
-describe('CameraAccess (node)', () => {
- describe('enumerateVideoDevices', () => {
- it('rejects', async () => {
- try {
- const x = await Quagga.CameraAccess.enumerateVideoDevices();
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err: unknown) {
- const ex = err as Exception;
- expect(ex.code).to.equal(-1);
- expect(ex.message).to.include('enumerateDevices is not defined');
- }
- });
-
- it('rejects with constraints parameter', async () => {
- try {
- const x = await Quagga.CameraAccess.enumerateVideoDevices({ width: 320 });
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err: unknown) {
- const ex = err as Exception;
- // In node, enumerateDevices is not available, so it should reject
- expect(ex.code).to.equal(-1);
- expect(ex.message).to.include('enumerateDevices is not defined');
- }
- });
-
- it('error includes helpful description when serialized', async () => {
- try {
- await Quagga.CameraAccess.enumerateVideoDevices();
- expect.fail('Should have thrown');
- } catch (err: unknown) {
- const json = JSON.stringify(err);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.include('enumerateDevices is not defined');
- expect(parsed.message).to.include('iOS');
- expect(parsed.code).to.equal(-1);
- }
- });
- });
-
- describe('request', () => {
- it('rejects', async () => {
- try {
- const x = await Quagga.CameraAccess.request(null, {});
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(x).to.not.exist;
- } catch (err: unknown) {
- const ex = err as Exception;
- expect(ex.code).to.equal(-1);
- expect(ex.message).to.include('getUserMedia is not defined');
- }
- });
-
- it('error includes helpful description when serialized', async () => {
- try {
- await Quagga.CameraAccess.request(null, {});
- expect.fail('Should have thrown');
- } catch (err: unknown) {
- const json = JSON.stringify(err);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.include('getUserMedia is not defined');
- expect(parsed.message).to.include('iOS');
- expect(parsed.code).to.equal(-1);
- }
- });
- });
-
- describe('release', () => {
- it('works (no-op)', () => {
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions,no-unused-expressions
- expect(Quagga.CameraAccess.release).to.not.throw;
- });
- });
-
- describe('getActiveStream', () => {
- it('no active stream', () => {
- const x = Quagga.CameraAccess.getActiveStream();
- expect(x).to.equal(null);
- });
- });
-
- describe('getActiveStreamLabel', () => {
- it('no active stream', () => {
- const x = Quagga.CameraAccess.getActiveStreamLabel();
- expect(x).to.equal('');
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/input/test/node/data_uri.spec.ts b/quagga2/quagga2-1.12.1/src/input/test/node/data_uri.spec.ts
deleted file mode 100644
index 1e9a3d3..0000000
--- a/quagga2/quagga2-1.12.1/src/input/test/node/data_uri.spec.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import * as fs from 'fs';
-import * as path from 'path';
-import Quagga from '../../../quagga';
-
-/**
- * Tests to verify that Data URIs work correctly in the Node.js environment.
- * This is a critical test case as mentioned in the GitHub issue regarding Data URL support.
- *
- * The original issue (serratus/quaggaJS#433) questioned whether Data URLs work in browser.
- * This file tests Node.js support, while data_uri.spec.ts in the browser folder tests browser support.
- * These tests confirm that Data URIs work correctly in Node.js, validating the Data URL
- * handling code in input_stream.ts (lines 58-67).
- */
-describe('Data URI Support (Node)', () => {
- /**
- * Test that decodeSingle can process a Data URI containing a barcode image.
- * This validates the Data URL handling in input_stream.ts (lines 58-67).
- */
- describe('decodeSingle with Data URI', () => {
- it('should decode a Code 128 barcode from a Data URI', async function() {
- this.timeout(20000); // Allow time for image processing
-
- // Read a test image and convert to Data URI
- const imagePath = path.join(__dirname, '../../../../test/fixtures/code_128/image-001.jpg');
- const imageBuffer = fs.readFileSync(imagePath);
- const base64 = imageBuffer.toString('base64');
- const dataUri = `data:image/jpeg;base64,${base64}`;
-
- const config = {
- src: dataUri,
- inputStream: {
- size: 800,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['code_128_reader'],
- },
- locate: true,
- };
-
- const result = await Quagga.decodeSingle(config);
-
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.code).to.equal('0001285112001000040801');
- expect(result.codeResult.format).to.equal('code_128');
- });
-
- it('should decode an EAN-13 barcode from a Data URI', async function() {
- this.timeout(20000);
-
- // Read a test image and convert to Data URI
- const imagePath = path.join(__dirname, '../../../../test/fixtures/ean/image-001.jpg');
- const imageBuffer = fs.readFileSync(imagePath);
- const base64 = imageBuffer.toString('base64');
- const dataUri = `data:image/jpeg;base64,${base64}`;
-
- const config = {
- src: dataUri,
- inputStream: {
- size: 640,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['ean_reader'],
- },
- locate: true,
- };
-
- const result = await Quagga.decodeSingle(config);
-
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.code).to.equal('3574660239843');
- expect(result.codeResult.format).to.equal('ean_13');
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/locator/barcode_locator.js b/quagga2/quagga2-1.12.1/src/locator/barcode_locator.js
deleted file mode 100644
index 748058a..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/barcode_locator.js
+++ /dev/null
@@ -1,604 +0,0 @@
-import { vec2, mat2 } from 'gl-matrix';
-import ImageWrapper from '../common/image_wrapper';
-import {
- calculatePatchSize,
- otsuThreshold,
- hsv2rgb,
- cluster,
- topGeneric,
- imageRef,
- halfSample,
- computeImageArea,
-} from '../common/cv_utils';
-import ArrayHelper from '../common/array_helper';
-import ImageDebug from '../common/image_debug';
-import Rasterizer from './rasterizer';
-import Tracer from './tracer';
-import skeletonizer from './skeletonizer';
-
-
-
-let _config;
-let _currentImageWrapper;
-let _skelImageWrapper;
-let _subImageWrapper;
-let _labelImageWrapper;
-let _patchGrid;
-let _patchLabelGrid;
-let _imageToPatchGrid;
-let _binaryImageWrapper;
-let _patchSize;
-const _canvasContainer = {
- ctx: {
- binary: null,
- },
- dom: {
- binary: null,
- },
-};
-const _numPatches = { x: 0, y: 0 };
-let _inputImageWrapper;
-let _skeletonizer;
-
-function initBuffers() {
- if (_config.halfSample) {
- _currentImageWrapper = new ImageWrapper({
- // eslint-disable-next-line no-bitwise
- x: _inputImageWrapper.size.x / 2 | 0,
- // eslint-disable-next-line no-bitwise
- y: _inputImageWrapper.size.y / 2 | 0,
- });
- } else {
- _currentImageWrapper = _inputImageWrapper;
- }
-
- _patchSize = calculatePatchSize(_config.patchSize, _currentImageWrapper.size);
-
- // eslint-disable-next-line no-bitwise
- _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;
- // eslint-disable-next-line no-bitwise
- _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0;
-
- _binaryImageWrapper = new ImageWrapper(_currentImageWrapper.size, undefined, Uint8Array, false);
-
- _labelImageWrapper = new ImageWrapper(_patchSize, undefined, Array, true);
-
- // Calculate required buffer size (4 regions for asm.js skeletonizer)
- const skeletonImageDataSize = _patchSize.x * _patchSize.y * 4;
- // Round up to next power of 2 for asm.js heap requirement
- // Use minimum 64KB for optimal asm.js performance (avoids V8 warnings)
- const bufferSize = Math.max(65536, Math.pow(2, Math.ceil(Math.log2(skeletonImageDataSize))));
- const skeletonImageData = new ArrayBuffer(bufferSize);
- _subImageWrapper = new ImageWrapper(_patchSize,
- new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y));
- _skelImageWrapper = new ImageWrapper(_patchSize,
- new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y),
- undefined, true);
- _skeletonizer = skeletonizer(
- { Math, Uint8Array },
- { size: _patchSize.x },
- skeletonImageData,
- );
-
- _imageToPatchGrid = new ImageWrapper({
- // eslint-disable-next-line no-bitwise
- x: (_currentImageWrapper.size.x / _subImageWrapper.size.x) | 0,
- // eslint-disable-next-line no-bitwise
- y: (_currentImageWrapper.size.y / _subImageWrapper.size.y) | 0,
- }, undefined, Array, true);
- _patchGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, undefined, true);
- _patchLabelGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, Int32Array, true);
-}
-
-function initCanvas() {
- if (_config.useWorker || typeof document === 'undefined') {
- return;
- }
- _canvasContainer.dom.binary = document.createElement('canvas');
- _canvasContainer.dom.binary.className = 'binaryBuffer';
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showCanvas === true) {
- document.querySelector('#debug').appendChild(_canvasContainer.dom.binary);
- }
- const willReadFrequently = !!_config.willReadFrequently;
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug?.showCanvas) {
- console.warn('* initCanvas willReadFrequently', willReadFrequently, _config);
- }
- _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext('2d', { willReadFrequently });
- _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x;
- _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y;
-}
-
-/**
- * Creates a bounding box which encloses all the given patches
- * @returns {Array} The minimal bounding box
- */
-function boxFromPatches(patches) {
- let overAvg;
- let i;
- let j;
- let patch;
- let transMat;
- let minx = _binaryImageWrapper.size.x;
- let miny = _binaryImageWrapper.size.y;
- let maxx = -_binaryImageWrapper.size.x;
- let maxy = -_binaryImageWrapper.size.y;
- let box;
- let scale;
-
- // draw all patches which are to be taken into consideration
- overAvg = 0;
- for (i = 0; i < patches.length; i++) {
- patch = patches[i];
- overAvg += patch.rad;
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showPatches) {
- ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: 'red' });
- }
- }
-
- overAvg /= patches.length;
- overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90;
- if (overAvg < 0) {
- overAvg += 180;
- }
-
- overAvg = (180 - overAvg) * Math.PI / 180;
- transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]);
-
- // iterate over patches and rotate by angle
- for (i = 0; i < patches.length; i++) {
- patch = patches[i];
- for (j = 0; j < 4; j++) {
- vec2.transformMat2(patch.box[j], patch.box[j], transMat);
- }
-
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.boxFromPatches.showTransformed) {
- ImageDebug.drawPath(patch.box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#99ff00', lineWidth: 2 });
- }
- }
-
- // find bounding box
- for (i = 0; i < patches.length; i++) {
- patch = patches[i];
- for (j = 0; j < 4; j++) {
- if (patch.box[j][0] < minx) {
- minx = patch.box[j][0];
- }
- if (patch.box[j][0] > maxx) {
- maxx = patch.box[j][0];
- }
- if (patch.box[j][1] < miny) {
- miny = patch.box[j][1];
- }
- if (patch.box[j][1] > maxy) {
- maxy = patch.box[j][1];
- }
- }
- }
-
- box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]];
-
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.boxFromPatches.showTransformedBox) {
- ImageDebug.drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 });
- }
-
- scale = _config.halfSample ? 2 : 1;
- // reverse rotation;
- transMat = mat2.invert(transMat, transMat);
- for (j = 0; j < 4; j++) {
- vec2.transformMat2(box[j], box[j], transMat);
- }
-
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.boxFromPatches.showBB) {
- ImageDebug.drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 });
- }
-
- for (j = 0; j < 4; j++) {
- vec2.scale(box[j], box[j], scale);
- }
-
- return box;
-}
-
-/**
- * Creates a binary image of the current image
- */
-function binarizeImage() {
- otsuThreshold(_currentImageWrapper, _binaryImageWrapper);
- _binaryImageWrapper.zeroBorder();
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showCanvas) {
- _binaryImageWrapper.show(_canvasContainer.dom.binary, 255);
- }
-}
-
-/**
- * Iterate over the entire image
- * extract patches
- */
-function findPatches() {
- let i;
- let j;
- let x;
- let y;
- let moments;
- let patchesFound = [];
- let rasterizer;
- let rasterResult;
- let patch;
- for (i = 0; i < _numPatches.x; i++) {
- for (j = 0; j < _numPatches.y; j++) {
- x = _subImageWrapper.size.x * i;
- y = _subImageWrapper.size.y * j;
-
- // seperate parts
- skeletonize(x, y);
-
- // Rasterize, find individual bars
- _skelImageWrapper.zeroBorder();
- ArrayHelper.init(_labelImageWrapper.data, 0);
- rasterizer = Rasterizer.create(_skelImageWrapper, _labelImageWrapper);
- rasterResult = rasterizer.rasterize(0);
-
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showLabels) {
- _labelImageWrapper.overlay(_canvasContainer.dom.binary, Math.floor(360 / rasterResult.count),
- { x, y });
- }
-
- // calculate moments from the skeletonized patch
- moments = _labelImageWrapper.moments(rasterResult.count);
-
- // extract eligible patches
- patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y));
- }
- }
-
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showFoundPatches) {
- for (i = 0; i < patchesFound.length; i++) {
- patch = patchesFound[i];
- ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
- { color: '#99ff00', lineWidth: 2 });
- }
- }
-
- return patchesFound;
-}
-
-/**
- * Finds those connected areas which contain at least 6 patches
- * and returns them ordered DESC by the number of contained patches
- * @param {Number} maxLabel
- */
-function findBiggestConnectedAreas(maxLabel) {
- let i;
- let sum;
- let labelHist = [];
- let topLabels = [];
-
-
- for (i = 0; i < maxLabel; i++) {
- labelHist.push(0);
- }
- sum = _patchLabelGrid.data.length;
- while (sum--) {
- if (_patchLabelGrid.data[sum] > 0) {
- labelHist[_patchLabelGrid.data[sum] - 1]++;
- }
- }
-
- labelHist = labelHist.map((val, idx) => ({
- val,
- label: idx + 1,
- }));
-
- labelHist.sort((a, b) => b.val - a.val);
-
- // extract top areas with at least 5 patches present
- topLabels = labelHist.filter((el) => el.val >= 5);
-
- return topLabels;
-}
-
-/**
- *
- */
-function findBoxes(topLabels, maxLabel) {
- let i;
- let j;
- let sum;
- const patches = [];
- let patch;
- let box;
- const boxes = [];
- const hsv = [0, 1, 1];
- const rgb = [0, 0, 0];
-
- for (i = 0; i < topLabels.length; i++) {
- sum = _patchLabelGrid.data.length;
- patches.length = 0;
- while (sum--) {
- if (_patchLabelGrid.data[sum] === topLabels[i].label) {
- patch = _imageToPatchGrid.data[sum];
- patches.push(patch);
- }
- }
- box = boxFromPatches(patches);
- if (box) {
- boxes.push(box);
-
- // draw patch-labels if requested
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showRemainingPatchLabels) {
- for (j = 0; j < patches.length; j++) {
- patch = patches[j];
- hsv[0] = (topLabels[i].label / (maxLabel + 1)) * 360;
- hsv2rgb(hsv, rgb);
- ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
- { color: `rgb(${rgb.join(',')})`, lineWidth: 2 });
- }
- }
- }
- }
- return boxes;
-}
-
-/**
- * Find similar moments (via cluster)
- * @param {Object} moments
- */
-function similarMoments(moments) {
- const clusters = cluster(moments, 0.90);
- const topCluster = topGeneric(clusters, 1, (e) => e.getPoints().length);
- let points = []; const
- result = [];
- if (topCluster.length === 1) {
- points = topCluster[0].item.getPoints();
- for (let i = 0; i < points.length; i++) {
- result.push(points[i].point);
- }
- }
- return result;
-}
-
-function skeletonize(x, y) {
- _binaryImageWrapper.subImageAsCopy(_subImageWrapper, imageRef(x, y));
- _skeletonizer.skeletonize();
-
- // Show skeleton if requested
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showSkeleton) {
- _skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, imageRef(x, y));
- }
-}
-
-/**
- * Extracts and describes those patches which seem to contain a barcode pattern
- * @param {Array} moments
- * @param {Object} patchPos,
- * @param {Number} x
- * @param {Number} y
- * @returns {Array} list of patches
- */
-function describePatch(moments, patchPos, x, y) {
- let k;
- let avg;
- const eligibleMoments = [];
- let matchingMoments;
- let patch;
- const patchesFound = [];
- const minComponentWeight = Math.ceil(_patchSize.x / 3);
-
- if (moments.length >= 2) {
- // only collect moments which's area covers at least minComponentWeight pixels.
- for (k = 0; k < moments.length; k++) {
- if (moments[k].m00 > minComponentWeight) {
- eligibleMoments.push(moments[k]);
- }
- }
-
- // if at least 2 moments are found which have at least minComponentWeights covered
- if (eligibleMoments.length >= 2) {
- matchingMoments = similarMoments(eligibleMoments);
- avg = 0;
- // determine the similarity of the moments
- for (k = 0; k < matchingMoments.length; k++) {
- avg += matchingMoments[k]?.rad ?? 0;
- }
-
- // Only two of the moments are allowed not to fit into the equation
- // add the patch to the set
- if (matchingMoments.length > 1
- && matchingMoments.length >= (eligibleMoments.length / 4) * 3
- && matchingMoments.length > moments.length / 4) {
- avg /= matchingMoments.length;
- patch = {
- index: patchPos[1] * _numPatches.x + patchPos[0],
- pos: {
- x,
- y,
- },
- box: [
- vec2.clone([x, y]),
- vec2.clone([x + _subImageWrapper.size.x, y]),
- vec2.clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]),
- vec2.clone([x, y + _subImageWrapper.size.y]),
- ],
- moments: matchingMoments,
- rad: avg,
- vec: vec2.clone([Math.cos(avg), Math.sin(avg)]),
- };
- patchesFound.push(patch);
- }
- }
- }
- return patchesFound;
-}
-
-/**
- * finds patches which are connected and share the same orientation
- * @param {Object} patchesFound
- */
-function rasterizeAngularSimilarity(patchesFound) {
- let label = 0;
- const threshold = 0.95;
- let currIdx = 0;
- let j;
- let patch;
- const hsv = [0, 1, 1];
- const rgb = [0, 0, 0];
-
- function notYetProcessed() {
- let i;
- for (i = 0; i < _patchLabelGrid.data.length; i++) {
- if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) {
- return i;
- }
- }
- return _patchLabelGrid.data.length;
- }
-
- function trace(currentIdx) {
- let x;
- let y;
- let currentPatch;
- let idx;
- let dir;
- const current = {
- x: currentIdx % _patchLabelGrid.size.x,
- y: (currentIdx / _patchLabelGrid.size.x) | 0,
- };
- let similarity;
-
- if (currentIdx < _patchLabelGrid.data.length) {
- currentPatch = _imageToPatchGrid.data[currentIdx];
- // assign label
- _patchLabelGrid.data[currentIdx] = label;
- for (dir = 0; dir < Tracer.searchDirections.length; dir++) {
- y = current.y + Tracer.searchDirections[dir][0];
- x = current.x + Tracer.searchDirections[dir][1];
- idx = y * _patchLabelGrid.size.x + x;
-
- // continue if patch empty
- if (_patchGrid.data[idx] === 0) {
- _patchLabelGrid.data[idx] = Number.MAX_VALUE;
- // eslint-disable-next-line no-continue
- continue;
- }
-
- if (_patchLabelGrid.data[idx] === 0) {
- similarity = Math.abs(vec2.dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec));
- if (similarity > threshold) {
- trace(idx);
- }
- }
- }
- }
- }
-
- // prepare for finding the right patches
- ArrayHelper.init(_patchGrid.data, 0);
- ArrayHelper.init(_patchLabelGrid.data, 0);
- ArrayHelper.init(_imageToPatchGrid.data, null);
-
- for (j = 0; j < patchesFound.length; j++) {
- patch = patchesFound[j];
- _imageToPatchGrid.data[patch.index] = patch;
- _patchGrid.data[patch.index] = 1;
- }
-
- // rasterize the patches found to determine area
- _patchGrid.zeroBorder();
-
- // eslint-disable-next-line no-cond-assign
- while ((currIdx = notYetProcessed()) < _patchLabelGrid.data.length) {
- label++;
- trace(currIdx);
- }
-
- // draw patch-labels if requested
- if (typeof ENV !== 'undefined' && ENV.development && _config.debug.showPatchLabels) {
- for (j = 0; j < _patchLabelGrid.data.length; j++) {
- if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) {
- patch = _imageToPatchGrid.data[j];
- hsv[0] = (_patchLabelGrid.data[j] / (label + 1)) * 360;
- hsv2rgb(hsv, rgb);
- ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
- { color: `rgb(${rgb.join(',')})`, lineWidth: 2 });
- }
- }
- }
-
- return label;
-}
-
-export default {
- init(inputImageWrapper, config) {
- _config = config;
- _inputImageWrapper = inputImageWrapper;
-
- initBuffers();
- initCanvas();
- },
-
- locate() {
- if (_config.halfSample) {
- halfSample(_inputImageWrapper, _currentImageWrapper);
- }
-
- binarizeImage();
- const patchesFound = findPatches();
- // return unless 5% or more patches are found
- if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) {
- return null;
- }
-
- // rasterrize area by comparing angular similarity;
- const maxLabel = rasterizeAngularSimilarity(patchesFound);
- if (maxLabel < 1) {
- return null;
- }
-
- // search for area with the most patches (biggest connected area)
- const topLabels = findBiggestConnectedAreas(maxLabel);
- if (topLabels.length === 0) {
- return null;
- }
-
- const boxes = findBoxes(topLabels, maxLabel);
- return boxes;
- },
-
- checkImageConstraints(inputStream, config) {
- let patchSize;
- let width = inputStream.getWidth();
- let height = inputStream.getHeight();
- const thisHalfSample = config.halfSample ? 0.5 : 1;
- let area;
-
- // calculate width and height based on area
- if (inputStream.getConfig().area) {
- area = computeImageArea(width, height, inputStream.getConfig().area);
- inputStream.setTopRight({ x: area.sx, y: area.sy });
- inputStream.setCanvasSize({ x: width, y: height });
- width = area.sw;
- height = area.sh;
- }
-
- const size = {
- x: Math.floor(width * thisHalfSample),
- y: Math.floor(height * thisHalfSample),
- };
-
- patchSize = calculatePatchSize(config.patchSize, size);
- if (typeof ENV !== 'undefined' && ENV.development && config.debug?.showPatchSize) {
- console.log(`Patch-Size: ${JSON.stringify(patchSize)}`);
- }
-
- inputStream.setWidth(Math.max(Math.floor(Math.floor(size.x / patchSize.x) * (1 / thisHalfSample) * patchSize.x), patchSize.x));
- inputStream.setHeight(Math.max(Math.floor(Math.floor(size.y / patchSize.y) * (1 / thisHalfSample) * patchSize.y), patchSize.y));
-
- if ((inputStream.getWidth() % patchSize.x) === 0 && (inputStream.getHeight() % patchSize.y) === 0) {
- return true;
- }
-
- throw new Error(`Image dimensions do not comply with the current settings: Width (${
- width} )and height (${height
- }) must a multiple of ${patchSize.x}`);
- },
-};
diff --git a/quagga2/quagga2-1.12.1/src/locator/rasterizer.js b/quagga2/quagga2-1.12.1/src/locator/rasterizer.js
deleted file mode 100644
index de8ebd3..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/rasterizer.js
+++ /dev/null
@@ -1,195 +0,0 @@
-import Tracer from './tracer';
-
-/**
- * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization
- */
-const Rasterizer = {
- createContour2D() {
- return {
- dir: null,
- index: null,
- firstVertex: null,
- insideContours: null,
- nextpeer: null,
- prevpeer: null,
- };
- },
- CONTOUR_DIR: {
- CW_DIR: 0,
- CCW_DIR: 1,
- UNKNOWN_DIR: 2,
- },
- DIR: {
- OUTSIDE_EDGE: -32767,
- INSIDE_EDGE: -32766,
- },
- create(imageWrapper, labelWrapper) {
- const imageData = imageWrapper.data;
- const labelData = labelWrapper.data;
- const width = imageWrapper.size.x;
- const height = imageWrapper.size.y;
- const tracer = Tracer.create(imageWrapper, labelWrapper);
-
- return {
- rasterize(depthlabel) {
- let color;
- let bc;
- let lc;
- let labelindex;
- let cx;
- let cy;
- const colorMap = [];
- let vertex;
- let p;
- let cc;
- let sc;
- let pos;
- let connectedCount = 0;
- let i;
-
- for (i = 0; i < 400; i++) {
- colorMap[i] = 0;
- }
-
- colorMap[0] = imageData[0];
- cc = null;
- for (cy = 1; cy < height - 1; cy++) {
- labelindex = 0;
- bc = colorMap[0];
- for (cx = 1; cx < width - 1; cx++) {
- pos = cy * width + cx;
- if (labelData[pos] === 0) {
- color = imageData[pos];
- if (color !== bc) {
- if (labelindex === 0) {
- lc = connectedCount + 1;
- colorMap[lc] = color;
- bc = color;
- vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE);
- if (vertex !== null) {
- connectedCount++;
- labelindex = lc;
- p = Rasterizer.createContour2D();
- p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;
- p.index = labelindex;
- p.firstVertex = vertex;
- p.nextpeer = cc;
- p.insideContours = null;
- if (cc !== null) {
- cc.prevpeer = p;
- }
- cc = p;
- }
- } else {
- vertex = tracer
- .contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex);
- if (vertex !== null) {
- p = Rasterizer.createContour2D();
- p.firstVertex = vertex;
- p.insideContours = null;
- if (depthlabel === 0) {
- p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR;
- } else {
- p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;
- }
- p.index = depthlabel;
- sc = cc;
- while ((sc !== null) && sc.index !== labelindex) {
- sc = sc.nextpeer;
- }
- if (sc !== null) {
- p.nextpeer = sc.insideContours;
- if (sc.insideContours !== null) {
- sc.insideContours.prevpeer = p;
- }
- sc.insideContours = p;
- }
- }
- }
- } else {
- labelData[pos] = labelindex;
- }
- } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE
- || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {
- labelindex = 0;
- if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {
- bc = imageData[pos];
- } else {
- bc = colorMap[0];
- }
- } else {
- labelindex = labelData[pos];
- bc = colorMap[labelindex];
- }
- }
- }
- sc = cc;
- while (sc !== null) {
- sc.index = depthlabel;
- sc = sc.nextpeer;
- }
- return {
- cc,
- count: connectedCount,
- };
- },
- debug: {
- drawContour(canvas, firstContour) {
- const ctx = canvas.getContext('2d');
- let pq = firstContour;
- let iq;
- let q;
- let p;
-
- ctx.strokeStyle = 'red';
- ctx.fillStyle = 'red';
- ctx.lineWidth = 1;
-
- if (pq !== null) {
- iq = pq.insideContours;
- } else {
- iq = null;
- }
-
- while (pq !== null) {
- if (iq !== null) {
- q = iq;
- iq = iq.nextpeer;
- } else {
- q = pq;
- pq = pq.nextpeer;
- if (pq !== null) {
- iq = pq.insideContours;
- } else {
- iq = null;
- }
- }
-
- switch (q.dir) {
- case Rasterizer.CONTOUR_DIR.CW_DIR:
- ctx.strokeStyle = 'red';
- break;
- case Rasterizer.CONTOUR_DIR.CCW_DIR:
- ctx.strokeStyle = 'blue';
- break;
- case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR:
- ctx.strokeStyle = 'green';
- break;
- }
-
- p = q.firstVertex;
- ctx.beginPath();
- ctx.moveTo(p.x, p.y);
- do {
- p = p.next;
- ctx.lineTo(p.x, p.y);
- } while (p !== q.firstVertex);
- ctx.stroke();
- }
- },
- },
- };
- },
-};
-
-export default Rasterizer;
diff --git a/quagga2/quagga2-1.12.1/src/locator/skeletonizer.js b/quagga2/quagga2-1.12.1/src/locator/skeletonizer.js
deleted file mode 100644
index f837a65..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/skeletonizer.js
+++ /dev/null
@@ -1,245 +0,0 @@
-/* eslint-disable no-param-reassign */
-/* eslint-disable no-bitwise */
-/* eslint-disable eqeqeq */
-/* @preserve ASM BEGIN */
-/**
- * Morphological skeletonization using iterative thinning algorithm.
- * Reduces binary images to single-pixel-wide skeletons while preserving topology.
- *
- * Memory layout in shared ArrayBuffer (4 regions of size²):
- * - Region 0: Working image (subImagePtr = 0)
- * - Region 1: Eroded result (erodedImagePtr = size²)
- * - Region 2: Temp/scratch space (tempImagePtr = 2*size²)
- * - Region 3: Final skeleton output (skelImagePtr = 3*size²)
- */
-function Skeletonizer(stdlib, foreign, buffer) {
- 'use asm';
-
- var images = new stdlib.Uint8Array(buffer);
- var size = foreign.size | 0;
- var imul = stdlib.Math.imul;
-
- /**
- * Morphological erosion with 5-pixel cross structuring element.
- * A pixel survives only if all 5 pixels in the cross pattern are set:
- * top-left, top-right, center, bottom-left, bottom-right.
- */
- function erode(inImagePtr, outImagePtr) {
- inImagePtr = inImagePtr | 0;
- outImagePtr = outImagePtr | 0;
-
- var v = 0;
- var u = 0;
- var sum = 0;
- var yStart1 = 0;
- var yStart2 = 0;
- var xStart1 = 0;
- var xStart2 = 0;
- var offset = 0;
-
- for (v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {
- offset = (offset + size) | 0;
- for (u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {
- yStart1 = (offset - size) | 0;
- yStart2 = (offset + size) | 0;
- xStart1 = (u - 1) | 0;
- xStart2 = (u + 1) | 0;
- sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)
- + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)
- + (images[(inImagePtr + offset + u) | 0] | 0)
- + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)
- + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;
- // Pixel survives erosion only if all 5 cross neighbors are set
- if ((sum | 0) == (5 | 0)) {
- images[(outImagePtr + offset + u) | 0] = 1;
- } else {
- images[(outImagePtr + offset + u) | 0] = 0;
- }
- }
- }
- }
-
- // Pixel-wise subtraction: out = a - b (captures the "peeled" layer)
- function subtract(aImagePtr, bImagePtr, outImagePtr) {
- aImagePtr = aImagePtr | 0;
- bImagePtr = bImagePtr | 0;
- outImagePtr = outImagePtr | 0;
-
- var length = 0;
-
- length = imul(size, size) | 0;
-
- while ((length | 0) > 0) {
- length = (length - 1) | 0;
- images[(outImagePtr + length) | 0] = ((images[(aImagePtr + length) | 0] | 0) - (images[(bImagePtr + length) | 0] | 0)) | 0;
- }
- }
-
- // Pixel-wise OR: out = a | b (accumulates skeleton layers)
- function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {
- aImagePtr = aImagePtr | 0;
- bImagePtr = bImagePtr | 0;
- outImagePtr = outImagePtr | 0;
-
- var length = 0;
-
- length = imul(size, size) | 0;
-
- while ((length | 0) > 0) {
- length = (length - 1) | 0;
- images[(outImagePtr + length) | 0] = ((images[(aImagePtr + length) | 0] | 0) | (images[(bImagePtr + length) | 0] | 0)) | 0;
- }
- }
-
- // Counts non-zero pixels to detect when erosion is complete
- function countNonZero(imagePtr) {
- imagePtr = imagePtr | 0;
-
- var sum = 0;
- var length = 0;
-
- length = imul(size, size) | 0;
-
- while ((length | 0) > 0) {
- length = (length - 1) | 0;
- sum = ((sum | 0) + (images[(imagePtr + length) | 0] | 0)) | 0;
- }
-
- return (sum | 0);
- }
-
- // Fills image region with a constant value
- function init(imagePtr, value) {
- imagePtr = imagePtr | 0;
- value = value | 0;
-
- var length = 0;
-
- length = imul(size, size) | 0;
-
- while ((length | 0) > 0) {
- length = (length - 1) | 0;
- images[(imagePtr + length) | 0] = value;
- }
- }
-
- // Morphological dilation with 5-pixel cross - pixel is set if any neighbor is set
- function dilate(inImagePtr, outImagePtr) {
- inImagePtr = inImagePtr | 0;
- outImagePtr = outImagePtr | 0;
-
- var v = 0;
- var u = 0;
- var sum = 0;
- var yStart1 = 0;
- var yStart2 = 0;
- var xStart1 = 0;
- var xStart2 = 0;
- var offset = 0;
-
- for (v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {
- offset = (offset + size) | 0;
- for (u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {
- yStart1 = (offset - size) | 0;
- yStart2 = (offset + size) | 0;
- xStart1 = (u - 1) | 0;
- xStart2 = (u + 1) | 0;
- sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)
- + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)
- + (images[(inImagePtr + offset + u) | 0] | 0)
- + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)
- + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;
- if ((sum | 0) > (0 | 0)) {
- images[(outImagePtr + offset + u) | 0] = 1;
- } else {
- images[(outImagePtr + offset + u) | 0] = 0;
- }
- }
- }
- }
-
- // Copies image data from src to dst region
- function memcpy(srcImagePtr, dstImagePtr) {
- srcImagePtr = srcImagePtr | 0;
- dstImagePtr = dstImagePtr | 0;
-
- var length = 0;
-
- length = imul(size, size) | 0;
-
- while ((length | 0) > 0) {
- length = (length - 1) | 0;
- images[(dstImagePtr + length) | 0] = (images[(srcImagePtr + length) | 0] | 0);
- }
- }
-
- /**
- * Zeros out the border pixels of the image.
- * First loop: handles top, left, and right edges simultaneously
- * Second loop: handles bottom edge
- */
- function zeroBorder(imagePtr) {
- imagePtr = imagePtr | 0;
-
- var x = 0;
- var y = 0;
-
- for (x = 0; (x | 0) < ((size - 1) | 0); x = (x + 1) | 0) {
- images[(imagePtr + x) | 0] = 0;
- images[(imagePtr + y) | 0] = 0;
- y = ((y + size) - 1) | 0;
- images[(imagePtr + y) | 0] = 0;
- y = (y + 1) | 0;
- }
- for (x = 0; (x | 0) < (size | 0); x = (x + 1) | 0) {
- images[(imagePtr + y) | 0] = 0;
- y = (y + 1) | 0;
- }
- }
-
- /**
- * Main skeletonization algorithm using iterative thinning:
- * 1. Erode the working image
- * 2. Dilate the eroded version
- * 3. Subtract dilated from original (extracts "peeled" layer)
- * 4. OR the peeled layer into skeleton accumulator
- * 5. Copy eroded image back to working image
- * 6. Repeat until working image is empty
- *
- * @returns {void} No return value - operates directly on shared buffer.
- * Input image is read from buffer offset 0 (subImagePtr).
- * Output skeleton is written to buffer offset 3*size² (skelImagePtr).
- */
- function skeletonize() {
- var subImagePtr = 0; // Region 0: Working image (input, offset = 0)
- var erodedImagePtr = 0; // Region 1: Eroded result (offset = size²)
- var tempImagePtr = 0; // Region 2: Scratch space (offset = 2*size²)
- var skelImagePtr = 0; // Region 3: Final skeleton (output, offset = 3*size²)
- var sum = 0;
- var done = 0;
-
- // Calculate byte offsets for each region in the shared buffer
- erodedImagePtr = imul(size, size) | 0; // Region 1: size² bytes in
- tempImagePtr = (erodedImagePtr + erodedImagePtr) | 0; // Region 2: 2*size² bytes in
- skelImagePtr = (tempImagePtr + erodedImagePtr) | 0; // Region 3: 3*size² bytes in
-
- // Initialize skeleton accumulator to zero
- init(skelImagePtr, 0);
- zeroBorder(subImagePtr);
-
- do {
- erode(subImagePtr, erodedImagePtr);
- dilate(erodedImagePtr, tempImagePtr);
- subtract(subImagePtr, tempImagePtr, tempImagePtr);
- bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);
- memcpy(erodedImagePtr, subImagePtr);
- sum = countNonZero(subImagePtr) | 0;
- done = ((sum | 0) == 0 | 0);
- } while (!done);
- }
- return { skeletonize: skeletonize };
-}
-/* @preserve ASM END */
-
-export default Skeletonizer;
-/* eslint-enable eqeqeq */
diff --git a/quagga2/quagga2-1.12.1/src/locator/test/barcode_locator.spec.ts b/quagga2/quagga2-1.12.1/src/locator/test/barcode_locator.spec.ts
deleted file mode 100644
index 73f1fba..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/test/barcode_locator.spec.ts
+++ /dev/null
@@ -1,281 +0,0 @@
-if (typeof (globalThis as any).ENV === 'undefined') {
- (globalThis as any).ENV = { production: true, development: false, node: true };
-}
-
-import BarcodeLocator from '../barcode_locator';
-import QuaggaConfig from '../../config/config';
-import merge from 'lodash/merge';
-import sinon, {SinonSpy} from 'sinon';
-import { expect } from 'chai';
-import { QuaggaJSConfigObject } from '../../../type-definitions/quagga';
-
-declare interface AreaConfig {
- area: {
- top: string,
- right: string,
- bottom: string,
- left: string,
- }
-};
-
-describe('Barcode Locator', () => {
-
- describe('checkImageConstraints', function() {
- let config: QuaggaJSConfigObject;
- let imageSize = { x: 0, y: 0 };
- let inputStream = {
- getWidth: function() {
- return imageSize.x;
- },
- getHeight: function() {
- return imageSize.y;
- },
- setWidth: function(width: number) {},
- setHeight: function(height: number) {},
- setTopRight: function() {},
- setCanvasSize: function() {},
- getConfig: function() {
- return streamConfig;
- },
- };
-
- let streamConfig: AreaConfig | {} = { };
-
- beforeEach(function() {
- imageSize = {
- x: 640, y: 480,
- };
- config = merge({}, QuaggaConfig);
- inputStream = {
- getWidth: function() {
- return imageSize.x;
- },
- getHeight: function() {
- return imageSize.y;
- },
- setWidth: function() {},
- setHeight: function() {},
- setTopRight: function() {},
- setCanvasSize: function() {},
- getConfig: function() {
- return streamConfig;
- },
- };
- sinon.stub(inputStream, 'setWidth').callsFake((width) => {
- imageSize.x = width;
- });
- sinon.stub(inputStream, 'setHeight').callsFake((height) => {
- imageSize.y = height;
- });
- sinon.stub(inputStream, 'setTopRight');
- sinon.stub(inputStream, 'setCanvasSize');
- });
-
- afterEach(function() {
- ((inputStream.setWidth) as SinonSpy).restore();
- ((inputStream.setHeight) as SinonSpy).restore();
- });
-
- it('should not adjust the image-size if not needed', function() {
- // console.warn('* image size=', JSON.stringify(imageSize));
- var expected = {x: imageSize.x, y: imageSize.y};
- // console.warn('* inputStream before=', inputStream.getWidth(), inputStream.getHeight());
- BarcodeLocator.checkImageConstraints(inputStream, config.locator);
- // console.warn('* inputStream after=', inputStream.getWidth(), inputStream.getHeight());
- expect(inputStream.getWidth()).to.be.equal(expected.x);
- expect(inputStream.getHeight()).to.be.equal(expected.y);
- });
-
- it('should adjust the image-size', function() {
- var expected = {x: imageSize.x, y: imageSize.y};
-
- config.locator!.halfSample = true;
- imageSize.y += 1;
- BarcodeLocator.checkImageConstraints(inputStream, config.locator);
- expect(inputStream.getWidth()).to.be.equal(expected.x);
- expect(inputStream.getHeight()).to.be.equal(expected.y);
- });
-
- it('should adjust the image-size', function() {
- var expected = {x: imageSize.x, y: imageSize.y};
-
- imageSize.y += 1;
- config.locator!.halfSample = false;
- BarcodeLocator.checkImageConstraints(inputStream, config.locator);
- expect(inputStream.getHeight()).to.be.equal(expected.y);
- expect(inputStream.getWidth()).to.be.equal(expected.x);
- });
-
- it('should take the defined area into account', function() {
- var expectedSize = {
- x: 420,
- y: 315,
- },
- expectedTopRight = {
- x: 115,
- y: 52,
- },
- expectedCanvasSize = {
- x: 640,
- y: 480,
- };
-
- // @ts-ignore
- streamConfig.area = {
- top: '11%',
- right: '15%',
- bottom: '20%',
- left: '18%',
- };
-
- config.locator!.halfSample = false;
- BarcodeLocator.checkImageConstraints(inputStream, config.locator);
- expect(inputStream.getHeight()).to.be.equal(expectedSize.y);
- expect(inputStream.getWidth()).to.be.equal(expectedSize.x);
- expect(((inputStream.setTopRight) as SinonSpy).getCall(0).args[0]).to.deep.equal(expectedTopRight);
- expect(((inputStream.setCanvasSize) as SinonSpy).getCall(0).args[0]).to.deep.equal(expectedCanvasSize);
- });
-
- it('should return the original size if set to full image', function() {
- var expectedSize = {
- x: 640,
- y: 480,
- },
- expectedTopRight = {
- x: 0,
- y: 0,
- },
- expectedCanvasSize = {
- x: 640,
- y: 480,
- };
-
- // @ts-ignore
- streamConfig.area = {
- top: '0%',
- right: '0%',
- bottom: '0%',
- left: '0%',
- };
-
- config.locator!.halfSample = false;
- BarcodeLocator.checkImageConstraints(inputStream, config.locator);
- expect(inputStream.getHeight()).to.be.equal(expectedSize.y);
- expect(inputStream.getWidth()).to.be.equal(expectedSize.x);
- expect(((inputStream.setTopRight) as SinonSpy).getCall(0).args[0]).to.deep.equal(expectedTopRight);
- expect(((inputStream.setCanvasSize) as SinonSpy).getCall(0).args[0]).to.deep.equal(expectedCanvasSize);
- });
-
- // Test for issue #218: calculatePatchSize now returns fallback instead of null
- // checkImageConstraints should succeed with unusual dimensions
- it('should succeed with unusual dimensions using fallback patch size', function() {
- // Use unusual dimensions that previously caused calculatePatchSize to return null
- imageSize = { x: 7, y: 11 }; // Small prime dimensions
-
- config.locator!.halfSample = false;
-
- // This should succeed now that calculatePatchSize returns a fallback
- expect(() => BarcodeLocator.checkImageConstraints(inputStream, config.locator))
- .to.not.throw();
- });
- });
-
- describe('init', function() {
- // Test for issue #95: Invalid typed array length when using resolution 1920+
- // Fixed by commit 35614bc - dynamically calculates buffer size instead of fixed 64KB
- it('should initialize without error for large image sizes (1920+)', function() {
- // Create a mock ImageWrapper that simulates a high-resolution image
- const largeImageWrapper = {
- size: { x: 1920, y: 1080 },
- data: new Uint8Array(1920 * 1080),
- };
-
- const locatorConfig = merge({}, QuaggaConfig.locator, {
- patchSize: 'large', // large patch size combined with large image triggered the issue
- halfSample: false, // no half sampling = larger buffer needed
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false,
- },
- },
- });
-
- // This should not throw an error with the fix in place
- // Before the fix, this would throw "Invalid typed array length" error
- expect(() => BarcodeLocator.init(largeImageWrapper, locatorConfig)).to.not.throw();
- });
-
- it('should initialize without error for very large image sizes (4K resolution)', function() {
- // Create a mock ImageWrapper that simulates a 4K resolution image
- const largeImageWrapper = {
- size: { x: 3840, y: 2160 },
- data: new Uint8Array(3840 * 2160),
- };
-
- const locatorConfig = merge({}, QuaggaConfig.locator, {
- patchSize: 'x-large', // x-large patch creates bigger buffers
- halfSample: false,
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false,
- },
- },
- });
-
- // This should not throw an error with the fix in place
- expect(() => BarcodeLocator.init(largeImageWrapper, locatorConfig)).to.not.throw();
- });
-
- // Test for issue #218: calculatePatchSize now returns fallback instead of null
- // init should succeed with unusual dimensions using fallback patch size
- it('should succeed with unusual dimensions using fallback patch size', function() {
- // Create an image with unusual dimensions that previously caused calculatePatchSize to return null
- // Prime numbers are difficult to find common divisors for
- const unusualImageWrapper = {
- size: { x: 7, y: 11 }, // Small prime dimensions that are hard to divide
- data: new Uint8Array(7 * 11),
- };
-
- const locatorConfig = merge({}, QuaggaConfig.locator, {
- patchSize: 'medium',
- halfSample: false,
- debug: {
- showCanvas: false,
- showPatches: false,
- showFoundPatches: false,
- showSkeleton: false,
- showLabels: false,
- showPatchLabels: false,
- showRemainingPatchLabels: false,
- boxFromPatches: {
- showTransformed: false,
- showTransformedBox: false,
- showBB: false,
- },
- },
- });
-
- // This should succeed now that calculatePatchSize returns a fallback
- expect(() => BarcodeLocator.init(unusualImageWrapper, locatorConfig))
- .to.not.throw();
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/locator/test/node/skeletonizer-asmjs.spec.ts b/quagga2/quagga2-1.12.1/src/locator/test/node/skeletonizer-asmjs.spec.ts
deleted file mode 100644
index b541cfb..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/test/node/skeletonizer-asmjs.spec.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import Skeletonizer from '../../skeletonizer';
-
-describe('Skeletonizer (Node.js-only)', () => {
- describe('asm.js Validation', () => {
- it('should not emit "Invalid asm.js" warning to stderr', (done) => {
- // Capture both stderr writes AND process warnings
- const originalWrite = process.stderr.write;
- const warnings: string[] = [];
- let stderrOutput = '';
-
- // Capture process warnings (V8 warnings go through this)
- const warningListener = (warning: Error) => {
- warnings.push(warning.message);
- };
- process.on('warning', warningListener);
-
- process.stderr.write = function(chunk: any): boolean {
- stderrOutput += chunk.toString();
- return true;
- };
-
- try {
- // Re-instantiate the module to trigger asm.js validation
- // Use 64KB (spec minimum) like production
- const testBuffer = new ArrayBuffer(64 * 1024);
- Skeletonizer(
- { Math, Uint8Array },
- { size: 8 },
- testBuffer
- );
-
- // Wait briefly for async V8 warnings to be emitted
- setTimeout(() => {
- // Combine all captured output
- const allOutput = stderrOutput + warnings.join('\n');
-
- // Check that no asm.js validation warnings appeared
- try {
- expect(allOutput).to.not.include('Invalid asm.js');
- expect(allOutput).to.not.include('asm.js type error');
- expect(allOutput).to.not.include('Linking failure in asm.js');
- expect(allOutput).to.not.include('Invalid heap size');
- done();
- } catch (e) {
- done(e);
- } finally {
- process.stderr.write = originalWrite;
- process.removeListener('warning', warningListener);
- }
- }, 50);
- } catch (e) {
- process.stderr.write = originalWrite;
- process.removeListener('warning', warningListener);
- done(e);
- }
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/locator/test/skeletonizer.spec.ts b/quagga2/quagga2-1.12.1/src/locator/test/skeletonizer.spec.ts
deleted file mode 100644
index 305f1b8..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/test/skeletonizer.spec.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-import { describe, it, beforeEach } from 'mocha';
-import { expect } from 'chai';
-import Skeletonizer from '../skeletonizer';
-
-describe('Skeletonizer', () => {
- let buffer: ArrayBuffer;
- let size: number;
- let skeletonizer: any;
- let images: Uint8Array;
-
- beforeEach(() => {
- // Standard 8x8 test image size
- // Use 64KB buffer (asm.js spec minimum) like production
- size = 8;
- buffer = new ArrayBuffer(64 * 1024);
- images = new Uint8Array(buffer);
- skeletonizer = Skeletonizer(
- { Math, Uint8Array },
- { size },
- buffer
- );
- });
-
- describe('Memory Layout', () => {
- it('should allocate buffer with correct size', () => {
- expect(buffer.byteLength).to.equal(64 * 1024);
- });
-
- it('should share buffer between multiple image regions', () => {
- // Write to first region (working image at offset 0)
- images[0] = 42;
- expect(images[0]).to.equal(42);
-
- // Verify other regions are independent
- expect(images[size * size]).to.not.equal(42);
- });
- });
-
- describe('skeletonize() basic functionality', () => {
- it('should process an empty image without errors', () => {
- // All zeros - should terminate immediately
- for (let i = 0; i < size * size; i++) {
- images[i] = 0;
- }
-
- expect(() => skeletonizer.skeletonize()).to.not.throw();
- });
-
- it('should produce skeleton in correct output region', () => {
- // Create a simple cross pattern in the working image (region 0)
- const mid = Math.floor(size / 2);
- for (let i = 0; i < size; i++) {
- images[i * size + mid] = 1; // Vertical line
- images[mid * size + i] = 1; // Horizontal line
- }
-
- skeletonizer.skeletonize();
-
- // Skeleton should be in region 3 (offset = 3 * size²)
- const skelOffset = 3 * size * size;
- let hasSkeletonPixels = false;
-
- for (let i = 0; i < size * size; i++) {
- if (images[skelOffset + i] === 1) {
- hasSkeletonPixels = true;
- break;
- }
- }
-
- expect(hasSkeletonPixels).to.be.true;
- });
-
- it('should terminate when working image becomes empty', () => {
- // Create a single pixel - should erode away quickly
- images[size * size / 2] = 1;
-
- expect(() => skeletonizer.skeletonize()).to.not.throw();
-
- // Working image should be empty after skeletonization
- let sum = 0;
- for (let i = 0; i < size * size; i++) {
- sum += images[i];
- }
- expect(sum).to.equal(0);
- });
- });
-
- describe('Edge cases', () => {
- it('should handle fully filled image', () => {
- // Fill entire working image
- for (let i = 0; i < size * size; i++) {
- images[i] = 1;
- }
-
- expect(() => skeletonizer.skeletonize()).to.not.throw();
- });
-
- it('should handle single line patterns', () => {
- // Vertical line down the middle
- const mid = Math.floor(size / 2);
- for (let i = 1; i < size - 1; i++) {
- images[i * size + mid] = 1;
- }
-
- skeletonizer.skeletonize();
-
- // Should produce a thinned skeleton
- const skelOffset = 3 * size * size;
- let skelPixelCount = 0;
- for (let i = 0; i < size * size; i++) {
- if (images[skelOffset + i] === 1) {
- skelPixelCount++;
- }
- }
-
- expect(skelPixelCount).to.be.greaterThan(0);
- expect(skelPixelCount).to.be.lessThan(size * size);
- });
-
- it('should preserve topology - no disconnections', () => {
- // Create a connected shape (L-shape)
- for (let i = 2; i < 6; i++) {
- images[i * size + 2] = 1; // Vertical part
- }
- for (let i = 2; i < 6; i++) {
- images[5 * size + i] = 1; // Horizontal part
- }
-
- skeletonizer.skeletonize();
-
- // Skeleton should maintain connectivity
- const skelOffset = 3 * size * size;
- let skelPixelCount = 0;
- for (let i = 0; i < size * size; i++) {
- if (images[skelOffset + i] === 1) {
- skelPixelCount++;
- }
- }
-
- // Should have skeleton pixels (connected structure preserved)
- expect(skelPixelCount).to.be.greaterThan(0);
- });
- });
-
- describe('Border behavior', () => {
- it('should not process border pixels', () => {
- // Fill entire image including borders
- for (let i = 0; i < size * size; i++) {
- images[i] = 1;
- }
-
- skeletonizer.skeletonize();
-
- // Check that borders in working image were zeroed
- // Top row
- for (let x = 0; x < size; x++) {
- expect(images[x]).to.equal(0);
- }
- // Bottom row
- for (let x = 0; x < size; x++) {
- expect(images[(size - 1) * size + x]).to.equal(0);
- }
- // Left column
- for (let y = 0; y < size; y++) {
- expect(images[y * size]).to.equal(0);
- }
- // Right column
- for (let y = 0; y < size; y++) {
- expect(images[y * size + (size - 1)]).to.equal(0);
- }
- });
- });
-
- describe('Performance characteristics', () => {
- it('should complete within reasonable time for small images', () => {
- // Create a moderate complexity pattern
- for (let i = 2; i < 6; i++) {
- for (let j = 2; j < 6; j++) {
- images[i * size + j] = 1;
- }
- }
-
- const start = Date.now();
- skeletonizer.skeletonize();
- const elapsed = Date.now() - start;
-
- // Should complete in under 100ms for 8x8 image
- expect(elapsed).to.be.lessThan(100);
- });
- });
-
- describe('Different image sizes', () => {
- [4, 8, 16, 32].forEach((testSize) => {
- it(`should work with ${testSize}x${testSize} images`, () => {
- // Use 64KB buffer (asm.js spec minimum) like production
- const testBuffer = new ArrayBuffer(64 * 1024);
- const testImages = new Uint8Array(testBuffer);
- const testSkel = Skeletonizer(
- { Math, Uint8Array },
- { size: testSize },
- testBuffer
- );
-
- // Create a cross pattern
- const mid = Math.floor(testSize / 2);
- for (let i = 1; i < testSize - 1; i++) {
- testImages[i * testSize + mid] = 1;
- testImages[mid * testSize + i] = 1;
- }
-
- expect(() => testSkel.skeletonize()).to.not.throw();
- });
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/locator/tracer.js b/quagga2/quagga2-1.12.1/src/locator/tracer.js
deleted file mode 100644
index 948590e..0000000
--- a/quagga2/quagga2-1.12.1/src/locator/tracer.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization
- */
-const Tracer = {
- searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]],
- create(imageWrapper, labelWrapper) {
- const imageData = imageWrapper.data;
- const labelData = labelWrapper.data;
- const { searchDirections } = this;
- const width = imageWrapper.size.x;
- let pos;
-
- function trace(current, color, label, edgelabel) {
- let i;
- let y;
- let x;
-
- for (i = 0; i < searchDirections.length; i++) {
- y = current.cy + searchDirections[current.dir][0];
- x = current.cx + searchDirections[current.dir][1];
- pos = y * width + x;
- if ((imageData[pos] === color) && ((labelData[pos] === 0) || (labelData[pos] === label))) {
- labelData[pos] = label;
- current.cy = y;
- current.cx = x;
- return true;
- }
- if (labelData[pos] === 0) {
- labelData[pos] = edgelabel;
- }
- current.dir = (current.dir + 1) % 8;
- }
- return false;
- }
-
- function vertex2D(x, y, dir) {
- return {
- dir,
- x,
- y,
- next: null,
- prev: null,
- };
- }
-
- function contourTracing(sy, sx, label, color, edgelabel) {
- let Fv = null;
- let Cv;
- let P;
- let ldir;
- const current = {
- cx: sx,
- cy: sy,
- dir: 0,
- };
-
- if (trace(current, color, label, edgelabel)) {
- Fv = vertex2D(sx, sy, current.dir);
- Cv = Fv;
- ldir = current.dir;
- P = vertex2D(current.cx, current.cy, 0);
- P.prev = Cv;
- Cv.next = P;
- P.next = null;
- Cv = P;
-
- let totalPixelCount = imageWrapper.size.x * imageWrapper.size.y;
- let pixelCounter = 0;
- do {
- current.dir = (current.dir + 6) % 8;
- trace(current, color, label, edgelabel);
- if (ldir !== current.dir) {
- Cv.dir = current.dir;
- P = vertex2D(current.cx, current.cy, 0);
- P.prev = Cv;
- Cv.next = P;
- P.next = null;
- Cv = P;
- } else {
- Cv.dir = ldir;
- Cv.x = current.cx;
- Cv.y = current.cy;
- }
- ldir = current.dir;
- } while ((current.cx !== sx || current.cy !== sy) && ++pixelCounter < totalPixelCount);
- Fv.prev = Cv.prev;
- Cv.prev.next = Fv;
- }
- return Fv;
- }
-
- return {
- trace(current, color, label, edgelabel) {
- return trace(current, color, label, edgelabel);
- },
- contourTracing(sy, sx, label, color, edgelabel) {
- return contourTracing(sy, sx, label, color, edgelabel);
- },
- };
- },
-};
-
-export default (Tracer);
diff --git a/quagga2/quagga2-1.12.1/src/quagga.js b/quagga2/quagga2-1.12.1/src/quagga.js
deleted file mode 100644
index c46adcb..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga.js
+++ /dev/null
@@ -1,194 +0,0 @@
-import merge from 'lodash/merge';
-import TypeDefs from './common/typedefs'; // eslint-disable-line no-unused-vars
-import ImageWrapper from './common/image_wrapper';
-import BarcodeDecoder from './decoder/barcode_decoder';
-import * as Readers from './reader/index';
-import Events from './common/events';
-import CameraAccess from './input/camera_access';
-import ImageDebug from './common/image_debug';
-import ResultCollector from './analytics/result_collector';
-import Config from './config/config';
-
-import Quagga from './quagga/quagga';
-
-const instance = new Quagga();
-const _context = instance.context;
-
-const QuaggaJSStaticInterface = {
- init: function (config, cb, imageWrapper, quaggaInstance = instance) {
- let promise;
- if (!cb) {
- promise = new Promise((resolve, reject) => {
- cb = (err) => { err ? reject(err) : resolve(); };
- });
- }
- // Reset the initAborted flag when starting a new init
- quaggaInstance.context.initAborted = false;
- quaggaInstance.context.config = merge({}, Config, config);
- // TODO #179: pending restructure in Issue #179, we are temp disabling workers
- if (quaggaInstance.context.config.numOfWorkers > 0) {
- quaggaInstance.context.config.numOfWorkers = 0;
- }
- if (imageWrapper) {
- quaggaInstance.context.onUIThread = false;
- quaggaInstance.initializeData(imageWrapper);
- if (cb) {
- cb();
- }
- } else {
- quaggaInstance.initInputStream(cb);
- }
- return promise;
- },
- start: function (config, cb) {
- // If config is provided, call init() then start()
- if (config) {
- let promise;
- if (!cb) {
- promise = new Promise((resolve, reject) => {
- cb = (err) => { err ? reject(err) : resolve(); };
- });
- }
- this.init(config, (err) => {
- if (err) {
- cb(err);
- return;
- }
- try {
- instance.start();
- cb();
- } catch (startErr) {
- cb(startErr);
- }
- });
- return promise;
- }
- // If init() hasn't been completed, throw an error
- if (!_context.framegrabber) {
- throw new Error('start() was called before init() completed. '
- + 'Call init() first, or call start(config) to combine init and start.');
- }
- return instance.start();
- },
- stop: function () {
- return instance.stop();
- },
- pause: function () {
- _context.stopped = true;
- },
- onDetected: function (callback) {
- if (!callback || (typeof callback !== 'function' && (typeof callback !== 'object' || !callback.callback))) {
- console.trace('* warning: Quagga.onDetected called with invalid callback, ignoring');
- return;
- }
- Events.subscribe('detected', callback);
- },
- offDetected: function (callback) {
- Events.unsubscribe('detected', callback);
- },
- onProcessed: function (callback) {
- if (!callback || (typeof callback !== 'function' && (typeof callback !== 'object' || !callback.callback))) {
- console.trace('* warning: Quagga.onProcessed called with invalid callback, ignoring');
- return;
- }
- Events.subscribe('processed', callback);
- },
- offProcessed: function (callback) {
- Events.unsubscribe('processed', callback);
- },
- setReaders: function (readers) {
- if (!readers) {
- console.trace('* warning: Quagga.setReaders called with no readers, ignoring');
- return;
- }
- instance.setReaders(readers);
- },
- registerReader: function (name, reader) {
- if (!name) {
- console.trace('* warning: Quagga.registerReader called with no name, ignoring');
- return;
- }
- if (!reader) {
- console.trace('* warning: Quagga.registerReader called with no reader, ignoring');
- return;
- }
- instance.registerReader(name, reader);
- },
- registerResultCollector: function (resultCollector) {
- if (resultCollector && typeof resultCollector.addResult === 'function') {
- _context.resultCollector = resultCollector;
- }
- },
- get canvas() {
- return _context.canvasContainer;
- },
- drawScannerArea: function () {
- return instance.drawScannerArea();
- },
- decodeSingle: function (config, resultCallback) {
- const quaggaInstance = new Quagga();
- config = merge({
- inputStream: {
- type: 'ImageStream',
- sequence: false,
- size: 800,
- src: config.src,
- },
- numOfWorkers: (typeof ENV !== 'undefined' && ENV.development && config.debug) ? 0 : 1,
- locator: {
- halfSample: false,
- },
- }, config);
- // TODO #175: restructure worker support so that it will work with typescript using worker-loader
- // https://webpack.js.org/loaders/worker-loader/
- if (config.numOfWorkers > 0) {
- config.numOfWorkers = 0;
- }
- // workers require Worker and Blob support presently, so if no Blob or Worker then set
- // workers to 0.
- if (config.numOfWorkers > 0 && (typeof Blob === 'undefined' || typeof Worker === 'undefined')) {
- console.warn('* no Worker and/or Blob support - forcing numOfWorkers to 0');
- config.numOfWorkers = 0;
- }
- return new Promise((resolve, reject) => {
- try {
- this.init(config, () => {
- // Sync the decodeSingle instance's canvas to the global _context so Quagga.canvas works
- _context.canvasContainer = quaggaInstance.context.canvasContainer;
-
- Events.once('processed', (result) => {
- quaggaInstance.stop();
- if (resultCallback) {
- resultCallback.call(null, result);
- }
- resolve(result);
- }, true);
- quaggaInstance.start();
- }, null, quaggaInstance);
- } catch (err) {
- reject(err);
- }
- });
- },
- // add the usually expected "default" for use with require, build step won't allow us to
- // write to module.exports so do it here.
- get default() {
- return QuaggaJSStaticInterface;
- },
- Readers,
- CameraAccess,
- ImageDebug,
- ImageWrapper,
- ResultCollector,
-};
-
-export default QuaggaJSStaticInterface;
-// export BarcodeReader and other utilities for external plugins
-export {
- BarcodeDecoder,
- Readers,
- CameraAccess,
- ImageDebug,
- ImageWrapper,
- ResultCollector,
-};
diff --git a/quagga2/quagga2-1.12.1/src/quagga/Exception.ts b/quagga2/quagga2-1.12.1/src/quagga/Exception.ts
deleted file mode 100644
index 64beb9c..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/Exception.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-export default class Exception extends Error {
- code?: number;
-
- constructor(m: string, code?: number) {
- super(m);
- this.code = code;
- Object.setPrototypeOf(this, Exception.prototype);
- }
-
- /**
- * Custom JSON serialization to ensure error message is included.
- * The Error class's message property is non-enumerable by default,
- * so JSON.stringify would only include {code: -1} without this method.
- * This ensures consumers receive meaningful error information.
- */
- toJSON(): { message: string; code?: number; name: string } {
- return {
- name: this.name,
- message: this.message,
- code: this.code,
- };
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/getViewPort.ts b/quagga2/quagga2-1.12.1/src/quagga/getViewPort.ts
deleted file mode 100644
index 81f2053..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/getViewPort.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-export default function getViewPort(target?: Element | string): Element | null {
- if (typeof document === 'undefined') {
- return null;
- }
-
- // Check if target is already a DOM element
- if (target instanceof HTMLElement && target.nodeName && target.nodeType === 1) {
- return target;
- }
- // Use '#interactive.viewport' as a fallback selector (backwards compatibility)
- const selector = typeof target === 'string' ? target : '#interactive.viewport';
- return document.querySelector(selector);
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/initBuffers.ts b/quagga2/quagga2-1.12.1/src/quagga/initBuffers.ts
deleted file mode 100644
index 2b703f4..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/initBuffers.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { vec2 } from 'gl-matrix';
-import ImageWrapper from '../common/image_wrapper';
-import type { InputStream } from '../input/input_stream/input_stream.d';
-import BarcodeLocator from '../locator/barcode_locator';
-
-// TODO: need typescript def for BarcodeLocator
-export default function initBuffers(
- inputStream: InputStream,
- imageWrapper: ImageWrapper | undefined,
- locator: any,
-) {
- const inputImageWrapper = imageWrapper || new ImageWrapper({
- x: inputStream.getWidth(),
- y: inputStream.getHeight(),
- type: 'XYSize',
- });
-
- if (typeof ENV !== 'undefined' && ENV.development && (locator as any).config?.debug?.showImageDetails) {
- console.log(`image wrapper size ${inputImageWrapper.size}`);
- }
- const boxSize = [
- vec2.clone([0, 0]),
- vec2.clone([0, inputImageWrapper.size.y]),
- vec2.clone([inputImageWrapper.size.x, inputImageWrapper.size.y]),
- vec2.clone([inputImageWrapper.size.x, 0]),
- ];
- BarcodeLocator.init(inputImageWrapper, locator);
- return { inputImageWrapper, boxSize };
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/initCanvas.ts b/quagga2/quagga2-1.12.1/src/quagga/initCanvas.ts
deleted file mode 100644
index 906980a..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/initCanvas.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { QuaggaContext, CanvasContainer } from 'QuaggaContext';
-import getViewPort from './getViewPort';
-import type { XYSize } from '../../type-definitions/quagga.d';
-
-function findOrCreateCanvas(selector: string, className: string) {
- let canvas: HTMLCanvasElement | null = document.querySelector(selector);
- if (!canvas) {
- canvas = document.createElement('canvas');
- canvas.className = className;
- }
- return canvas;
-}
-
-function getCanvasAndContext(selector: string, className: string, options: { willReadFrequently: boolean; debug?: any }) {
- const canvas = findOrCreateCanvas(selector, className);
- if (typeof ENV !== 'undefined' && ENV.development && options.debug?.showImageDetails) {
- console.warn('* initCanvas getCanvasAndContext');
- }
- const context = canvas.getContext('2d', { willReadFrequently: options.willReadFrequently });
- return { canvas, context };
-}
-
-interface InitCanvasesOptions {
- willReadFrequently: boolean;
- createOverlay: boolean;
- debug?: any;
-}
-
-function initCanvases(canvasSize: XYSize, { willReadFrequently, createOverlay, debug }: InitCanvasesOptions): CanvasContainer | null {
- if (typeof document !== 'undefined') {
- const image = getCanvasAndContext('canvas.imgBuffer', 'imgBuffer', { willReadFrequently, debug });
- image.canvas.width = canvasSize.x;
- image.canvas.height = canvasSize.y;
-
- // Only create overlay canvas if createOverlay is true (default behavior)
- let overlay: { canvas: HTMLCanvasElement | null; context: CanvasRenderingContext2D | null } = {
- canvas: null,
- context: null,
- };
- if (createOverlay) {
- const overlayResult = getCanvasAndContext('canvas.drawingBuffer', 'drawingBuffer', { willReadFrequently, debug });
- overlayResult.canvas.width = canvasSize.x;
- overlayResult.canvas.height = canvasSize.y;
- overlay = overlayResult;
- }
-
- return {
- dom: {
- image: image.canvas,
- overlay: overlay.canvas,
- },
- ctx: {
- image: image.context,
- overlay: overlay.context,
- },
- };
- }
- return null;
-}
-
-export default function initCanvas(context: QuaggaContext): CanvasContainer | null {
- const viewport = getViewPort(context?.config?.inputStream?.target);
- const type = context?.config?.inputStream?.type;
- if (!type) return null;
-
- // Default to true for backwards compatibility
- const createOverlay = context?.config?.canvas?.createOverlay !== false;
-
- const container = initCanvases(
- context.inputStream.getCanvasSize(),
- {
- willReadFrequently: !!context?.config?.inputStream?.willReadFrequently,
- createOverlay,
- debug: context?.config?.locator?.debug
- }
- );
- if (!container) return { dom: { image: null, overlay: null }, ctx: { image: null, overlay: null } };
-
- const { dom } = container;
- if (typeof document !== 'undefined') {
- if (viewport) {
- if (type === 'ImageStream' && !viewport.contains(dom.image)) {
- viewport.appendChild(dom.image);
- }
- if (dom.overlay && !viewport.contains(dom.overlay)) {
- viewport.appendChild(dom.overlay);
- }
- }
- }
- return container;
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/quagga.ts b/quagga2/quagga2-1.12.1/src/quagga/quagga.ts
deleted file mode 100644
index f20f9fb..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/quagga.ts
+++ /dev/null
@@ -1,388 +0,0 @@
-import { vec2 } from 'gl-matrix';
-import { QuaggaJSResultObject, QuaggaJSReaderConfig, BarcodeReaderConstructor } from '../../type-definitions/quagga.d';
-import Events from '../common/events';
-import ImageWrapper from '../common/image_wrapper';
-import BarcodeDecoder from '../decoder/barcode_decoder';
-import CameraAccess from '../input/camera_access';
-import FrameGrabber from '../input/frame_grabber.js';
-import InputStream from '../input/input_stream/input_stream';
-import BarcodeLocator from '../locator/barcode_locator';
-import { QuaggaContext } from '../QuaggaContext';
-import { BarcodeInfo } from '../reader/barcode_reader';
-import _getViewPort from './getViewPort';
-import _initBuffers from './initBuffers';
-import _initCanvas from './initCanvas';
-import * as QWorkers from './qworker';
-import setupInputStream from './setupInputStream';
-import { moveLine, moveBox } from './transform';
-
-export default class Quagga {
- context: QuaggaContext = new QuaggaContext();
-
- initBuffers(imageWrapper?: ImageWrapper): void {
- if (!this.context.config) {
- return;
- }
- const { inputImageWrapper, boxSize } = _initBuffers(
- this.context.inputStream,
- imageWrapper,
- this.context.config.locator,
- );
- this.context.inputImageWrapper = inputImageWrapper;
- this.context.boxSize = boxSize;
- }
-
- initializeData(imageWrapper?: ImageWrapper): void {
- if (!this.context.config) {
- return;
- }
- this.initBuffers(imageWrapper);
- this.context.decoder = BarcodeDecoder.create(this.context.config.decoder, this.context.inputImageWrapper);
- }
-
- getViewPort(): Element | null {
- if (!this.context.config || !this.context.config.inputStream) {
- return null;
- }
- const { target } = this.context.config.inputStream;
- return _getViewPort(target);
- }
-
- ready(callback: () => void): void {
- this.context.inputStream.play();
- callback();
- }
-
- initCanvas(): void {
- const container = _initCanvas(this.context);
- if (!container) {
- return;
- }
- const { ctx, dom } = container;
- this.context.canvasContainer.dom.image = dom.image;
- this.context.canvasContainer.dom.overlay = dom.overlay;
- this.context.canvasContainer.ctx.image = ctx.image;
- this.context.canvasContainer.ctx.overlay = ctx.overlay;
- }
-
- canRecord = (callback: (err?: Error) => void): void => {
- // Check if init was aborted (e.g., by calling stop() during initialization)
- // This can happen in React StrictMode where components are mounted/unmounted rapidly
- if (this.context.initAborted) {
- callback(new Error('Initialization was aborted'));
- return;
- }
- if (!this.context.config) {
- callback(new Error('Configuration not initialized'));
- return;
- }
- // Check if inputStream is properly initialized before proceeding
- if (!this.context.inputStream) {
- callback(new Error('Input stream not initialized'));
- return;
- }
- BarcodeLocator.checkImageConstraints(this.context.inputStream, this.context.config?.locator);
- this.initCanvas();
- this.context.framegrabber = FrameGrabber.create(
- this.context.inputStream,
- this.context.canvasContainer.dom.image,
- );
-
- if (this.context.config.numOfWorkers === undefined) {
- this.context.config.numOfWorkers = 0;
- }
-
- QWorkers.adjustWorkerPool(
- this.context.config.numOfWorkers,
- this.context.config,
- this.context.inputStream,
- () => {
- if (this.context.config?.numOfWorkers === 0) {
- this.initializeData();
- }
- this.ready(callback);
- },
- );
- };
-
- initInputStream(callback: (err?: Error) => void): void {
- if (!this.context.config || !this.context.config.inputStream) {
- return;
- }
- const { type: inputType, constraints } = this.context.config.inputStream;
- const { video, inputStream } = setupInputStream(inputType, this.getViewPort(), InputStream);
-
- if (inputType === 'LiveStream' && video) {
- CameraAccess.request(video, constraints)
- .then(() => inputStream.trigger('canrecord'))
- .catch((err) => callback(err));
- }
-
- if (inputStream) {
- inputStream.setAttribute('preload', 'auto');
- inputStream.setInputStream(this.context.config.inputStream);
- inputStream.addEventListener('canrecord', this.canRecord.bind(undefined, callback));
- }
-
- this.context.inputStream = inputStream;
- }
-
- getBoundingBoxes(): Array>> | null {
- return this.context.config?.locate ? BarcodeLocator.locate()
- : [[
- vec2.clone(this.context.boxSize[0]),
- vec2.clone(this.context.boxSize[1]),
- vec2.clone(this.context.boxSize[2]),
- vec2.clone(this.context.boxSize[3]),
- ]] as unknown as Array>>;
- }
-
- // TODO: need a typescript type for result here.
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
- transformResult(result: any, transformedBoxes: Set = new Set()): void {
- const topRight = this.context.inputStream.getTopRight();
- const xOffset = topRight.x;
- const yOffset = topRight.y;
-
- if (xOffset === 0 && yOffset === 0) {
- return;
- }
-
- if (result.barcodes) {
- // TODO: BarcodeInfo may not be the right type here.
- result.barcodes.forEach((barcode: BarcodeInfo) => this.transformResult(barcode, transformedBoxes));
- }
-
- if (result.line && result.line.length === 2) {
- moveLine(result.line, xOffset, yOffset);
- }
-
- if (result.box && !transformedBoxes.has(result.box)) {
- moveBox(result.box, xOffset, yOffset);
- transformedBoxes.add(result.box);
- }
-
- if (result.boxes && result.boxes.length > 0) {
- for (let i = 0; i < result.boxes.length; i++) {
- // Skip if this box has already been transformed (either as result.box or through barcodes)
- if (!transformedBoxes.has(result.boxes[i])) {
- moveBox(result.boxes[i], xOffset, yOffset);
- transformedBoxes.add(result.boxes[i]);
- }
- }
- }
- }
-
- addResult(result: QuaggaJSResultObject, imageData: Array): void {
- if (!imageData || !this.context.resultCollector) {
- return;
- }
-
- // TODO: Figure out what data structure holds a "barcodes" result, if any...
- if (result.barcodes) {
- result.barcodes.filter((barcode: QuaggaJSResultObject) => barcode.codeResult)
- .forEach((barcode: QuaggaJSResultObject) => this.addResult(barcode, imageData));
- } else if (result.codeResult) {
- this.context.resultCollector.addResult(
- imageData,
- this.context.inputStream.getCanvasSize(),
- result.codeResult,
- );
- }
- }
-
- // eslint-disable-next-line class-methods-use-this
- hasCodeResult(result: QuaggaJSResultObject): boolean {
- return !!(result && (result.barcodes
- ? result.barcodes.some((barcode) => barcode.codeResult)
- : result.codeResult));
- }
-
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
- publishResult(result: QuaggaJSResultObject | null = null, imageData?: any): void {
- let resultToPublish: Array | QuaggaJSResultObject | null = result;
-
- if (result && this.context.onUIThread) {
- this.transformResult(result);
- this.addResult(result, imageData);
- // @ts-ignore
- resultToPublish = result?.barcodes?.length > 0 ? result.barcodes : result;
- }
-
- Events.publish('processed', resultToPublish as never);
- if (this.hasCodeResult(result as QuaggaJSResultObject)) {
- Events.publish('detected', resultToPublish as never);
- }
-
- // Redraw scanner area each frame when locate is false via public API.
- const cfg = this.context.config;
- if (cfg && cfg.locate === false && cfg.inputStream?.area) {
- this.drawScannerArea();
- }
- }
-
- async locateAndDecode(): Promise {
- const boxes = this.getBoundingBoxes();
- if (boxes) {
- const decodeResult = (await this.context.decoder.decodeFromBoundingBoxes(boxes)) || {};
- decodeResult.boxes = boxes;
- this.publishResult(decodeResult, this.context.inputImageWrapper?.data);
- } else {
- const imageResult = await this.context.decoder.decodeFromImage(this.context.inputImageWrapper);
- if (imageResult) {
- this.publishResult(imageResult, this.context.inputImageWrapper?.data);
- } else {
- this.publishResult();
- }
- }
- }
-
- update = (): void => {
- if (this.context.onUIThread) {
- const workersUpdated = QWorkers.updateWorkers(this.context.framegrabber);
- if (!workersUpdated) {
- this.context.framegrabber.attachData(this.context.inputImageWrapper?.data);
- if (this.context.framegrabber.grab()) {
- if (!workersUpdated) {
- this.locateAndDecode();
- }
- }
- }
- } else {
- this.context.framegrabber.attachData(this.context.inputImageWrapper?.data);
- this.context.framegrabber.grab();
- this.locateAndDecode();
- }
- };
-
- startContinuousUpdate(): void {
- let next: number | null = null;
- // frequency specifies a maximum rate, not an absolute. If the system cannot
- // achieve the requested frequency, scans will occur as fast as possible.
- const delay = 1000 / (this.context.config?.frequency || 60);
-
- this.context.stopped = false;
- const { context } = this;
-
- const newFrame = (timestamp: number) => {
- next = next || timestamp;
- if (!context.stopped) {
- if (timestamp >= next) {
- next += delay;
- this.update();
- }
- window.requestAnimationFrame(newFrame);
- }
- };
-
- newFrame(performance.now());
- }
-
- start(): void {
- if (this.context.onUIThread && this.context.config?.inputStream?.type === 'LiveStream') {
- this.startContinuousUpdate();
- } else {
- this.update();
- }
- }
-
- async stop(): Promise {
- this.context.stopped = true;
- // Set initAborted flag if stop() is called while init() is still in progress
- // (i.e., before framegrabber is initialized). This prevents the canRecord
- // callback from continuing after stop() was called.
- if (!this.context.framegrabber) {
- this.context.initAborted = true;
- }
- QWorkers.adjustWorkerPool(0);
- if (this.context.config?.inputStream && this.context.config.inputStream.type === 'LiveStream') {
- await CameraAccess.release();
- this.context.inputStream?.clearEventHandlers();
- }
- }
-
- setReaders(readers: Array): void {
- if (this.context.decoder) {
- this.context.decoder.setReaders(readers);
- }
- QWorkers.setReaders(readers);
- }
-
- registerReader(name: string, reader: BarcodeReaderConstructor): void {
- BarcodeDecoder.registerReader(name, reader);
- if (this.context.decoder) {
- this.context.decoder.registerReader(name, reader);
- }
- QWorkers.registerReader(name, reader);
- }
-
- /**
- * Public method to draw a scanner area overlay using the current Quagga instance's overlay canvas.
- * Draws based on the instance's configured inputStream.area, using the actual adjusted boxSize
- * to match the real scanning area after patch alignment.
- * Only draws when locate is false and an area is configured with styling.
- */
- private _cachedStyleValues?: { borderColor?: string; borderWidth?: number; backgroundColor?: string };
- private _resolvedStyle?: { color: string; width: number; bg?: string };
- drawScannerArea(): void {
- const area = this.context.config?.inputStream?.area;
- if (!area) return;
- const overlayCtx = this.context.canvasContainer.ctx.overlay;
- if (!overlayCtx) return;
-
- // Only draw when locate is false
- if (this.context.config?.locate !== false) return;
-
- // Quick checks for visualization presence
- const hasAnyStyle = (area.borderColor !== undefined && area.borderColor !== '')
- || (area.borderWidth !== undefined && area.borderWidth > 0)
- || (area.backgroundColor !== undefined && area.backgroundColor !== '');
- if (!hasAnyStyle) return;
-
- // When locate is false, use the actual adjusted boxSize that matches the scanning area
- if (!this.context.boxSize) return;
-
- // Get the offset for the constrained area
- const topRightOffset = this.context.inputStream.getTopRight();
- const offsetX = topRightOffset.x;
- const offsetY = topRightOffset.y;
-
- const box = this.context.boxSize;
- const topLeft = box[0];
- const bottomLeft = box[1];
- const topRight = box[3];
-
- // Add the offset to position correctly on canvas
- const x = topLeft[0] + offsetX;
- const y = topLeft[1] + offsetY;
- const width = topRight[0] - topLeft[0];
- const height = bottomLeft[1] - topLeft[1];
- const styleChanged = !this._cachedStyleValues
- || this._cachedStyleValues.borderColor !== area.borderColor
- || this._cachedStyleValues.borderWidth !== area.borderWidth
- || this._cachedStyleValues.backgroundColor !== area.backgroundColor;
- if (styleChanged) {
- this._cachedStyleValues = {
- borderColor: area.borderColor,
- borderWidth: area.borderWidth,
- backgroundColor: area.backgroundColor,
- };
- const shouldDrawBorder = area.borderColor !== undefined || area.borderWidth !== undefined;
- const color = area.borderColor ?? 'rgba(0, 255, 0, 0.5)';
- const borderWidth = shouldDrawBorder ? (area.borderWidth ?? 2) : 0;
- const bg = area.backgroundColor;
- this._resolvedStyle = { color, width: borderWidth, bg };
- }
-
- const style = this._resolvedStyle!;
- if (style.bg) {
- overlayCtx.fillStyle = style.bg;
- overlayCtx.fillRect(x, y, width, height);
- }
- if (style.width > 0) {
- overlayCtx.strokeStyle = style.color;
- overlayCtx.lineWidth = style.width;
- overlayCtx.strokeRect(x, y, width, height);
- }
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/qworker.ts b/quagga2/quagga2-1.12.1/src/quagga/qworker.ts
deleted file mode 100644
index e97dc81..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/qworker.ts
+++ /dev/null
@@ -1,204 +0,0 @@
-/* Worker functions. These are straight from the original quagga.js file.
- * Not presently used, as worker support is non-functional. Keeping them around temporarily
- * to refer to until it is re-implemented. We may be able to fix/use some of this.
- */
-
-import { QuaggaJSConfigObject, QuaggaJSReaderConfig, BarcodeReaderConstructor } from "../../type-definitions/quagga";
-
-// TODO: need a typescript interface for FrameGrabber
-
-interface QWorkerThread {
- imageData: Uint8Array;
- busy: boolean;
- worker: Worker;
-}
-
-let workerPool: Array = [];
-
-export function updateWorkers(frameGrabber: any) {
- let availableWorker: QWorkerThread;
- if (workerPool.length) {
- availableWorker = workerPool.filter((workerThread) => !workerThread.busy)[0];
- if (availableWorker) {
- frameGrabber.attachData(availableWorker.imageData);
- if (frameGrabber.grab()) {
- availableWorker.busy = true;
- availableWorker.worker.postMessage({
- cmd: 'process',
- imageData: availableWorker.imageData,
- }, [availableWorker.imageData.buffer]);
- }
- return true;
- } else {
- return false;
- }
- }
- return null;
-}
-
-function configForWorker(config: QuaggaJSConfigObject) {
- return {
- ...config,
- inputStream: {
- ...config.inputStream,
- target: null,
- },
- };
-}
-
-// @ts-ignore
-function workerInterface(factory) {
- if (factory) {
- var Quagga = factory().default;
- if (!Quagga) {
-// @ts-ignore
- self.postMessage({ 'event': 'error', message: 'Quagga could not be created' });
- return;
- }
- }
-// @ts-ignore
- var imageWrapper;
-
-// @ts-ignore
- function onProcessed(result) {
- self.postMessage({
- 'event': 'processed',
-// @ts-ignore
- imageData: imageWrapper.data,
- result: result,
-// @ts-ignore
- }, [imageWrapper.data.buffer]);
- }
-
- function workerInterfaceReady() {
- self.postMessage({
- 'event': 'initialized',
-// @ts-ignore
- imageData: imageWrapper.data,
-// @ts-ignore
- }, [imageWrapper.data.buffer]);
- }
-
-// @ts-ignore
- self.onmessage = function (e) {
- if (e.data.cmd === 'init') {
- var config = e.data.config;
- config.numOfWorkers = 0;
- imageWrapper = new Quagga.ImageWrapper({
- x: e.data.size.x,
- y: e.data.size.y,
- }, new Uint8Array(e.data.imageData));
- Quagga.init(config, workerInterfaceReady, imageWrapper);
- Quagga.onProcessed(onProcessed);
- } else if (e.data.cmd === 'process') {
-// @ts-ignore
- imageWrapper.data = new Uint8Array(e.data.imageData);
- Quagga.start();
- } else if (e.data.cmd === 'setReaders') {
- Quagga.setReaders(e.data.readers);
- } else if (e.data.cmd === 'registerReader') {
- Quagga.registerReader(e.data.name, e.data.reader);
- }
- };
-}
-
-function generateWorkerBlob() {
- var blob,
- factorySource;
-
- /* jshint ignore:start */
- // @ts-ignore
- if (typeof __factorySource__ !== 'undefined') {
- // @ts-ignore
- factorySource = __factorySource__; // eslint-disable-line no-undef
- }
- /* jshint ignore:end */
-
- blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'],
- { type: 'text/javascript' });
-
- return window.URL.createObjectURL(blob);
-}
-
-export function initWorker(config: QuaggaJSConfigObject, inputStream: any, cb: Function) {
- const blobURL = generateWorkerBlob();
- const worker = new Worker(blobURL);
-
- const workerThread: QWorkerThread = {
- worker,
- imageData: new Uint8Array(inputStream.getWidth() * inputStream.getHeight()),
- busy: true,
- };
-
- workerThread.worker.onmessage = function (e) {
- if (e.data.event === 'initialized') {
- URL.revokeObjectURL(blobURL);
- workerThread.busy = false;
- workerThread.imageData = new Uint8Array(e.data.imageData);
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log('Worker initialized');
- }
- cb(workerThread);
- } else if (e.data.event === 'processed') {
- workerThread.imageData = new Uint8Array(e.data.imageData);
- workerThread.busy = false;
- // TODO: how to thread publishResult into here? TypeScript says it's not here. https://github.com/ericblade/quagga2/issues/466#issuecomment-1724248080 says it's necessary?
- // @ts-ignore
- if (typeof publishResult !== 'undefined') {
- // @ts-ignore
- publishResult(e.data.result, workerThread.imageData);
- }
- } else if (e.data.event === 'error') {
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log('Worker error: ' + e.data.message);
- }
- }
- };
-
- workerThread.worker.postMessage({
- cmd: 'init',
- size: { x: inputStream.getWidth(), y: inputStream.getHeight() },
- imageData: workerThread.imageData,
- config: configForWorker(config),
- }, [workerThread.imageData.buffer]);
-}
-
-export function adjustWorkerPool(capacity: number, config?: QuaggaJSConfigObject, inputStream?: any, cb?: Function) {
- const increaseBy = capacity - workerPool.length;
- if (increaseBy === 0 && cb) {
- cb();
- } else if (increaseBy < 0) {
- const workersToTerminate = workerPool.slice(increaseBy);
- workersToTerminate.forEach(function (workerThread) {
- workerThread.worker.terminate();
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log('Worker terminated!');
- }
- });
- workerPool = workerPool.slice(0, increaseBy);
- if (cb) {
- cb();
- }
- } else {
- const workerInitialized = (workerThread: QWorkerThread) => {
- workerPool.push(workerThread);
- if (workerPool.length >= capacity && cb) {
- cb();
- }
- };
-
- if (config) {
- for (let i = 0; i < increaseBy; i++) {
- initWorker(config, inputStream, workerInitialized);
- }
- }
- }
-}
-
-export function setReaders(readers: Array) {
- workerPool.forEach((workerThread) => workerThread.worker.postMessage({ cmd: 'setReaders', readers }));
-}
-
-export function registerReader(name: string, reader: BarcodeReaderConstructor) {
- workerPool.forEach((workerThread) => workerThread.worker.postMessage({ cmd: 'registerReader', name, reader }));
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/setupInputStream.ts b/quagga2/quagga2-1.12.1/src/quagga/setupInputStream.ts
deleted file mode 100644
index 6edf7dc..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/setupInputStream.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { InputStreamFactory } from 'input/input_stream/input_stream.d';
-import type { InputStreamType } from '../../type-definitions/quagga.d';
-
-// TODO: need to create an InputStream typescript interface, so we don't have an "any" in the next line
-export default function setupInputStream(type: InputStreamType = 'LiveStream', viewport: Element | null, inputStreamFactory: InputStreamFactory) {
- switch (type) {
- case 'VideoStream': {
- const video = document.createElement('video');
- return {
- video,
- inputStream: inputStreamFactory.createVideoStream(video),
- };
- }
- case 'ImageStream':
- return { inputStream: inputStreamFactory.createImageStream() };
- case 'LiveStream': {
- let video: HTMLVideoElement | null = null;
- if (viewport) {
- video = viewport.querySelector('video');
- if (!video) {
- video = document.createElement('video');
- viewport.appendChild(video);
- }
- }
- return {
- video,
- inputStream: inputStreamFactory.createLiveStream(video as HTMLVideoElement),
- };
- }
- default:
- console.error(`* setupInputStream invalid type ${type}`);
- return { video: null, inputStream: null };
- }
-}
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/Exception.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/Exception.spec.ts
deleted file mode 100644
index dad1fd5..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/Exception.spec.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { expect } from 'chai';
-import { describe, it } from 'mocha';
-import Exception from '../Exception';
-
-describe('src/quagga/Exception', () => {
- describe('constructor', () => {
- it('creates an Exception with message and code', () => {
- const ex = new Exception('Test error message', -1);
- expect(ex.message).to.equal('Test error message');
- expect(ex.code).to.equal(-1);
- expect(ex).to.be.an.instanceof(Error);
- expect(ex).to.be.an.instanceof(Exception);
- });
-
- it('creates an Exception with message only', () => {
- const ex = new Exception('Test error message');
- expect(ex.message).to.equal('Test error message');
- expect(ex.code).to.be.undefined;
- });
- });
-
- describe('toJSON', () => {
- it('serializes message and code when JSON.stringify is called', () => {
- const ex = new Exception('Test error message', -1);
- const json = JSON.stringify(ex);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.equal('Test error message');
- expect(parsed.code).to.equal(-1);
- expect(parsed.name).to.equal('Error');
- });
-
- it('includes descriptive error message in JSON output', () => {
- const errorDesc = 'getUserMedia is not defined. This may mean that the user has declined camera access, or the browser does not support media APIs. If you are running in iOS, you must use Safari.';
- const ex = new Exception(errorDesc, -1);
- const json = JSON.stringify(ex);
- const parsed = JSON.parse(json);
- expect(parsed.message).to.include('getUserMedia is not defined');
- expect(parsed.message).to.include('iOS');
- expect(parsed.message).to.include('Safari');
- expect(parsed.code).to.equal(-1);
- });
-
- it('returns proper object from toJSON method', () => {
- const ex = new Exception('Test message', 42);
- const result = ex.toJSON();
- expect(result).to.deep.equal({
- name: 'Error',
- message: 'Test message',
- code: 42,
- });
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/browser/initCanvas.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/browser/initCanvas.spec.ts
deleted file mode 100644
index c39a0b7..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/browser/initCanvas.spec.ts
+++ /dev/null
@@ -1,229 +0,0 @@
-import { describe, it, beforeEach, afterEach } from 'mocha';
-import { expect } from 'chai';
-import { QuaggaContext } from '../../../QuaggaContext';
-import initCanvas from '../../initCanvas';
-
-// These tests verify initCanvas behavior in a browser environment where document is defined.
-// In the browser, dom.image and ctx.image should always be HTMLCanvasElement and CanvasRenderingContext2D
-// respectively, while overlay depends on the createOverlay config option.
-
-describe('initCanvas (browser)', () => {
- let context: QuaggaContext;
- let createdCanvases: HTMLCanvasElement[] = [];
-
- beforeEach(() => {
- context = new QuaggaContext();
- // Mock the input stream
- context.inputStream = {
- getCanvasSize: () => ({ type: 'XYSize' as const, x: 640, y: 480 }),
- };
-
- // Clean up any existing canvases from previous tests
- document.querySelectorAll('canvas.imgBuffer, canvas.drawingBuffer').forEach((canvas) => {
- canvas.remove();
- });
- });
-
- afterEach(() => {
- // Clean up canvases created during tests
- createdCanvases.forEach((canvas) => {
- if (canvas.parentElement) {
- canvas.parentElement.removeChild(canvas);
- }
- });
- createdCanvases = [];
-
- // Also clean up any canvases that may have been created
- document.querySelectorAll('canvas.imgBuffer, canvas.drawingBuffer').forEach((canvas) => {
- canvas.remove();
- });
- });
-
- describe('canvas structure', () => {
- it('should return object with dom and ctx properties each having image and overlay', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- // Verify dom object has both image and overlay properties
- expect(result!.dom).to.be.an('object');
- expect(result!.dom).to.have.property('image');
- expect(result!.dom).to.have.property('overlay');
- // Verify ctx object has both image and overlay properties
- expect(result!.ctx).to.be.an('object');
- expect(result!.ctx).to.have.property('image');
- expect(result!.ctx).to.have.property('overlay');
- });
- });
-
- describe('dom.image and ctx.image (always present in browser)', () => {
- it('should always have dom.image as HTMLCanvasElement in browser', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- expect(result!.dom.image).to.be.instanceOf(HTMLCanvasElement);
- expect(result!.dom.image!.className).to.equal('imgBuffer');
- });
-
- it('should always have ctx.image as CanvasRenderingContext2D in browser', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- expect(result!.ctx.image).to.be.instanceOf(CanvasRenderingContext2D);
- });
-
- it('should set canvas dimensions from inputStream.getCanvasSize()', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- };
-
- const result = initCanvas(context);
-
- expect(result!.dom.image!.width).to.equal(640);
- expect(result!.dom.image!.height).to.equal(480);
- });
- });
-
- describe('overlay with createOverlay: true (default)', () => {
- it('should have dom.overlay as HTMLCanvasElement when createOverlay is true', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: true,
- },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- expect(result!.dom.overlay).to.be.instanceOf(HTMLCanvasElement);
- expect(result!.dom.overlay!.className).to.equal('drawingBuffer');
- });
-
- it('should have ctx.overlay as CanvasRenderingContext2D when createOverlay is true', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: true,
- },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- expect(result!.ctx.overlay).to.be.instanceOf(CanvasRenderingContext2D);
- });
-
- it('should create overlay by default when createOverlay is not specified', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- // No canvas config - should default to createOverlay: true
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- expect(result!.dom.overlay).to.be.instanceOf(HTMLCanvasElement);
- expect(result!.ctx.overlay).to.be.instanceOf(CanvasRenderingContext2D);
- });
-
- it('should set overlay canvas dimensions from inputStream.getCanvasSize()', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: true,
- },
- };
-
- const result = initCanvas(context);
-
- expect(result!.dom.overlay!.width).to.equal(640);
- expect(result!.dom.overlay!.height).to.equal(480);
- });
- });
-
- describe('overlay with createOverlay: false', () => {
- it('should have null dom.overlay when createOverlay is false', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: false,
- },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- // Image should still be present
- expect(result!.dom.image).to.be.instanceOf(HTMLCanvasElement);
- // But overlay should be null
- expect(result!.dom.overlay).to.be.null;
- });
-
- it('should have null ctx.overlay when createOverlay is false', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: false,
- },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- // Image context should still be present
- expect(result!.ctx.image).to.be.instanceOf(CanvasRenderingContext2D);
- // But overlay context should be null
- expect(result!.ctx.overlay).to.be.null;
- });
- });
-
- describe('edge cases', () => {
- it('should return null when inputStream type is not defined', () => {
- context.config = {
- inputStream: {},
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.null;
- });
-
- it('should reuse existing canvas elements if they exist in the DOM', () => {
- // Create existing canvas elements
- const existingImageCanvas = document.createElement('canvas');
- existingImageCanvas.className = 'imgBuffer';
- document.body.appendChild(existingImageCanvas);
- createdCanvases.push(existingImageCanvas);
-
- const existingOverlayCanvas = document.createElement('canvas');
- existingOverlayCanvas.className = 'drawingBuffer';
- document.body.appendChild(existingOverlayCanvas);
- createdCanvases.push(existingOverlayCanvas);
-
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: true,
- },
- };
-
- const result = initCanvas(context);
-
- // Should reuse existing canvases
- expect(result!.dom.image).to.equal(existingImageCanvas);
- expect(result!.dom.overlay).to.equal(existingOverlayCanvas);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/browser/pause_start.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/browser/pause_start.spec.ts
deleted file mode 100644
index c7097cc..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/browser/pause_start.spec.ts
+++ /dev/null
@@ -1,268 +0,0 @@
-import { describe, it, afterEach, beforeEach } from 'mocha';
-import { expect } from 'chai';
-import Quagga from '../../../quagga';
-import CameraAccess from '../../../input/camera_access';
-
-// These tests verify that Quagga.pause() and Quagga.start() work correctly with LiveStream.
-// The tests use Cypress's fake camera device (via --use-fake-ui-for-media-stream and
-// --use-fake-device-for-media-stream Chrome flags) to test pause/start functionality.
-
-describe('Quagga pause/start (browser)', () => {
- let processedCount: number;
- let processedHandler: () => void;
-
- beforeEach(() => {
- processedCount = 0;
- processedHandler = () => {
- processedCount += 1;
- };
- });
-
- afterEach(async () => {
- Quagga.offProcessed(processedHandler);
- await Quagga.stop();
- });
-
- describe('pause()', () => {
- it('should stop frame processing when called after start()', function (done) {
- this.timeout(10000);
-
- // Create a container for the video element
- const container = document.createElement('div');
- container.id = 'test-container-pause';
- document.body.appendChild(container);
-
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: container,
- constraints: {
- width: 320,
- height: 240,
- },
- },
- decoder: {
- readers: ['ean_reader'],
- },
- locate: false,
- }, (err) => {
- if (err) {
- container.remove();
- done(err);
- return;
- }
-
- Quagga.onProcessed(processedHandler);
- Quagga.start();
-
- // Wait for some frames to be processed
- setTimeout(() => {
- const countBeforePause = processedCount;
- expect(countBeforePause).to.be.greaterThan(0, 'Should process some frames before pause');
-
- // Pause and wait to ensure no more frames are processed
- Quagga.pause();
-
- // Wait and verify no more frames are processed
- setTimeout(() => {
- const countAfterPause = processedCount;
- expect(countAfterPause).to.equal(countBeforePause,
- 'No frames should be processed after pause');
-
- container.remove();
- done();
- }, 200);
- }, 500);
- });
- });
- });
-
- describe('start() after pause()', () => {
- it('should resume frame processing when called after pause()', function (done) {
- this.timeout(15000);
-
- // Create a container for the video element
- const container = document.createElement('div');
- container.id = 'test-container-resume';
- document.body.appendChild(container);
-
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: container,
- constraints: {
- width: 320,
- height: 240,
- },
- },
- decoder: {
- readers: ['ean_reader'],
- },
- locate: false,
- }, (err) => {
- if (err) {
- container.remove();
- done(err);
- return;
- }
-
- Quagga.onProcessed(processedHandler);
- Quagga.start();
-
- // Wait for some frames to be processed
- setTimeout(() => {
- const countBeforePause = processedCount;
- expect(countBeforePause).to.be.greaterThan(0, 'Should process some frames before pause');
-
- // Pause
- Quagga.pause();
-
- // Wait to ensure pause takes effect
- setTimeout(() => {
- const countAfterPause = processedCount;
-
- // Resume by calling start()
- Quagga.start();
-
- // Wait for more frames to be processed after resume
- setTimeout(() => {
- const countAfterResume = processedCount;
- expect(countAfterResume).to.be.greaterThan(countAfterPause,
- 'Should process more frames after resume');
-
- container.remove();
- done();
- }, 500);
- }, 200);
- }, 500);
- });
- });
-
- it('should correctly handle multiple pause/start cycles', function (done) {
- this.timeout(12000);
-
- const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
-
- const runTest = async () => {
- // Create a container for the video element
- const container = document.createElement('div');
- container.id = 'test-container-cycles';
- document.body.appendChild(container);
-
- try {
- await new Promise((resolve, reject) => {
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: container,
- constraints: { width: 320, height: 240 },
- },
- decoder: { readers: ['ean_reader'] },
- locate: false,
- }, (err) => (err ? reject(err) : resolve()));
- });
-
- Quagga.onProcessed(processedHandler);
- Quagga.start();
-
- // First cycle - start processing
- await delay(250);
- const count1 = processedCount;
- expect(count1).to.be.greaterThan(0, 'Should process frames in first cycle');
-
- // First pause
- Quagga.pause();
- await delay(100);
- expect(processedCount).to.equal(count1, 'No frames during first pause');
-
- // Second cycle - resume processing
- Quagga.start();
- await delay(250);
- const count2 = processedCount;
- expect(count2).to.be.greaterThan(count1, 'Should process frames in second cycle');
-
- // Second pause
- Quagga.pause();
- await delay(100);
- expect(processedCount).to.equal(count2, 'No frames during second pause');
-
- // Third cycle - resume processing
- Quagga.start();
- await delay(250);
- expect(processedCount).to.be.greaterThan(count2, 'Should process frames in third cycle');
-
- done();
- } catch (err) {
- done(err);
- } finally {
- container.remove();
- }
- };
-
- runTest();
- });
- });
-
- describe('pause() with MediaStream track', () => {
- it('should keep the camera track active when paused', function (done) {
- this.timeout(10000);
-
- // Create a container for the video element
- const container = document.createElement('div');
- container.id = 'test-container-track';
- document.body.appendChild(container);
-
- Quagga.init({
- inputStream: {
- type: 'LiveStream',
- target: container,
- constraints: {
- width: 320,
- height: 240,
- },
- },
- decoder: {
- readers: ['ean_reader'],
- },
- locate: false,
- }, (err) => {
- if (err) {
- container.remove();
- done(err);
- return;
- }
-
- Quagga.start();
-
- // Check that the camera stream is active
- const streamBefore = CameraAccess.getActiveStream();
- expect(streamBefore).to.not.be.null;
- expect(streamBefore?.active).to.equal(true, 'Stream should be active before pause');
-
- const trackBefore = CameraAccess.getActiveTrack();
- expect(trackBefore).to.not.be.null;
- expect(trackBefore?.readyState).to.equal('live', 'Track should be live before pause');
-
- // Pause
- Quagga.pause();
-
- // Verify that the camera stream is still active after pause
- // (pause() only stops frame processing, not the camera)
- setTimeout(() => {
- const streamAfter = CameraAccess.getActiveStream();
- expect(streamAfter).to.not.be.null;
- expect(streamAfter?.active).to.equal(true,
- 'Stream should remain active after pause');
-
- const trackAfter = CameraAccess.getActiveTrack();
- expect(trackAfter).to.not.be.null;
- expect(trackAfter?.readyState).to.equal('live',
- 'Track should remain live after pause');
-
- container.remove();
- done();
- }, 200);
- });
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/drawScannerArea.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/drawScannerArea.spec.ts
deleted file mode 100644
index 7d9d2fb..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/drawScannerArea.spec.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/* eslint-disable @typescript-eslint/ban-ts-comment */
-import { expect } from 'chai';
-import { describe, it, beforeEach } from 'mocha';
-import Quagga from '../quagga';
-
-type MockCtx = {
- fillStyle: string;
- strokeStyle: string;
- lineWidth: number;
- fillRectCalls: number;
- strokeRectCalls: number;
- lastFillArgs?: [number, number, number, number];
- lastStrokeArgs?: [number, number, number, number];
- fillRect: (x: number, y: number, w: number, h: number) => void;
- strokeRect: (x: number, y: number, w: number, h: number) => void;
-};
-
-function createMockCtx(): MockCtx {
- return {
- fillStyle: '',
- strokeStyle: '',
- lineWidth: 0,
- fillRectCalls: 0,
- strokeRectCalls: 0,
- fillRect(x: number, y: number, w: number, h: number) {
- this.lastFillArgs = [x, y, w, h];
- this.fillRectCalls += 1;
- },
- strokeRect(x: number, y: number, w: number, h: number) {
- this.lastStrokeArgs = [x, y, w, h];
- this.strokeRectCalls += 1;
- },
- };
-}
-
-describe('Quagga.drawScannerArea', () => {
- let quagga: Quagga;
- let mockCtx: MockCtx;
-
- beforeEach(() => {
- quagga = new Quagga();
- mockCtx = createMockCtx();
- // @ts-ignore - assigning mock ctx
- quagga.context.canvasContainer.ctx.overlay = mockCtx as any;
- // Mock inputStream with getTopRight
- quagga.context.inputStream = {
- getTopRight: () => ({ x: 0, y: 0 }),
- } as any;
- // Default config with area
- quagga.context.config = {
- locate: false,
- inputStream: {
- type: 'LiveStream',
- area: {
- top: '10%',
- right: '10%',
- bottom: '10%',
- left: '10%',
- backgroundColor: 'rgba(255,0,0,0.2)',
- },
- },
- } as any;
- // Mock boxSize (200x100 canvas with 10% insets: 180x80 box)
- quagga.context.boxSize = [
- [18, 10], // top-left
- [18, 90], // bottom-left
- [198, 90], // bottom-right
- [198, 10], // top-right
- ];
- });
-
- it('skips drawing when locate is true', () => {
- (quagga.context.config as any).locate = true;
- quagga.drawScannerArea();
- expect(mockCtx.fillRectCalls).to.equal(0);
- expect(mockCtx.strokeRectCalls).to.equal(0);
- });
-
- it('skips drawing when no area is configured', () => {
- (quagga.context.config as any).inputStream.area = undefined;
- quagga.drawScannerArea();
- expect(mockCtx.fillRectCalls).to.equal(0);
- expect(mockCtx.strokeRectCalls).to.equal(0);
- });
-
- it('skips drawing when no style is provided', () => {
- (quagga.context.config as any).inputStream.area = { top: '10%', left: '10%' };
- quagga.drawScannerArea();
- expect(mockCtx.fillRectCalls).to.equal(0);
- expect(mockCtx.strokeRectCalls).to.equal(0);
- });
-
- it('draws fill and stroke based on boxSize', () => {
- (quagga.context.config as any).inputStream.area = {
- backgroundColor: 'rgba(255,0,0,0.2)',
- borderColor: '#00ff00',
- borderWidth: 3,
- };
-
- quagga.drawScannerArea();
-
- // boxSize is 180x80 starting at (18,10)
- expect(mockCtx.lastFillArgs).to.deep.equal([18, 10, 180, 80]);
- expect(mockCtx.lastStrokeArgs).to.deep.equal([18, 10, 180, 80]);
- expect(mockCtx.fillStyle).to.equal('rgba(255,0,0,0.2)');
- expect(mockCtx.strokeStyle).to.equal('#00ff00');
- expect(mockCtx.lineWidth).to.equal(3);
- });
-
- it('defaults border width when only color is provided', () => {
- (quagga.context.config as any).inputStream.area = { borderColor: '#0f0' };
- quagga.drawScannerArea();
- expect(mockCtx.strokeRectCalls).to.equal(1);
- expect(mockCtx.lineWidth).to.equal(2); // default width
- expect(mockCtx.strokeStyle).to.equal('#0f0');
- });
-
- it('applies topRight offset to position', () => {
- // Area starts at offset (50, 30) on canvas
- quagga.context.inputStream = {
- getTopRight: () => ({ x: 50, y: 30 }),
- } as any;
- // boxSize is relative to the constrained area
- quagga.context.boxSize = [
- [0, 0], // top-left
- [0, 80], // bottom-left
- [180, 80], // bottom-right
- [180, 0], // top-right
- ];
-
- quagga.drawScannerArea();
-
- // Should add offset: (0+50, 0+30) = (50, 30)
- expect(mockCtx.lastFillArgs).to.deep.equal([50, 30, 180, 80]);
- });
-
- it('is invoked via publishResult when locate=false and area present', () => {
- quagga.publishResult();
- expect(mockCtx.fillRectCalls).to.be.greaterThan(0);
- });
-
- it('skips drawing when boxSize is not set', () => {
- quagga.context.boxSize = undefined;
- quagga.drawScannerArea();
- expect(mockCtx.fillRectCalls).to.equal(0);
- expect(mockCtx.strokeRectCalls).to.equal(0);
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/initCanvas.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/initCanvas.spec.ts
deleted file mode 100644
index 937ddbc..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/initCanvas.spec.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { expect } from 'chai';
-import { describe, it, beforeEach } from 'mocha';
-import { QuaggaContext } from '../../QuaggaContext';
-import initCanvas from '../initCanvas';
-
-describe('src/quagga/initCanvas.ts', () => {
- describe('initCanvas', () => {
- let context: QuaggaContext;
-
- beforeEach(() => {
- context = new QuaggaContext();
- // Mock the input stream
- context.inputStream = {
- getCanvasSize: () => ({ type: 'XYSize' as const, x: 640, y: 480 }),
- };
- });
-
- it('should return container with all null properties when there is no document (Node.js)', () => {
- // Node.js environment - no document
- context.config = {
- inputStream: { type: 'ImageStream' },
- };
-
- const result = initCanvas(context);
-
- // In Node.js (no document), should return default container with all null values
- expect(result).to.be.an('object');
- // Since we're in Node.js where document is undefined,
- // all dom and ctx properties should be null
- expect(result!.dom.image).to.be.null;
- expect(result!.dom.overlay).to.be.null;
- expect(result!.ctx.image).to.be.null;
- expect(result!.ctx.overlay).to.be.null;
- });
-
- it('should return null when inputStream type is not defined', () => {
- context.config = {
- inputStream: {},
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.null;
- });
-
- it('should respect createOverlay: false config option', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- createOverlay: false,
- },
- };
-
- const result = initCanvas(context);
-
- // Result should be returned but overlay should be null
- expect(result).to.be.an('object');
- expect(result!.dom.overlay).to.be.null;
- expect(result!.ctx.overlay).to.be.null;
- });
-
- it('should default createOverlay to true when canvas config is not specified', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- // No canvas config - should default to createOverlay: true
- };
-
- const result = initCanvas(context);
-
- // In Node.js (no document), will still return null overlay
- // but the logic path for default true is tested
- expect(result).to.be.an('object');
- });
-
- it('should default createOverlay to true when canvas.createOverlay is undefined', () => {
- context.config = {
- inputStream: { type: 'ImageStream' },
- canvas: {
- // createOverlay not specified - should default to true
- },
- };
-
- const result = initCanvas(context);
-
- expect(result).to.be.an('object');
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/quagga.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/quagga.spec.ts
deleted file mode 100644
index bbe9579..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/quagga.spec.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-/* eslint-disable @typescript-eslint/ban-ts-comment */
-import { expect } from 'chai';
-import { describe, it, beforeEach } from 'mocha';
-import Quagga from '../quagga';
-import QuaggaStatic from '../../quagga';
-import type { Box } from '../transform';
-
-describe('src/quagga/quagga.ts', () => {
- describe('transformResult', () => {
- let quagga: Quagga;
-
- beforeEach(() => {
- quagga = new Quagga();
- // Mock the input stream with a non-zero top-right offset
- quagga.context.inputStream = {
- getTopRight: () => ({ x: 100, y: 50 }),
- } as any;
- });
-
- it('should transform result.box when present', () => {
- const result = {
- box: [[0, 0], [320, 0], [320, 240], [0, 240]] as Box,
- };
- quagga.transformResult(result);
- expect(result.box).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- });
-
- it('should transform result.boxes when present', () => {
- const result = {
- boxes: [
- [[0, 0], [320, 0], [320, 240], [0, 240]] as Box,
- [[10, 10], [310, 10], [310, 230], [10, 230]] as Box,
- ],
- };
- quagga.transformResult(result);
- expect(result.boxes[0]).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- expect(result.boxes[1]).to.deep.equal([[110, 60], [410, 60], [410, 280], [110, 280]]);
- });
-
- it('should NOT double-transform when result.box is same reference as result.boxes[i]', () => {
- // This is the bug fix test case
- // result.box and result.boxes[0] are the SAME object reference
- // The fix ensures we only transform it once
- const sharedBox: Box = [[0, 0], [320, 0], [320, 240], [0, 240]];
- const result = {
- box: sharedBox,
- boxes: [sharedBox], // Same reference as result.box
- };
-
- quagga.transformResult(result);
-
- // Should only be transformed once (offset by 100, 50)
- // NOT twice (which would be offset by 200, 100)
- expect(result.box).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- expect(result.boxes[0]).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- });
-
- it('should transform both box and unrelated boxes separately', () => {
- // result.box is a different object from result.boxes entries
- const box1: Box = [[0, 0], [320, 0], [320, 240], [0, 240]];
- const box2: Box = [[10, 10], [310, 10], [310, 230], [10, 230]];
- const result = {
- box: box1,
- boxes: [box2], // Different reference from result.box
- };
-
- quagga.transformResult(result);
-
- expect(result.box).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- expect(result.boxes[0]).to.deep.equal([[110, 60], [410, 60], [410, 280], [110, 280]]);
- });
-
- it('should not transform anything when offset is zero', () => {
- quagga.context.inputStream = {
- getTopRight: () => ({ x: 0, y: 0 }),
- } as any;
-
- const result = {
- box: [[0, 0], [320, 0], [320, 240], [0, 240]] as Box,
- boxes: [[[10, 10], [310, 10], [310, 230], [10, 230]] as Box],
- };
-
- quagga.transformResult(result);
-
- // Should remain unchanged
- expect(result.box).to.deep.equal([[0, 0], [320, 0], [320, 240], [0, 240]]);
- expect(result.boxes[0]).to.deep.equal([[10, 10], [310, 10], [310, 230], [10, 230]]);
- });
-
- it('should transform result.line when present', () => {
- const result = {
- line: [
- { x: 10, y: 20 },
- { x: 100, y: 200 },
- ],
- };
-
- quagga.transformResult(result);
-
- expect(result.line[0]).to.deep.include({ x: 110, y: 70 });
- expect(result.line[1]).to.deep.include({ x: 200, y: 250 });
- });
-
- it('should NOT double-transform when multiple:true and boxes shared between parent and barcodes', () => {
- // This simulates the multiple:true scenario where:
- // - Parent result has boxes array
- // - Each barcode in barcodes has a box that references the same object in boxes
- const box1: Box = [[0, 0], [320, 0], [320, 240], [0, 240]];
- const box2: Box = [[10, 10], [310, 10], [310, 230], [10, 230]];
- const result = {
- boxes: [box1, box2], // Parent has all boxes
- barcodes: [
- { box: box1, codeResult: { code: '123' } }, // Same reference as boxes[0]
- { box: box2, codeResult: { code: '456' } }, // Same reference as boxes[1]
- ],
- };
-
- quagga.transformResult(result);
-
- // Each box should only be transformed once (offset by 100, 50)
- // NOT twice (which would happen if parent.boxes and barcode.box both transform)
- expect(result.boxes[0]).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- expect(result.boxes[1]).to.deep.equal([[110, 60], [410, 60], [410, 280], [110, 280]]);
- expect(result.barcodes[0].box).to.deep.equal([[100, 50], [420, 50], [420, 290], [100, 290]]);
- expect(result.barcodes[1].box).to.deep.equal([[110, 60], [410, 60], [410, 280], [110, 280]]);
- });
- });
-
- describe('canRecord', () => {
- let quagga: Quagga;
-
- beforeEach(() => {
- quagga = new Quagga();
- });
-
- it('should call callback with error when initAborted is true', (done) => {
- quagga.context.initAborted = true;
- quagga.canRecord((err?: Error) => {
- expect(err).to.be.instanceOf(Error);
- expect(err?.message).to.equal('Initialization was aborted');
- done();
- });
- });
-
- it('should call callback with error when config is null', (done) => {
- quagga.context.config = undefined;
- quagga.canRecord((err?: Error) => {
- expect(err).to.be.instanceOf(Error);
- expect(err?.message).to.equal('Configuration not initialized');
- done();
- });
- });
-
- it('should call callback with error when inputStream is null', (done) => {
- quagga.context.config = { inputStream: { type: 'ImageStream' } };
- quagga.context.inputStream = null;
- quagga.canRecord((err?: Error) => {
- expect(err).to.be.instanceOf(Error);
- expect(err?.message).to.equal('Input stream not initialized');
- done();
- });
- });
-
- it('should call callback with error when inputStream is not initialized', () => {
- quagga.context.initAborted = false;
- quagga.context.config = { inputStream: { type: 'ImageStream' } };
- // Don't set inputStream, so it will fail with the inputStream error
- let receivedError: Error | undefined;
- quagga.canRecord((err?: Error) => {
- receivedError = err;
- });
- expect(receivedError).to.be.instanceOf(Error);
- expect(receivedError?.message).to.equal('Input stream not initialized');
- });
- });
-
- describe('stop', () => {
- let quagga: Quagga;
-
- beforeEach(() => {
- quagga = new Quagga();
- });
-
- it('should set initAborted to true when framegrabber is not initialized', async () => {
- quagga.context.framegrabber = null;
- await quagga.stop();
- expect(quagga.context.initAborted).to.be.true;
- });
-
- it('should not set initAborted when framegrabber is initialized', async () => {
- quagga.context.framegrabber = {}; // mock framegrabber
- quagga.context.initAborted = false;
- await quagga.stop();
- expect(quagga.context.initAborted).to.be.false;
- });
- });
-
- describe('drawScannerArea', () => {
- it('exposes drawScannerArea as a function', () => {
- expect(QuaggaStatic).to.be.an('object');
- expect((QuaggaStatic as any).drawScannerArea).to.be.a('function');
- });
-
- it('calling drawScannerArea without init does not throw', () => {
- // Should be a no-op when not configured
- expect(() => (QuaggaStatic as any).drawScannerArea()).to.not.throw();
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/test/transform.spec.ts b/quagga2/quagga2-1.12.1/src/quagga/test/transform.spec.ts
deleted file mode 100644
index 90ef985..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/test/transform.spec.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { expect } from 'chai';
-import { describe, it } from 'mocha';
-import * as Transform from '../transform';
-
-describe('src/quagga/transform', () => {
- describe('moveBox', () => {
- it('moves the box coordinates passed to it', () => {
- const box: Transform.Box = [[0, 0], [320, 240]];
- Transform.moveBox(box, 10, -10);
- expect(box).to.deep.equal([[10, -10], [330, 230]]);
- });
-
- // Test to document shared reference behavior - this test ensures that
- // when boxes share references (like result.box and result.boxes[i]),
- // calling moveBox on both would double-transform the shared box.
- // The fix in transformResult skips boxes that are the same reference as result.box.
- it('mutates the original box (shared reference issue)', () => {
- const box: Transform.Box = [[0, 0], [320, 240]];
- const boxes: Transform.Box[] = [box]; // boxes[0] is same reference as box
-
- // First transform on box
- Transform.moveBox(box, 10, 10);
- expect(box).to.deep.equal([[10, 10], [330, 250]]);
-
- // boxes[0] is the same reference, so it was also transformed
- expect(boxes[0]).to.deep.equal([[10, 10], [330, 250]]);
-
- // If we transformed boxes[0] again (without the fix), it would double-transform
- // Transform.moveBox(boxes[0], 10, 10);
- // This would result in [[20, 20], [340, 260]] - double the intended offset!
- });
- });
- describe('moveLine', () => {
- it('moves the line coordinates passed to it', () => {
- const line: Transform.Line = [{ x: 10, y: 10, type: 'Point' }, { x: 10, y: 20, type: 'Point' }];
- Transform.moveLine(line, 10, -10);
- expect(line).to.deep.equal([{ x: 20, y: 0, type: 'Point' }, { x: 20, y: 10, type: 'Point' }]);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/quagga/transform.ts b/quagga2/quagga2-1.12.1/src/quagga/transform.ts
deleted file mode 100644
index 492c7a7..0000000
--- a/quagga2/quagga2-1.12.1/src/quagga/transform.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/* eslint-disable no-param-reassign */
-import type { Point } from '../../type-definitions/quagga.d';
-
-export type Box = Array<[ number, number ]>;
-
-export type Line = [ Point, Point ];
-
-export function moveBox(box: Box, xOffset: number, yOffset: number): void {
- let corner = box.length;
- while (corner--) {
- box[corner][0] += xOffset;
- box[corner][1] += yOffset;
- }
-}
-
-export function moveLine(line: Line, xOffset: number, yOffset: number): void {
- line[0].x += xOffset;
- line[0].y += yOffset;
- line[1].x += xOffset;
- line[1].y += yOffset;
-}
diff --git a/quagga2/quagga2-1.12.1/src/reader/2of5_reader.ts b/quagga2/quagga2-1.12.1/src/reader/2of5_reader.ts
deleted file mode 100644
index 57f7e4a..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/2of5_reader.ts
+++ /dev/null
@@ -1,227 +0,0 @@
-import BarcodeReader, { Barcode, BarcodeInfo, BarcodePosition } from './barcode_reader';
-
-const N = 1;
-const W = 3;
-const START_PATTERN = [W, N, W, N, N, N];
-const STOP_PATTERN = [W, N, N, N, W];
-const CODE_PATTERN = [
- [N, N, W, W, N],
- [W, N, N, N, W],
- [N, W, N, N, W],
- [W, W, N, N, N],
- [N, N, W, N, W],
- [W, N, W, N, N],
- [N, W, W, N, N],
- [N, N, N, W, W],
- [W, N, N, W, N],
- [N, W, N, W, N],
-];
-const START_PATTERN_LENGTH = START_PATTERN.reduce((sum, val) => sum + val, 0);
-
-class TwoOfFiveReader extends BarcodeReader {
- barSpaceRatio = [1, 1];
-
- FORMAT = '2of5';
-
- SINGLE_CODE_ERROR = 0.78;
-
- AVG_CODE_ERROR = 0.30;
-
- protected _findPattern(pattern: ReadonlyArray, offset: number, isWhite = false, tryHarder = false): BarcodeInfo | null {
- const counter = [];
- let counterPos = 0;
- const bestMatch = {
- error: Number.MAX_VALUE,
- code: -1,
- start: 0,
- end: 0,
- };
- let sum = 0;
- let error = 0;
- const epsilon = this.AVG_CODE_ERROR;
-
- if (!offset) {
- offset = this._nextSet(this._row);
- }
-
- for (let i = 0; i < pattern.length; i++) {
- counter[i] = 0;
- }
-
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- sum = 0;
- for (let j = 0; j < counter.length; j++) {
- sum += counter[j];
- }
- error = this._matchPattern(counter, pattern);
- if (error < epsilon) {
- bestMatch.error = error;
- bestMatch.start = i - sum;
- bestMatch.end = i;
- return bestMatch;
- }
- if (tryHarder) {
- for (let j = 0; j < counter.length - 2; j++) {
- counter[j] = counter[j + 2];
- }
- counter[counter.length - 2] = 0;
- counter[counter.length - 1] = 0;
- counterPos--;
- } else {
- return null;
- }
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- }
-
- protected _findStart(): BarcodePosition | null {
- let startInfo = null;
- let offset = this._nextSet(this._row);
- let narrowBarWidth = 1;
- let leadingWhitespaceStart = 0;
-
- while (!startInfo) {
- startInfo = this._findPattern(START_PATTERN, offset, false, true);
- if (!startInfo) {
- return null;
- }
- narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / START_PATTERN_LENGTH);
- leadingWhitespaceStart = startInfo.start - narrowBarWidth * 5;
- if (leadingWhitespaceStart >= 0) {
- if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {
- return startInfo;
- }
- }
- offset = startInfo.end;
- startInfo = null;
- }
- return startInfo;
- }
-
- protected _verifyTrailingWhitespace(endInfo: BarcodeInfo): BarcodePosition | null {
- const trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);
- if (trailingWhitespaceEnd < this._row.length) {
- if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {
- return endInfo;
- }
- }
- return null;
- }
-
- protected _findEnd(): BarcodePosition | null {
- // TODO: reverse, followed by some calcs, followed by another reverse? really?
- this._row.reverse();
- const offset = this._nextSet(this._row);
- const endInfo = this._findPattern(STOP_PATTERN, offset, false, true);
- this._row.reverse();
-
- if (endInfo === null) {
- return null;
- }
-
- // reverse numbers
- const tmp = endInfo.start;
- endInfo.start = this._row.length - endInfo.end;
- endInfo.end = this._row.length - tmp;
-
- return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null;
- }
-
- protected _verifyCounterLength(counters: Array) {
- return (counters.length % 10 === 0);
- }
-
- protected _decodeCode(counter: ReadonlyArray): BarcodeInfo | null {
- const epsilon = this.AVG_CODE_ERROR;
- const bestMatch = {
- error: Number.MAX_VALUE,
- code: -1,
- start: 0,
- end: 0,
- };
-
- for (let code = 0; code < CODE_PATTERN.length; code++) {
- const error = this._matchPattern(counter, CODE_PATTERN[code]);
- if (error < bestMatch.error!) {
- bestMatch.code = code;
- bestMatch.error = error;
- }
- }
- if (bestMatch.error! < epsilon) {
- return bestMatch;
- }
- return null;
- }
-
- protected _decodePayload(counters: ReadonlyArray, result: Array, decodedCodes: Array): BarcodeInfo | null {
- let pos = 0;
- const counterLength = counters.length;
- const counter = [0, 0, 0, 0, 0];
- let code: BarcodeInfo | null = null;
-
- while (pos < counterLength) {
- for (let i = 0; i < 5; i++) {
- counter[i] = counters[pos] * this.barSpaceRatio[0];
- pos += 2;
- }
- code = this._decodeCode(counter);
- if (!code) {
- return null;
- }
- result.push(`${code.code}`);
- decodedCodes.push(code);
- }
- return code;
- }
-
-
- public decode(row?: Array, start?: BarcodePosition): Barcode | null {
- const startInfo = this._findStart();
- if (!startInfo) {
- return null;
- }
-
- const endInfo = this._findEnd();
- if (!endInfo) {
- return null;
- }
-
- const counters = this._fillCounters(startInfo.end, endInfo.start, false);
- if (!this._verifyCounterLength(counters)) {
- return null;
- }
- const decodedCodes = [];
- decodedCodes.push(startInfo);
-
- const result: Array = [];
- const code = this._decodePayload(counters, result, decodedCodes);
- if (!code) {
- return null;
- }
- if (result.length < 5) {
- return null;
- }
-
- decodedCodes.push(endInfo);
- return {
- code: result.join(''),
- start: startInfo.start,
- end: endInfo.end,
- startInfo,
- decodedCodes,
- format: this.FORMAT,
- };
- }
-}
-
-export default TwoOfFiveReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/barcode_reader.ts b/quagga2/quagga2-1.12.1/src/reader/barcode_reader.ts
deleted file mode 100644
index 5020bd5..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/barcode_reader.ts
+++ /dev/null
@@ -1,239 +0,0 @@
-/* eslint-disable no-unused-vars */
-/* eslint-disable class-methods-use-this */
-// eslint-disable-next-line import/no-cycle
-import { ImageWrapper } from 'quagga';
-import { QuaggaJSResultObject } from '../../type-definitions/quagga';
-import ArrayHelper from '../common/array_helper';
-
-// for some reason this throws a shadow error on itself?!
-// eslint-disable-next-line no-shadow
-export enum BarcodeDirection {
- Forward = 1,
- Reverse = -1
-}
-
-export type BarcodeReaderType = string;
-export type BarcodeFormat = string;
-
-export interface BarcodeReaderConfig {
- normalizeBarSpaceWidth?: boolean,
- supplements?: Array,
-}
-
-export interface BarcodeCorrection {
- bar: number,
- space: number,
-}
-
-export interface BarcodePosition {
- end: number,
- endCounter?: number,
- error?: number,
- start: number,
- startCounter?: number
-}
-
-export interface BarcodeInfo extends BarcodePosition {
- code: number,
- correction?: BarcodeCorrection,
-}
-
-export interface Barcode {
- code: string,
- codeset?: number,
- correction?: BarcodeCorrection,
- decodedCodes?: Array,
- direction?: BarcodeDirection,
- end: number,
- endInfo?: BarcodePosition,
- format: BarcodeFormat,
- pattern?: string,
- start: number,
- startInfo: BarcodePosition,
- supplement?: Barcode,
-}
-
-export abstract class BarcodeReader {
- _row: Array = [];
-
- config: BarcodeReaderConfig = {};
-
- supplements: Array = [];
-
- SINGLE_CODE_ERROR = 0;
-
- FORMAT: BarcodeFormat = 'unknown';
-
- CONFIG_KEYS: BarcodeReaderConfig = {};
- // TODO: should add ALPHABETH_STRING, ALPHABET, CHARACTER_ENCODINGS to base class, if they
- // are useful in most readers.
-
- public abstract decode(row?: Array, start?: BarcodePosition | number): Barcode | null;
-
- static get Exception() {
- return {
- StartNotFoundException: 'Start-Info was not found!',
- CodeNotFoundException: 'Code could not be found!',
- PatternNotFoundException: 'Pattern could not be found!',
- };
- }
-
- // Reader-specific adjacent-line validation threshold (0 => disabled)
- static adjacentLineValidationMatches = 0;
-
- constructor(config: BarcodeReaderConfig, supplements?: Array) {
- this._row = [];
- this.config = config || {};
- if (supplements) {
- this.supplements = supplements;
- }
- }
-
- protected _nextUnset(line: ReadonlyArray, start = 0): number {
- for (let i = start; i < line.length; i++) {
- if (!line[i]) return i;
- }
- return line.length;
- }
-
- protected _matchPattern(counter: ReadonlyArray, code: ReadonlyArray, maxSingleError = this.SINGLE_CODE_ERROR || 1): number {
- let error = 0;
- let singleError = 0;
- let sum = 0;
- let modulo = 0;
- let barWidth = 0;
- let count = 0;
- let scaled = 0;
-
- for (let i = 0; i < counter.length; i++) {
- sum += counter[i];
- modulo += code[i];
- }
- if (sum < modulo) {
- return Number.MAX_VALUE;
- }
-
- barWidth = sum / modulo;
- // eslint-disable-next-line no-param-reassign
- maxSingleError *= barWidth;
- for (let i = 0; i < counter.length; i++) {
- count = counter[i];
- scaled = code[i] * barWidth;
- singleError = Math.abs(count - scaled) / scaled;
- if (singleError > maxSingleError) {
- return Number.MAX_VALUE;
- }
- error += singleError;
- }
- return error / modulo;
- }
-
- protected _nextSet(line: ReadonlyArray, offset = 0) {
- for (let i = offset; i < line.length; i++) {
- if (line[i]) return i;
- }
- return line.length;
- }
-
- protected _correctBars(counter: Array, correction: number, indices: Array) {
- let { length } = indices;
- let tmp = 0;
- while (length--) {
- tmp = counter[indices[length]] * (1 - ((1 - correction) / 2));
- if (tmp > 1) {
- // eslint-disable-next-line no-param-reassign
- counter[indices[length]] = tmp;
- }
- }
- }
-
- public decodePattern(pattern: Array) {
- // console.warn('* decodePattern', pattern);
- this._row = pattern;
- // console.warn('* decodePattern calling decode', typeof this, this.constructor, this.FORMAT, JSON.stringify(this));
- let result = this.decode();
- // console.warn('* first result=', result);
- if (result === null) {
- this._row.reverse();
- result = this.decode();
- // console.warn('* reversed result=', result);
- if (result) {
- result.direction = BarcodeDirection.Reverse;
- result.start = this._row.length - result.start;
- result.end = this._row.length - result.end;
- }
- } else {
- result.direction = BarcodeDirection.Forward;
- }
- if (result) {
- result.format = this.FORMAT;
- }
- // console.warn('* returning', result);
- return result;
- }
-
- protected _matchRange(start: number, end: number, value: number) {
- // eslint-disable-next-line no-param-reassign
- start = start < 0 ? 0 : start;
- let i;
- for (i = start; i < end; i++) {
- if (this._row[i] !== value) {
- return false;
- }
- }
- return true;
- }
-
- protected _fillCounters(offset: number = this._nextUnset(this._row), end: number = this._row.length, isWhite = true) {
- const counters: Array = [];
- let counterPos = 0;
- counters[counterPos] = 0;
- for (let i = offset; i < end; i++) {
- // eslint-disable-next-line no-bitwise
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counters[counterPos]++;
- } else {
- counterPos++;
- counters[counterPos] = 1;
- // eslint-disable-next-line no-param-reassign
- isWhite = !isWhite;
- }
- }
- return counters;
- }
-
- protected _toCounters(start: number, counters: Uint16Array | Array) {
- const numCounters = counters.length;
- const end = this._row.length;
- let isWhite = !this._row[start];
- let counterPos = 0;
-
- ArrayHelper.init(counters, 0);
- for (let i = start; i < end; i++) {
- // eslint-disable-next-line no-bitwise
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- // eslint-disable-next-line no-param-reassign
- counters[counterPos]++;
- } else {
- counterPos++;
- if (counterPos === numCounters) {
- break;
- } else {
- // eslint-disable-next-line no-param-reassign
- counters[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- }
- return counters;
- }
-
- // override/implement this in your custom readers.
- protected decodeImage(imageWrapper: ImageWrapper): QuaggaJSResultObject | null {
- // eslint-disable-next-line no-void
- void imageWrapper;
- return null;
- }
-}
-
-export default BarcodeReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/codabar_reader.ts b/quagga2/quagga2-1.12.1/src/reader/codabar_reader.ts
deleted file mode 100644
index 80c625d..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/codabar_reader.ts
+++ /dev/null
@@ -1,272 +0,0 @@
-import BarcodeReader, { Barcode, BarcodePosition } from './barcode_reader';
-
-// const ALPHABETH_STRING = '0123456789-$:/.+ABCD';
-const ALPHABET = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68];
-const CHARACTER_ENCODINGS =
- [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018,
- 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E];
-const START_END = [0x01A, 0x029, 0x00B, 0x00E];
-const MIN_ENCODED_CHARS = 4;
-const MAX_ACCEPTABLE = 2.0;
-const PADDING = 1.5;
-
-interface ThresholdSize {
- size: number,
- counts: number,
- min: number,
- max: number,
-};
-
-interface Threshold {
- space: {
- narrow: ThresholdSize,
- wide: ThresholdSize,
- },
- bar: {
- narrow: ThresholdSize,
- wide: ThresholdSize,
- },
-};
-
-class NewCodabarReader extends BarcodeReader {
- _counters: Array = [];
- FORMAT = 'codabar';
-
- protected _computeAlternatingThreshold(offset: number, end: number) {
- let min = Number.MAX_VALUE;
- let max = 0;
- let counter = 0;
-
- for (let i = offset; i < end; i += 2) {
- counter = this._counters[i];
- if (counter > max) {
- max = counter;
- }
- if (counter < min) {
- min = counter;
- }
- }
-
- return ((min + max) / 2.0) | 0;
- };
-
- protected _toPattern(offset: number) {
- const numCounters = 7;
- const end = offset + numCounters;
-
- if (end > this._counters.length) {
- return -1;
- }
-
- const barThreshold = this._computeAlternatingThreshold(offset, end);
- const spaceThreshold = this._computeAlternatingThreshold(offset + 1, end);
-
- let bitmask = 1 << (numCounters - 1);
- let threshold = 0;
- let pattern = 0;
-
- for (let i = 0; i < numCounters; i++) {
- threshold = (i & 1) === 0 ? barThreshold : spaceThreshold;
- if (this._counters[offset + i] > threshold) {
- pattern |= bitmask;
- }
- bitmask >>= 1;
- }
-
- return pattern;
- };
-
- protected _isStartEnd(pattern: number) {
- for (let i = 0; i < START_END.length; i++) {
- if (START_END[i] === pattern) {
- return true;
- }
- }
- return false;
- };
-
- protected _sumCounters(start: number, end: number) {
- let sum = 0;
-
- for (let i = start; i < end; i++) {
- sum += this._counters[i];
- }
- return sum;
- };
-
- protected _findStart(): BarcodePosition | null {
- let start = this._nextUnset(this._row);
- let end = start;
-
- for (let i = 1; i < this._counters.length; i++) {
- const pattern = this._toPattern(i);
- if (pattern !== -1 && this._isStartEnd(pattern)) {
- // TODO: Look for whitespace ahead
- start += this._sumCounters(0, i);
- end = start + this._sumCounters(i, i + 8);
- return {
- start: start,
- end: end,
- startCounter: i,
- endCounter: i + 8,
- };
- }
- }
- return null;
- }
-
- protected _patternToChar(pattern: number) {
- for (let i = 0; i < CHARACTER_ENCODINGS.length; i++) {
- if (CHARACTER_ENCODINGS[i] === pattern) {
- return String.fromCharCode(ALPHABET[i]);
- }
- }
- return null;
- };
-
- protected _calculatePatternLength(offset: number) {
- let sum = 0;
-
- for (let i = offset; i < offset + 7; i++) {
- sum += this._counters[i];
- }
-
- return sum;
- };
-
- protected _verifyWhitespace(startCounter: number, endCounter: number) {
- if ((startCounter - 1 <= 0)
- || this._counters[startCounter - 1] >= (this._calculatePatternLength(startCounter) / 2.0)) {
- if ((endCounter + 8 >= this._counters.length)
- || this._counters[endCounter + 7] >= (this._calculatePatternLength(endCounter) / 2.0)) {
- return true;
- }
- }
- return false;
- };
-
- protected _charToPattern(char: string) {
- const charCode = char.charCodeAt(0);
-
- for (let i = 0; i < ALPHABET.length; i++) {
- if (ALPHABET[i] === charCode) {
- return CHARACTER_ENCODINGS[i];
- }
- }
- return 0x0;
- };
-
- protected _thresholdResultPattern(result: ReadonlyArray, startCounter: number) {
- const categorization: Threshold = {
- space: {
- narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE },
- wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE },
- },
- bar: {
- narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE },
- wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE },
- },
- };
- let pos = startCounter;
- let pattern: number;
-
- for (let i = 0; i < result.length; i++) {
- pattern = this._charToPattern(result[i]);
- for (let j = 6; j >= 0; j--) {
- const kind = (j & 1) === 2 ? categorization.bar : categorization.space;
- const cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;
- cat.size += this._counters[pos + j];
- cat.counts++;
- pattern >>= 1;
- }
- pos += 8;
- }
-
- (['space', 'bar'] as const).forEach(function (key) {
- const newkind = categorization[key];
- newkind.wide.min =
- Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2);
- newkind.narrow.max = Math.ceil(newkind.wide.min);
- newkind.wide.max = Math.ceil((newkind.wide.size * MAX_ACCEPTABLE + PADDING) / newkind.wide.counts);
- });
-
- return categorization;
- };
-
- protected _validateResult(result: ReadonlyArray, startCounter: number) {
- const thresholds = this._thresholdResultPattern(result, startCounter);
- let pos = startCounter;
- let pattern: number;
-
- for (let i = 0; i < result.length; i++) {
- pattern = this._charToPattern(result[i]);
- for (let j = 6; j >= 0; j--) {
- const kind = (j & 1) === 0 ? thresholds.bar : thresholds.space;
- const cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;
- const size = this._counters[pos + j];
- if (size < cat.min || size > cat.max) {
- return false;
- }
- pattern >>= 1;
- }
- pos += 8;
- }
- return true;
- };
-
- public decode(row?: Array, start?: BarcodePosition | number | null): Barcode | null {
-
- this._counters = this._fillCounters();
- start = this._findStart();
- if (!start) {
- return null;
- }
- let nextStart = start.startCounter as number;
-
- const result: Array = [];
- let pattern: number;
- do {
- pattern = this._toPattern(nextStart);
- if (pattern < 0) {
- return null;
- }
- const decodedChar = this._patternToChar(pattern);
- if (decodedChar === null) {
- return null;
- }
- result.push(decodedChar);
- nextStart += 8;
- if (result.length > 1 && this._isStartEnd(pattern)) {
- break;
- }
- } while (nextStart < this._counters.length);
-
- // verify end
- if ((result.length - 2) < MIN_ENCODED_CHARS || !this._isStartEnd(pattern)) {
- return null;
- }
-
- // verify end white space
- if (!this._verifyWhitespace(start.startCounter as number, nextStart - 8)) {
- return null;
- }
-
- if (!this._validateResult(result, start.startCounter as number)) {
- return null;
- }
-
- nextStart = nextStart > this._counters.length ? this._counters.length : nextStart;
- const end = start.start + this._sumCounters(start.startCounter as number, nextStart - 8);
-
- return {
- code: result.join(''),
- start: start.start,
- end: end,
- startInfo: start,
- decodedCodes: result,
- format: this.FORMAT, // TODO: i think it should not be required to return format from this, as barcode_reader force sets the format anyway
- };
- };
-}
-
-export default NewCodabarReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/code_128_reader.ts b/quagga2/quagga2-1.12.1/src/reader/code_128_reader.ts
deleted file mode 100644
index 18a6e70..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/code_128_reader.ts
+++ /dev/null
@@ -1,464 +0,0 @@
-import BarcodeReader, { BarcodeCorrection, BarcodePosition, Barcode, BarcodeInfo } from './barcode_reader';
-
-class Code128Reader extends BarcodeReader {
- CODE_SHIFT = 98;
- CODE_C = 99;
- CODE_B = 100;
- CODE_A = 101;
- FNC1 = 102;
- START_CODE_A = 103;
- START_CODE_B = 104;
- START_CODE_C = 105;
- STOP_CODE = 106;
- // ASCII 29 is the Group Separator character used to represent FNC1 in GS1-128 barcodes
- FNC1_CHAR = String.fromCharCode(29);
- CODE_PATTERN = [
- [2, 1, 2, 2, 2, 2],
- [2, 2, 2, 1, 2, 2],
- [2, 2, 2, 2, 2, 1],
- [1, 2, 1, 2, 2, 3],
- [1, 2, 1, 3, 2, 2],
- [1, 3, 1, 2, 2, 2],
- [1, 2, 2, 2, 1, 3],
- [1, 2, 2, 3, 1, 2],
- [1, 3, 2, 2, 1, 2],
- [2, 2, 1, 2, 1, 3],
- [2, 2, 1, 3, 1, 2],
- [2, 3, 1, 2, 1, 2],
- [1, 1, 2, 2, 3, 2],
- [1, 2, 2, 1, 3, 2],
- [1, 2, 2, 2, 3, 1],
- [1, 1, 3, 2, 2, 2],
- [1, 2, 3, 1, 2, 2],
- [1, 2, 3, 2, 2, 1],
- [2, 2, 3, 2, 1, 1],
- [2, 2, 1, 1, 3, 2],
- [2, 2, 1, 2, 3, 1],
- [2, 1, 3, 2, 1, 2],
- [2, 2, 3, 1, 1, 2],
- [3, 1, 2, 1, 3, 1],
- [3, 1, 1, 2, 2, 2],
- [3, 2, 1, 1, 2, 2],
- [3, 2, 1, 2, 2, 1],
- [3, 1, 2, 2, 1, 2],
- [3, 2, 2, 1, 1, 2],
- [3, 2, 2, 2, 1, 1],
- [2, 1, 2, 1, 2, 3],
- [2, 1, 2, 3, 2, 1],
- [2, 3, 2, 1, 2, 1],
- [1, 1, 1, 3, 2, 3],
- [1, 3, 1, 1, 2, 3],
- [1, 3, 1, 3, 2, 1],
- [1, 1, 2, 3, 1, 3],
- [1, 3, 2, 1, 1, 3],
- [1, 3, 2, 3, 1, 1],
- [2, 1, 1, 3, 1, 3],
- [2, 3, 1, 1, 1, 3],
- [2, 3, 1, 3, 1, 1],
- [1, 1, 2, 1, 3, 3],
- [1, 1, 2, 3, 3, 1],
- [1, 3, 2, 1, 3, 1],
- [1, 1, 3, 1, 2, 3],
- [1, 1, 3, 3, 2, 1],
- [1, 3, 3, 1, 2, 1],
- [3, 1, 3, 1, 2, 1],
- [2, 1, 1, 3, 3, 1],
- [2, 3, 1, 1, 3, 1],
- [2, 1, 3, 1, 1, 3],
- [2, 1, 3, 3, 1, 1],
- [2, 1, 3, 1, 3, 1],
- [3, 1, 1, 1, 2, 3],
- [3, 1, 1, 3, 2, 1],
- [3, 3, 1, 1, 2, 1],
- [3, 1, 2, 1, 1, 3],
- [3, 1, 2, 3, 1, 1],
- [3, 3, 2, 1, 1, 1],
- [3, 1, 4, 1, 1, 1],
- [2, 2, 1, 4, 1, 1],
- [4, 3, 1, 1, 1, 1],
- [1, 1, 1, 2, 2, 4],
- [1, 1, 1, 4, 2, 2],
- [1, 2, 1, 1, 2, 4],
- [1, 2, 1, 4, 2, 1],
- [1, 4, 1, 1, 2, 2],
- [1, 4, 1, 2, 2, 1],
- [1, 1, 2, 2, 1, 4],
- [1, 1, 2, 4, 1, 2],
- [1, 2, 2, 1, 1, 4],
- [1, 2, 2, 4, 1, 1],
- [1, 4, 2, 1, 1, 2],
- [1, 4, 2, 2, 1, 1],
- [2, 4, 1, 2, 1, 1],
- [2, 2, 1, 1, 1, 4],
- [4, 1, 3, 1, 1, 1],
- [2, 4, 1, 1, 1, 2],
- [1, 3, 4, 1, 1, 1],
- [1, 1, 1, 2, 4, 2],
- [1, 2, 1, 1, 4, 2],
- [1, 2, 1, 2, 4, 1],
- [1, 1, 4, 2, 1, 2],
- [1, 2, 4, 1, 1, 2],
- [1, 2, 4, 2, 1, 1],
- [4, 1, 1, 2, 1, 2],
- [4, 2, 1, 1, 1, 2],
- [4, 2, 1, 2, 1, 1],
- [2, 1, 2, 1, 4, 1],
- [2, 1, 4, 1, 2, 1],
- [4, 1, 2, 1, 2, 1],
- [1, 1, 1, 1, 4, 3],
- [1, 1, 1, 3, 4, 1],
- [1, 3, 1, 1, 4, 1],
- [1, 1, 4, 1, 1, 3],
- [1, 1, 4, 3, 1, 1],
- [4, 1, 1, 1, 1, 3],
- [4, 1, 1, 3, 1, 1],
- [1, 1, 3, 1, 4, 1],
- [1, 1, 4, 1, 3, 1],
- [3, 1, 1, 1, 4, 1],
- [4, 1, 1, 1, 3, 1],
- [2, 1, 1, 4, 1, 2],
- [2, 1, 1, 2, 1, 4],
- [2, 1, 1, 2, 3, 2],
- [2, 3, 3, 1, 1, 1, 2],
- ];
- SINGLE_CODE_ERROR = 0.64;
- AVG_CODE_ERROR = 0.30;
- FORMAT = 'code_128';
- MODULE_INDICES = { bar: [0, 2, 4], space: [1, 3, 5] };
-
- protected _decodeCode(start: number, correction?: BarcodeCorrection): BarcodeInfo | null {
- const bestMatch = {
- error: Number.MAX_VALUE,
- code: -1,
- start: start,
- end: start,
- correction: {
- bar: 1,
- space: 1,
- },
- };
- let counter = [0, 0, 0, 0, 0, 0];
- const offset = start;
- let isWhite = !this._row[offset];
- let counterPos = 0;
-
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- if (correction) {
- this._correct(counter, correction);
- }
- for (let code = 0; code < this.CODE_PATTERN.length; code++) {
- const error = this._matchPattern(counter, this.CODE_PATTERN[code]);
- if (error < bestMatch.error) {
- bestMatch.code = code;
- bestMatch.error = error;
- }
- }
- bestMatch.end = i;
- if (bestMatch.code === -1 || bestMatch.error > this.AVG_CODE_ERROR) {
- return null;
- }
- if (this.CODE_PATTERN[bestMatch.code]) {
- bestMatch.correction.bar = this.calculateCorrection(
- this.CODE_PATTERN[bestMatch.code], counter,
- this.MODULE_INDICES.bar);
- bestMatch.correction.space = this.calculateCorrection(
- this.CODE_PATTERN[bestMatch.code], counter,
- this.MODULE_INDICES.space);
- }
- return bestMatch;
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- };
-
- protected _correct(counter: Array, correction: BarcodeCorrection) {
- this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar);
- this._correctBars(counter, correction.space, this.MODULE_INDICES.space);
- };
-
- // TODO: _findStart and decodeCode share similar code, can we re-use some?
- protected _findStart(): BarcodeInfo | null {
- const counter = [0, 0, 0, 0, 0, 0];
- const offset = this._nextSet(this._row);
- const bestMatch = {
- error: Number.MAX_VALUE,
- code: -1,
- start: 0,
- end: 0,
- correction: {
- bar: 1,
- space: 1,
- },
- };
- let isWhite = false;
- let counterPos = 0;
-
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- const sum = counter.reduce((prev, next) => prev + next, 0);
- for (let code = this.START_CODE_A; code <= this.START_CODE_C; code++) {
- const error = this._matchPattern(counter, this.CODE_PATTERN[code]);
- if (error < bestMatch.error) {
- bestMatch.code = code;
- bestMatch.error = error;
- }
- }
- if (bestMatch.error < this.AVG_CODE_ERROR) {
- bestMatch.start = i - sum;
- bestMatch.end = i;
- bestMatch.correction.bar = this.calculateCorrection(
- this.CODE_PATTERN[bestMatch.code], counter,
- this.MODULE_INDICES.bar);
- bestMatch.correction.space = this.calculateCorrection(
- this.CODE_PATTERN[bestMatch.code], counter,
- this.MODULE_INDICES.space);
- return bestMatch;
- }
-
- for (let j = 0; j < 4; j++) {
- counter[j] = counter[j + 2];
- }
- counter[4] = 0;
- counter[5] = 0;
- counterPos--;
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- };
-
- public decode(row?: Array, start?: BarcodePosition): Barcode | null {
- const startInfo = this._findStart();
- if (startInfo === null) {
- return null;
- }
- // var self = this,
- // done = false,
- // result = [],
- // multiplier = 0,
- // checksum = 0,
- // codeset,
- // rawResult = [],
- // decodedCodes = [],
- // shiftNext = false,
- // unshift,
- // removeLastCharacter = true;
-
- let code: BarcodeInfo | null = {
- code: startInfo.code,
- start: startInfo.start,
- end: startInfo.end,
- correction: {
- bar: startInfo.correction!.bar,
- space: startInfo.correction!.space,
- },
- };
- const decodedCodes = [];
- decodedCodes.push(code);
- let checksum = code.code;
- let codeset = ((c: number) => {
- switch (c) {
- case this.START_CODE_A:
- return this.CODE_A;
- case this.START_CODE_B:
- return this.CODE_B;
- case this.START_CODE_C:
- return this.CODE_C;
- default:
- return null;
- }
- })(code.code);
- let done = false;
- let shiftNext = false;
- let unshift = shiftNext;
- let removeLastCharacter = true;
- let multiplier = 0;
- let rawResult: Array = [];
- let result: Array = []; // TODO: i think this should be string only, but it creates problems if it is
-
- while (!done) {
- unshift = shiftNext;
- shiftNext = false;
- code = this._decodeCode(code!.end, code!.correction);
- if (code !== null) {
- if (code.code !== this.STOP_CODE) {
- removeLastCharacter = true;
- }
-
- if (code.code !== this.STOP_CODE) {
- rawResult.push(code.code);
- multiplier++;
- checksum += multiplier * code.code;
- }
- decodedCodes.push(code);
-
- switch (codeset) {
- case this.CODE_A:
- if (code.code < 64) {
- result.push(String.fromCharCode(32 + code.code));
- } else if (code.code < 96) {
- result.push(String.fromCharCode(code.code - 64));
- } else {
- if (code.code !== this.STOP_CODE) {
- removeLastCharacter = false;
- }
- switch (code.code) {
- case this.CODE_SHIFT:
- shiftNext = true;
- codeset = this.CODE_B;
- break;
- case this.CODE_B:
- codeset = this.CODE_B;
- break;
- case this.CODE_C:
- codeset = this.CODE_C;
- break;
- case this.FNC1:
- result.push(this.FNC1_CHAR);
- break;
- case this.STOP_CODE:
- done = true;
- break;
- }
- }
- break;
- case this.CODE_B:
- if (code.code < 96) {
- result.push(String.fromCharCode(32 + code.code));
- } else {
- if (code.code !== this.STOP_CODE) {
- removeLastCharacter = false;
- }
- switch (code.code) {
- case this.CODE_SHIFT:
- shiftNext = true;
- codeset = this.CODE_A;
- break;
- case this.CODE_A:
- codeset = this.CODE_A;
- break;
- case this.CODE_C:
- codeset = this.CODE_C;
- break;
- case this.FNC1:
- result.push(this.FNC1_CHAR);
- break;
- case this.STOP_CODE:
- done = true;
- break;
- }
- }
- break;
- case this.CODE_C:
- if (code.code < 100) {
- result.push(code.code < 10 ? '0' + code.code : code.code);
- } else {
- if (code.code !== this.STOP_CODE) {
- removeLastCharacter = false;
- }
- switch (code.code) {
- case this.CODE_A:
- codeset = this.CODE_A;
- break;
- case this.CODE_B:
- codeset = this.CODE_B;
- break;
- case this.FNC1:
- result.push(this.FNC1_CHAR);
- break;
- case this.STOP_CODE:
- done = true;
- break;
- }
- }
- break;
- }
- } else {
- done = true;
- }
- if (unshift) {
- codeset = codeset === this.CODE_A ? this.CODE_B : this.CODE_A;
- }
- }
-
- if (code === null) {
- return null;
- }
-
- code.end = this._nextUnset(this._row, code.end);
- if (!this._verifyTrailingWhitespace(code)){
- return null;
- }
-
- checksum -= multiplier * rawResult[rawResult.length - 1];
- if (checksum % 103 !== rawResult[rawResult.length - 1]) {
- return null;
- }
-
- if (!result.length) {
- return null;
- }
-
- // remove last code from result (checksum)
- if (removeLastCharacter) {
- result.splice(result.length - 1, 1);
- }
-
-
- return {
- code: result.join(''),
- start: startInfo.start,
- end: code.end,
- codeset: codeset as number,
- startInfo: startInfo,
- decodedCodes: decodedCodes,
- endInfo: code,
- format: this.FORMAT,
- };
- };
-
- protected _verifyTrailingWhitespace(endInfo: BarcodeInfo): BarcodeInfo | null {
-
- var self = this,
- trailingWhitespaceEnd;
-
- trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);
- if (trailingWhitespaceEnd < self._row.length) {
- if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {
- return endInfo;
- }
- }
- return null;
- };
-
-
- public calculateCorrection(expected: ReadonlyArray, normalized: ReadonlyArray, indices: ReadonlyArray): number {
- var length = indices.length,
- sumNormalized = 0,
- sumExpected = 0;
-
- while (length--) {
- sumExpected += expected[indices[length]];
- sumNormalized += normalized[indices[length]];
- }
- return sumExpected / sumNormalized;
- }
-}
-
-export default Code128Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/code_32_reader.ts b/quagga2/quagga2-1.12.1/src/reader/code_32_reader.ts
deleted file mode 100644
index 4ae2524..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/code_32_reader.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import Code39Reader from './code_39_reader';
-
-const patterns = {
- AEIO: /[AEIO]/g,
- AZ09: /[A-Z0-9]/,
-};
-
-const code32set = '0123456789BCDFGHJKLMNPQRSTUVWXYZ';
-
-class Code32Reader extends Code39Reader {
- FORMAT = 'code_32_reader';
-
- protected _decodeCode32(code: string) {
- if (/[^0-9BCDFGHJKLMNPQRSTUVWXYZ]/.test(code)) {
- return null;
- }
- let res = 0;
- for (let i = 0; i < code.length; i++) {
- res = res * 32 + code32set.indexOf(code[i]);
- }
- let code32 = `${res}`;
- if (code32.length < 9) {
- code32 = ('000000000' + code32).slice(-9);
- }
- return 'A' + code32;
- }
-
- // TODO (this was todo in original repo, no text was there. sorry.)
- protected _checkChecksum(code: string): boolean {
- return !!code;
- }
-
- public decode() {
- const result = super.decode();
- if (!result) {
- return null;
- }
-
- let code = result.code;
-
- if (!code) {
- return null;
- }
-
- code = code.replace(patterns.AEIO, '');
-
- if (!this._checkChecksum(code)) {
- return null;
- }
-
- const code32 = this._decodeCode32(code);
-
- if (!code32) {
- return null;
- }
-
- result.code = code32;
- return result;
- }
-}
-
-export default Code32Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/code_39_reader.ts b/quagga2/quagga2-1.12.1/src/reader/code_39_reader.ts
deleted file mode 100644
index bade407..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/code_39_reader.ts
+++ /dev/null
@@ -1,171 +0,0 @@
-/* eslint-disable class-methods-use-this */
-import ArrayHelper from '../common/array_helper';
-import BarcodeReader, { type BarcodePosition, type Barcode } from './barcode_reader';
-
-const ALPHABETH_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%';
-const ALPHABET = new Uint16Array([...ALPHABETH_STRING].map((char) => char.charCodeAt(0)));
-const CHARACTER_ENCODINGS = new Uint16Array([
- 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049,
- 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106,
- 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A,
-]);
-const ASTERISK = 0x094;
-
-class Code39Reader extends BarcodeReader {
- FORMAT = 'code_39';
-
- protected _findStart(): BarcodePosition | null {
- const offset = this._nextSet(this._row);
- let patternStart = offset;
- const counter = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 0]);
- let counterPos = 0;
- let isWhite = false;
-
- for (let i = offset; i < this._row.length; i++) {
- // eslint-disable-next-line no-bitwise
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- // find start pattern
- if (this._toPattern(counter) === ASTERISK) {
- const whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - ((i - patternStart) / 4)));
- if (this._matchRange(whiteSpaceMustStart, patternStart, 0)) {
- return {
- start: patternStart,
- end: i,
- };
- }
- }
-
- patternStart += counter[0] + counter[1];
- for (let j = 0; j < 7; j++) {
- counter[j] = counter[j + 2];
- }
- counter[7] = 0;
- counter[8] = 0;
- counterPos--;
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- }
-
- protected _toPattern(counters: Uint16Array): number {
- const numCounters = counters.length;
- let maxNarrowWidth = 0;
- let numWideBars = numCounters;
- let wideBarWidth = 0;
-
- while (numWideBars > 3) {
- maxNarrowWidth = this._findNextWidth(counters, maxNarrowWidth);
- numWideBars = 0;
- let pattern = 0;
- for (let i = 0; i < numCounters; i++) {
- if (counters[i] > maxNarrowWidth) {
- // eslint-disable-next-line no-bitwise
- pattern |= 1 << (numCounters - 1 - i);
- numWideBars++;
- wideBarWidth += counters[i];
- }
- }
-
- if (numWideBars === 3) {
- for (let i = 0; i < numCounters && numWideBars > 0; i++) {
- if (counters[i] > maxNarrowWidth) {
- numWideBars--;
- if ((counters[i] * 2) >= wideBarWidth) {
- return -1;
- }
- }
- }
- return pattern;
- }
- }
- return -1;
- }
-
- protected _findNextWidth(counters: Uint16Array, current: number): number {
- let minWidth = Number.MAX_VALUE;
-
- for (let i = 0; i < counters.length; i++) {
- if (counters[i] < minWidth && counters[i] > current) {
- minWidth = counters[i];
- }
- }
-
- return minWidth;
- }
-
- protected _patternToChar(pattern: number): string | null {
- for (let i = 0; i < CHARACTER_ENCODINGS.length; i++) {
- if (CHARACTER_ENCODINGS[i] === pattern) {
- return String.fromCharCode(ALPHABET[i]);
- }
- }
- return null;
- }
-
- protected _verifyTrailingWhitespace(lastStart: number, nextStart: number, counters: Uint16Array): boolean {
- const patternSize = ArrayHelper.sum(counters);
-
- const trailingWhitespaceEnd = nextStart - lastStart - patternSize;
- if ((trailingWhitespaceEnd * 3) >= patternSize) {
- return true;
- }
- return false;
- }
-
- public decode(): Barcode | null {
- let counters = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 0]);
- const result: Array = [];
- const start = this._findStart();
-
- if (!start) {
- return null;
- }
- let nextStart = this._nextSet(this._row, start.end);
-
- let decodedChar;
- let lastStart: number;
- do {
- counters = this._toCounters(nextStart, counters) as Uint16Array;
- const pattern = this._toPattern(counters);
- if (pattern < 0) {
- return null;
- }
- decodedChar = this._patternToChar(pattern);
- if (decodedChar === null) {
- return null;
- }
- result.push(decodedChar);
- lastStart = nextStart;
- nextStart += ArrayHelper.sum(counters);
- nextStart = this._nextSet(this._row, nextStart);
- } while (decodedChar !== '*');
- result.pop();
-
- if (!result.length) {
- return null;
- }
-
- if (!this._verifyTrailingWhitespace(lastStart, nextStart, counters)) {
- return null;
- }
-
- return {
- code: result.join(''),
- start: start.start,
- end: nextStart,
- startInfo: start,
- decodedCodes: result,
- format: this.FORMAT,
- };
- }
-}
-
-export default Code39Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/code_39_vin_reader.ts b/quagga2/quagga2-1.12.1/src/reader/code_39_vin_reader.ts
deleted file mode 100644
index fe93492..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/code_39_vin_reader.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/* eslint-disable class-methods-use-this */
-import { Barcode } from './barcode_reader';
-import Code39Reader from './code_39_reader';
-
-const patterns = {
- IOQ: /[IOQ]/g,
- AZ09: /[A-Z0-9]{17}/,
-};
-
-class Code39VINReader extends Code39Reader {
- FORMAT = 'code_39_vin';
-
- // TODO (this was todo in original repo, no text was there. sorry.)
- protected _checkChecksum(code: string): boolean {
- return !!code;
- }
-
- // Cribbed from:
- // https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java
- public decode(): Barcode | null {
- const result = super.decode();
- if (!result) {
- return null;
- }
-
- let { code } = result;
-
- if (!code) {
- return null;
- }
-
- code = code.replace(patterns.IOQ, '');
-
- if (!code.match(patterns.AZ09)) {
- if (typeof ENV !== 'undefined' && ENV.development) {
- console.log('Failed AZ09 pattern code:', code);
- }
- return null;
- }
-
- if (!this._checkChecksum(code)) {
- return null;
- }
-
- result.code = code;
- return result;
- }
-}
-
-export default Code39VINReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/code_93_reader.ts b/quagga2/quagga2-1.12.1/src/reader/code_93_reader.ts
deleted file mode 100644
index 849bb16..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/code_93_reader.ts
+++ /dev/null
@@ -1,233 +0,0 @@
-import BarcodeReader, { BarcodePosition, Barcode } from './barcode_reader';
-import ArrayHelper from '../common/array_helper';
-
-const ALPHABETH_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*';
-const ALPHABET = new Uint16Array([...ALPHABETH_STRING].map(char => char.charCodeAt(0)));
-const CHARACTER_ENCODINGS = new Uint16Array([
- 0x114, 0x148, 0x144, 0x142, 0x128, 0x124, 0x122, 0x150, 0x112, 0x10A,
- 0x1A8, 0x1A4, 0x1A2, 0x194, 0x192, 0x18A, 0x168, 0x164, 0x162, 0x134,
- 0x11A, 0x158, 0x14C, 0x146, 0x12C, 0x116, 0x1B4, 0x1B2, 0x1AC, 0x1A6,
- 0x196, 0x19A, 0x16C, 0x166, 0x136, 0x13A, 0x12E, 0x1D4, 0x1D2, 0x1CA,
- 0x16E, 0x176, 0x1AE, 0x126, 0x1DA, 0x1D6, 0x132, 0x15E,
-]);
-const ASTERISK = 0x15E;
-
-class Code93Reader extends BarcodeReader {
- FORMAT = 'code_93';
- protected _patternToChar(pattern: number): string | null {
- for (let i = 0; i < CHARACTER_ENCODINGS.length; i++) {
- if (CHARACTER_ENCODINGS[i] === pattern) {
- return String.fromCharCode(ALPHABET[i]);
- }
- }
- return null;
- };
-
- protected _toPattern(counters: Uint16Array): number {
- const numCounters = counters.length;
- const sum = counters.reduce((prev, next) => prev + next, 0);
- let pattern = 0;
-
- for (let i = 0; i < numCounters; i++) {
- let normalized = Math.round(counters[i] * 9 / sum);
- if (normalized < 1 || normalized > 4) {
- return -1;
- }
- if ((i & 1) === 0) {
- for (let j = 0; j < normalized; j++) {
- pattern = (pattern << 1) | 1;
- }
- } else {
- pattern <<= normalized;
- }
- }
- return pattern;
- };
-
- protected _findStart(): BarcodePosition | null {
- const offset = this._nextSet(this._row);
- let patternStart = offset;
- const counter = new Uint16Array([0, 0, 0, 0, 0, 0]);
- let counterPos = 0;
- let isWhite = false;
-
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- // find start pattern
- if (this._toPattern(counter) === ASTERISK) {
- const whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - ((i - patternStart) / 4)));
- if (this._matchRange(whiteSpaceMustStart, patternStart, 0)) {
- return {
- start: patternStart,
- end: i,
- };
- }
- }
-
- patternStart += counter[0] + counter[1];
- for (let j = 0; j < 4; j++) {
- counter[j] = counter[j + 2];
- }
- counter[4] = 0;
- counter[5] = 0;
- counterPos--;
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- };
-
- protected _verifyEnd(lastStart: number, nextStart: number): boolean {
- if (lastStart === nextStart || !this._row[nextStart]) {
- return false;
- }
- return true;
- };
-
- protected _decodeExtended(charArray: Array): string[] | null {
- const length = charArray.length;
- const result: Array = [];
- for (let i = 0; i < length; i++) {
- const char = charArray[i];
- if (char >= 'a' && char <= 'd') {
- if (i > (length - 2)) {
- return null;
- }
- const nextChar = charArray[++i];
- const nextCharCode = nextChar.charCodeAt(0);
- let decodedChar;
- switch (char) {
- case 'a':
- if (nextChar >= 'A' && nextChar <= 'Z') {
- decodedChar = String.fromCharCode(nextCharCode - 64);
- } else {
- return null;
- }
- break;
- case 'b':
- if (nextChar >= 'A' && nextChar <= 'E') {
- decodedChar = String.fromCharCode(nextCharCode - 38);
- } else if (nextChar >= 'F' && nextChar <= 'J') {
- decodedChar = String.fromCharCode(nextCharCode - 11);
- } else if (nextChar >= 'K' && nextChar <= 'O') {
- decodedChar = String.fromCharCode(nextCharCode + 16);
- } else if (nextChar >= 'P' && nextChar <= 'S') {
- decodedChar = String.fromCharCode(nextCharCode + 43);
- } else if (nextChar >= 'T' && nextChar <= 'Z') {
- decodedChar = String.fromCharCode(127);
- } else {
- return null;
- }
- break;
- case 'c':
- if (nextChar >= 'A' && nextChar <= 'O') {
- decodedChar = String.fromCharCode(nextCharCode - 32);
- } else if (nextChar === 'Z') {
- decodedChar = ':';
- } else {
- return null;
- }
- break;
- case 'd':
- if (nextChar >= 'A' && nextChar <= 'Z') {
- decodedChar = String.fromCharCode(nextCharCode + 32);
- } else {
- return null;
- }
- break;
- default:
- console.warn('* code_93_reader _decodeExtended hit default case, this may be an error', decodedChar);
- return null;
- }
- result.push(decodedChar);
- } else {
- result.push(char);
- }
- }
- return result;
- };
-
- protected _matchCheckChar(charArray: Array, index: number, maxWeight: number): boolean {
- const arrayToCheck = charArray.slice(0, index);
- const length = arrayToCheck.length;
- const weightedSums = arrayToCheck.reduce((sum, char, i) => {
- const weight = (((i * -1) + (length - 1)) % maxWeight) + 1;
- const value = ALPHABET.indexOf(char.charCodeAt(0));
- return sum + (weight * value);
- }, 0);
-
- const checkChar = ALPHABET[(weightedSums % 47)];
- return checkChar === charArray[index].charCodeAt(0);
- };
-
- protected _verifyChecksums(charArray: Array): boolean {
- return this._matchCheckChar(charArray, charArray.length - 2, 20)
- && this._matchCheckChar(charArray, charArray.length - 1, 15);
- };
-
- public decode(row?: Array, start?: BarcodePosition | number | null): Barcode | null {
- start = this._findStart();
- if (!start) {
- return null;
- }
-
- let counters = new Uint16Array([0, 0, 0, 0, 0, 0]);
- let result: Array | null = [];
- let nextStart = this._nextSet(this._row, start.end);
- let lastStart;
- let decodedChar: string | null;
- do {
- counters = this._toCounters(nextStart, counters) as Uint16Array;
- const pattern = this._toPattern(counters);
- if (pattern < 0) {
- return null;
- }
- decodedChar = this._patternToChar(pattern);
- if (decodedChar === null) {
- return null;
- }
- result.push(decodedChar);
- lastStart = nextStart;
- nextStart += ArrayHelper.sum(counters);
- nextStart = this._nextSet(this._row, nextStart);
- } while (decodedChar !== '*');
- result.pop();
-
- if (!result.length) {
- return null;
- }
-
- if (!this._verifyEnd(lastStart, nextStart)) {
- return null;
- }
-
- if (!this._verifyChecksums(result)) {
- return null;
- }
-
- result = result.slice(0, result.length - 2);
- // yes, this is an assign inside an if.
- if ((result = this._decodeExtended(result)) === null) {
- return null;
- }
-
- return {
- code: result.join(''),
- start: start.start,
- end: nextStart,
- startInfo: start,
- decodedCodes: result,
- format: this.FORMAT,
- };
-
- }
-}
-
-export default Code93Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/ean_2_reader.ts b/quagga2/quagga2-1.12.1/src/reader/ean_2_reader.ts
deleted file mode 100644
index ece711f..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/ean_2_reader.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import EANReader, { CODE_G_START } from './ean_reader';
-import { BarcodePosition, Barcode, BarcodeInfo } from './barcode_reader';
-
-
-class EAN2Reader extends EANReader {
- FORMAT = 'ean_2';
- public decode(row?: Array, start?: number): Barcode | null {
- if (row) {
- this._row = row;
- }
-
- let codeFrequency = 0;
- let offset = start;
- const end = this._row.length;
- const result = [];
- const decodedCodes = [];
- let code: BarcodeInfo | null = null;
-
- if (offset === undefined){
- return null;
- }
-
- for (let i = 0; i < 2 && offset < end; i++) {
- code = this._decodeCode(offset);
- if (!code) {
- return null;
- }
- decodedCodes.push(code);
- result.push(code.code % 10);
- if (code.code >= CODE_G_START) {
- codeFrequency |= 1 << (1 - i);
- }
- if (i !== 1) {
- offset = this._nextSet(this._row, code.end);
- offset = this._nextUnset(this._row, offset);
- }
- }
-
- if (result.length !== 2 || (parseInt(result.join('')) % 4) !== codeFrequency) {
- return null;
- }
-
- const startInfo = this._findStart();
-
- return {
- code: result.join(''),
- decodedCodes,
- end: (code as BarcodeInfo).end,
- format: this.FORMAT,
- startInfo: startInfo as BarcodePosition,
- start: (startInfo as BarcodePosition).start,
- };
- }
-};
-
-export default EAN2Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/ean_5_reader.ts b/quagga2/quagga2-1.12.1/src/reader/ean_5_reader.ts
deleted file mode 100644
index 25efcce..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/ean_5_reader.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import EANReader, { CODE_G_START } from './ean_reader';
-import { Barcode, BarcodePosition, BarcodeInfo } from './barcode_reader';
-
-const CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5];
-
-function determineCheckDigit(codeFrequency: number) {
- for (let i = 0; i < 10; i++) {
- if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) {
- return i;
- }
- }
- return null;
-}
-
-function extensionChecksum(result: Array) {
- const length = result.length;
- let sum = 0;
-
- for (let i = length - 2; i >= 0; i -= 2) {
- sum += result[i];
- }
- sum *= 3;
- for (let i = length - 1; i >= 0; i -= 2) {
- sum += result[i];
- }
- sum *= 3;
- return sum % 10;
-}
-
-class EAN5Reader extends EANReader {
- FORMAT = 'ean_5';
- public decode(row?: Array, start?: number): Barcode | null {
- if (start === undefined) {
- return null;
- }
-
- if (row) {
- this._row = row;
- }
-
- let codeFrequency = 0;
- let offset = start;
- const end = this._row.length;
- let code: BarcodeInfo | null = null;
- const result = [];
- const decodedCodes = [];
-
- for (let i = 0; i < 5 && offset < end; i++) {
- code = this._decodeCode(offset);
- if (!code) {
- return null;
- }
- decodedCodes.push(code);
- result.push(code.code % 10);
- if (code.code >= CODE_G_START) {
- codeFrequency |= 1 << (4 - i);
- }
- if (i !== 4) {
- offset = this._nextSet(this._row, code.end);
- offset = this._nextUnset(this._row, offset);
- }
- }
-
- if (result.length !== 5) {
- return null;
- }
-
- if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) {
- return null;
- }
-
- const startInfo = this._findStart();
-
- return {
- code: result.join(''),
- decodedCodes,
- end: (code as BarcodeInfo).end,
- format: this.FORMAT,
- startInfo: startInfo as BarcodePosition,
- start: (startInfo as BarcodePosition).start,
- };
- }
-};
-
-export default EAN5Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/ean_8_reader.ts b/quagga2/quagga2-1.12.1/src/reader/ean_8_reader.ts
deleted file mode 100644
index 46a1f6e..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/ean_8_reader.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import EANReader, { CODE_G_START, MIDDLE_PATTERN } from './ean_reader';
-import { BarcodePosition, BarcodeInfo } from './barcode_reader';
-
-class EAN8Reader extends EANReader {
- FORMAT = 'ean_8';
- protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null {
- let code: BarcodeInfo | BarcodePosition | null = inCode;
-
- for (let i = 0; i < 4; i++) {
- code = this._decodeCode(code.end, CODE_G_START);
- if (!code) {
- return null;
- }
- result.push((code as BarcodeInfo).code);
- decodedCodes.push(code);
- }
-
- code = this._findPattern(MIDDLE_PATTERN, code.end, true, false);
- if (code === null) {
- return null;
- }
- decodedCodes.push(code);
-
- for (let i = 0; i < 4; i++) {
- code = this._decodeCode(code.end, CODE_G_START);
- if (!code) {
- return null;
- }
- decodedCodes.push(code);
- result.push((code as BarcodeInfo).code);
- }
-
- return code as BarcodeInfo;
- };
-}
-
-export default EAN8Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/ean_reader.ts b/quagga2/quagga2-1.12.1/src/reader/ean_reader.ts
deleted file mode 100644
index 854b96c..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/ean_reader.ts
+++ /dev/null
@@ -1,400 +0,0 @@
-import BarcodeReader, { BarcodeReaderConfig, BarcodeInfo, BarcodePosition, Barcode } from './barcode_reader';
-import merge from 'lodash/merge';
-
-// const CODE_L_START = 0;
-const CODE_G_START = 10;
-export { CODE_G_START };
-const START_PATTERN = [1, 1, 1];
-const MIDDLE_PATTERN = [1, 1, 1, 1, 1];
-export { MIDDLE_PATTERN };
-const EXTENSION_START_PATTERN = [1, 1, 2];
-const CODE_PATTERN = [
- [3, 2, 1, 1],
- [2, 2, 2, 1],
- [2, 1, 2, 2],
- [1, 4, 1, 1],
- [1, 1, 3, 2],
- [1, 2, 3, 1],
- [1, 1, 1, 4],
- [1, 3, 1, 2],
- [1, 2, 1, 3],
- [3, 1, 1, 2],
- [1, 1, 2, 3],
- [1, 2, 2, 2],
- [2, 2, 1, 2],
- [1, 1, 4, 1],
- [2, 3, 1, 1],
- [1, 3, 2, 1],
- [4, 1, 1, 1],
- [2, 1, 3, 1],
- [3, 1, 2, 1],
- [2, 1, 1, 3],
-];
-const CODE_FREQUENCY = [0, 11, 13, 14, 19, 25, 28, 21, 22, 26];
-// const SINGLE_CODE_ERROR = 0.70;
-const AVG_CODE_ERROR = 0.48;
-
-class EANReader extends BarcodeReader {
- FORMAT = 'ean_13';
- SINGLE_CODE_ERROR = 0.70;
- STOP_PATTERN = [1, 1, 1]; // TODO: does this need to be in the class?
-
- constructor(config?: BarcodeReaderConfig, supplements?: Array) {
- super(merge({ supplements: [] }, config), supplements);
- }
-
- protected _findPattern(pattern: ReadonlyArray, offset: number, isWhite: boolean, tryHarder: boolean): BarcodePosition | null {
- const counter = new Array(pattern.length).fill(0);
- const bestMatch: BarcodePosition = {
- error: Number.MAX_VALUE,
- start: 0,
- end: 0
- };
- const epsilon = AVG_CODE_ERROR;
- // console.warn('* findPattern', pattern, offset, isWhite, tryHarder, epsilon);
- let counterPos = 0;
- if (!offset) {
- offset = this._nextSet(this._row);
- }
- let found = false;
- for (let i = offset; i < this._row.length; i++) {
- // console.warn(`* loop i=${offset} len=${this._row.length} isWhite=${isWhite} counterPos=${counterPos}`);
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos] += 1;
- } else {
- if (counterPos === counter.length - 1) {
- const error = this._matchPattern(counter, pattern);
- // console.warn('* matchPattern', error, counter, pattern);
- if (error < epsilon && bestMatch.error && error < bestMatch.error) {
- found = true;
- bestMatch.error = error;
- bestMatch.start = i - counter.reduce((sum, value) => sum + value, 0);
- bestMatch.end = i;
- // console.warn('* return bestMatch', JSON.stringify(bestMatch));
- return bestMatch;
- }
- if (tryHarder) {
- for (let j = 0; j < counter.length - 2; j++) {
- counter[j] = counter[j + 2];
- }
- counter[counter.length - 2] = 0;
- counter[counter.length - 1] = 0;
- counterPos--;
- }
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- if (found) {
- // console.warn('* return bestMatch', JSON.stringify(bestMatch));
- } else {
- // console.warn('* return null');
- }
- return found ? bestMatch : null;
- }
-
- // TODO: findPattern and decodeCode appear to share quite similar code, can it be reduced?
- protected _decodeCode(start: number, coderange?: number): BarcodeInfo | null {
- // console.warn('* decodeCode', start, coderange);
- const counter = [0, 0, 0, 0];
- const offset = start;
- const bestMatch: BarcodeInfo = {
- error: Number.MAX_VALUE,
- code: -1,
- start: start,
- end: start
- };
- const epsilon = AVG_CODE_ERROR;
- let isWhite = !this._row[offset];
- let counterPos = 0;
-
- if (!coderange) {
- // console.warn('* decodeCode before length');
- coderange = CODE_PATTERN.length;
- // console.warn('* decodeCode after length');
- }
-
- let found = false;
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- for (let code = 0; code < coderange; code++) {
- const error = this._matchPattern(counter, CODE_PATTERN[code]);
- bestMatch.end = i;
- if (error < bestMatch.error!) {
- bestMatch.code = code;
- bestMatch.error = error;
- }
- }
- if (bestMatch.error! > epsilon) {
- // console.warn('* return null');
- return null;
- }
- // console.warn('* return bestMatch', JSON.stringify(bestMatch));
- return bestMatch;
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return found ? bestMatch : null;
- }
-
- protected _findStart(): BarcodePosition | null {
- // console.warn('* findStart');
- let offset = this._nextSet(this._row);
- let startInfo: BarcodePosition | null = null;
-
- while (!startInfo) {
- startInfo = this._findPattern(START_PATTERN, offset, false, true);
- // console.warn('* startInfo=', JSON.stringify(startInfo));
- if (!startInfo) {
- return null;
- }
-
- const leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start);
-
- if (leadingWhitespaceStart >= 0) {
- if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {
- // console.warn('* returning startInfo');
- return startInfo;
- }
- }
-
- offset = startInfo.end;
- startInfo = null;
- }
- // console.warn('* returning null');
- return null;
- }
-
- private _calculateFirstDigit(codeFrequency: number): number | null {
- // console.warn('* calculateFirstDigit', codeFrequency);
- for (let i = 0; i < CODE_FREQUENCY.length; i++) {
- if (codeFrequency === CODE_FREQUENCY[i]) {
- // console.warn('* returning', i);
- return i;
- }
- }
- // console.warn('* return null');
- return null;
- }
-
- protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null {
- // console.warn('* decodePayload', inCode, result, decodedCodes);
- let outCode: BarcodeInfo | BarcodePosition | null = { ...inCode };
- let codeFrequency = 0x0;
-
- for (let i = 0; i < 6; i++) {
- outCode = this._decodeCode(outCode.end);
- // console.warn('* decodeCode=', outCode);
- if (!outCode) {
- // console.warn('* return null');
- return null;
- }
- if ((outCode as BarcodeInfo).code >= CODE_G_START) {
- (outCode as BarcodeInfo).code -= CODE_G_START;
- codeFrequency |= 1 << (5 - i);
- } else {
- codeFrequency |= 0 << (5 - i);
- }
- result.push((outCode as BarcodeInfo).code);
- decodedCodes.push(outCode);
- }
-
- const firstDigit = this._calculateFirstDigit(codeFrequency);
- // console.warn('* firstDigit=', firstDigit);
- if (firstDigit === null) {
- // console.warn('* return null');
- return null;
- }
-
- result.unshift(firstDigit);
-
- let middlePattern = this._findPattern(MIDDLE_PATTERN, outCode.end, true, false);
- // console.warn('* findPattern=', JSON.stringify(middlePattern));
-
- if (middlePattern === null || !middlePattern.end) {
- // console.warn('* return null');
- return null;
- }
-
- decodedCodes.push(middlePattern);
-
- for (let i = 0; i < 6; i++) {
- middlePattern = this._decodeCode(middlePattern!.end, CODE_G_START);
- // console.warn('* decodeCode=', JSON.stringify(middlePattern));
-
- if (!middlePattern) {
- // console.warn('* return null');
- return null;
- }
-
- decodedCodes.push(middlePattern);
- result.push((middlePattern as BarcodeInfo).code);
- }
-
- // console.warn('* end code=', JSON.stringify(middlePattern));
- // console.warn('* end result=', JSON.stringify(result));
- // console.warn('* end decodedCodes=', decodedCodes);
- return middlePattern as BarcodeInfo;
- }
-
- protected _verifyTrailingWhitespace(endInfo: BarcodePosition): BarcodePosition | null {
- // console.warn('* verifyTrailingWhitespace', JSON.stringify(endInfo));
- const trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start);
-
- if (trailingWhitespaceEnd < this._row.length) {
- if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {
- // console.warn('* returning', JSON.stringify(endInfo));
- return endInfo;
- }
- }
- // console.warn('* return null');
- return null;
- }
-
- protected _findEnd(offset: number, isWhite: boolean): BarcodePosition | null {
- // console.warn('* findEnd', offset, isWhite);
- const endInfo = this._findPattern(this.STOP_PATTERN, offset, isWhite, false);
-
- return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null;
- }
-
- protected _checksum(result: Array): boolean {
- // console.warn('* _checksum', result);
- let sum = 0;
-
- for (let i = result.length - 2; i >= 0; i -= 2) {
- sum += result[i];
- }
-
- sum *= 3;
-
- for (let i = result.length - 1; i >= 0; i -= 2) {
- sum += result[i];
- }
-
- // console.warn('* end checksum', sum % 10 === 0);
- return sum % 10 === 0;
- }
-
- private _decodeExtensions(offset: number): Barcode | null {
- const start = this._nextSet(this._row, offset);
- const startInfo = this._findPattern(EXTENSION_START_PATTERN, start, false, false);
-
- if (startInfo === null) {
- return null;
- }
-
- // console.warn('* decodeExtensions', this.supplements);
- // console.warn('* there are ', this.supplements.length, ' supplements');
- for (let i = 0; i < this.supplements.length; i++) {
- // console.warn('* extensions loop', i, this.supplements[i], this.supplements[i]._decode);
- try {
- let result = this.supplements[i].decode(this._row, startInfo.end);
- // console.warn('* decode result=', result);
- if (result !== null) {
- return {
- code: result.code,
- start,
- startInfo,
- end: result.end,
- decodedCodes: result.decodedCodes,
- format: this.supplements[i].FORMAT,
- };
- }
- } catch (err) {
- console.error('* decodeExtensions error in ', this.supplements[i], ': ', err);
- }
- }
-
- // console.warn('* end decodeExtensions');
- return null;
- }
-
- public decode(row?: Array, start?: BarcodePosition | number): Barcode | null {
- // console.warn('* decode', row);
- // console.warn('* decode', start);
- const result = new Array();
- const decodedCodes = new Array();
- let resultInfo: Barcode | {} = {};
- let startInfo = this._findStart();
-
- if (!startInfo) {
- return null;
- }
-
- let code: BarcodePosition | BarcodeInfo | null = {
- start: startInfo.start,
- end: startInfo.end
- };
- decodedCodes.push(code);
-
- code = this._decodePayload(code, result, decodedCodes);
-
- if (!code) {
- return null;
- }
-
- code = this._findEnd(code.end, false);
-
- if (!code) {
- return null;
- }
-
- decodedCodes.push(code);
-
- // Checksum
- if (!this._checksum(result)) {
- return null;
- }
-
- // console.warn('* this.supplements=', this.supplements);
- if (this.supplements.length > 0) {
- const supplement = this._decodeExtensions(code.end);
- // console.warn('* decodeExtensions returns', supplement);
- if (!supplement) {
- return null;
- }
-
- if (!supplement.decodedCodes) {
- return null;
- }
-
- const lastCode = supplement.decodedCodes[supplement.decodedCodes.length - 1] as BarcodeInfo;
- const endInfo = {
- start: lastCode.start + (((lastCode.end - lastCode.start) / 2) | 0),
- end: lastCode.end
- };
-
- if (!this._verifyTrailingWhitespace(endInfo)) {
- return null;
- }
-
- resultInfo = {
- supplement,
- code: result.join('') + supplement.code
- };
- }
-
- return {
- code: result.join(''),
- start: startInfo.start,
- end: code.end,
- startInfo,
- decodedCodes,
- ...resultInfo,
- format: this.FORMAT,
- };
- }
-}
-
-export default EANReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/i2of5_reader.ts b/quagga2/quagga2-1.12.1/src/reader/i2of5_reader.ts
deleted file mode 100644
index 690e0b4..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/i2of5_reader.ts
+++ /dev/null
@@ -1,272 +0,0 @@
-// TODO: i2of5_reader and 2of5_reader share very similar code, make use of that
-
-import BarcodeReader, { BarcodeReaderConfig, BarcodeInfo, BarcodePosition, Barcode } from './barcode_reader';
-import merge from 'lodash/merge';
-
-const N = 1;
-const W = 3;
-
-class I2of5Reader extends BarcodeReader {
- private barSpaceRatio = [1, 1];
- SINGLE_CODE_ERROR = 0.78;
- AVG_CODE_ERROR = 0.38;
-
- START_PATTERN = [N, N, N, N];
- STOP_PATTERN = [N, N, W];
- CODE_PATTERN = [
- [N, N, W, W, N],
- [W, N, N, N, W],
- [N, W, N, N, W],
- [W, W, N, N, N],
- [N, N, W, N, W],
- [W, N, W, N, N],
- [N, W, W, N, N],
- [N, N, N, W, W],
- [W, N, N, W, N],
- [N, W, N, W, N],
- ];
- MAX_CORRECTION_FACTOR = 5;
- FORMAT = 'i2of5';
-
- constructor(opts: BarcodeReaderConfig) {
- super(merge({ normalizeBarSpaceWidth: false }, opts));
- if (opts.normalizeBarSpaceWidth) {
- this.SINGLE_CODE_ERROR = 0.38;
- this.AVG_CODE_ERROR = 0.09;
- }
- this.config = opts;
- return this;
- }
-
- protected _matchPattern(counter: Array, code: ReadonlyArray): number {
- if (this.config.normalizeBarSpaceWidth) {
- const counterSum = [0, 0];
- const codeSum = [0, 0];
- const correction = [0, 0];
- const correctionRatio = this.MAX_CORRECTION_FACTOR;
- const correctionRatioInverse = 1 / correctionRatio;
-
- for (let i = 0; i < counter.length; i++) {
- counterSum[i % 2] += counter[i];
- codeSum[i % 2] += code[i];
- }
- correction[0] = codeSum[0] / counterSum[0];
- correction[1] = codeSum[1] / counterSum[1];
-
- correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse);
- correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse);
- this.barSpaceRatio = correction;
- for (let i = 0; i < counter.length; i++) {
- counter[i] *= this.barSpaceRatio[i % 2];
- }
- }
- return super._matchPattern(counter, code);
- };
-
- protected _findPattern(pattern: ReadonlyArray, offset?: number, isWhite: boolean = false, tryHarder: boolean = false): BarcodePosition | null {
- const counter = new Array(pattern.length).fill(0);
- let counterPos = 0;
- const bestMatch: BarcodePosition = {
- error: Number.MAX_VALUE,
- start: 0,
- end: 0,
- };
-
- const epsilon = this.AVG_CODE_ERROR;
-
- isWhite = isWhite || false;
- tryHarder = tryHarder || false;
-
- if (!offset) {
- offset = this._nextSet(this._row);
- }
-
- for (let i = offset; i < this._row.length; i++) {
- if (this._row[i] ^ (isWhite ? 1 : 0)) {
- counter[counterPos]++;
- } else {
- if (counterPos === counter.length - 1) {
- const sum = counter.reduce((prev, next) => prev + next, 0);
- const error = this._matchPattern(counter, pattern);
- if (error < epsilon) {
- bestMatch.error = error;
- bestMatch.start = i - sum;
- bestMatch.end = i;
- return bestMatch;
- }
- if (tryHarder) {
- for (let j = 0; j < counter.length - 2; j++) {
- counter[j] = counter[j + 2];
- }
- counter[counter.length - 2] = 0;
- counter[counter.length - 1] = 0;
- counterPos--;
- } else {
- return null;
- }
- } else {
- counterPos++;
- }
- counter[counterPos] = 1;
- isWhite = !isWhite;
- }
- }
- return null;
- };
-
- protected _findStart(): BarcodePosition | null {
- let leadingWhitespaceStart = 0;
- let offset = this._nextSet(this._row);
- let startInfo: BarcodePosition | null = null;
- let narrowBarWidth = 1;
-
- while (!startInfo) {
- startInfo = this._findPattern(this.START_PATTERN, offset, false, true);
- if (!startInfo) {
- return null;
- }
- narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4);
- leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10;
- if (leadingWhitespaceStart >= 0) {
- if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {
- return startInfo;
- }
- }
- offset = startInfo.end;
- startInfo = null;
- }
- return null;
- };
-
- protected _verifyTrailingWhitespace(endInfo: BarcodePosition): BarcodePosition | null {
- const trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);
- if (trailingWhitespaceEnd < this._row.length) {
- if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {
- return endInfo;
- }
- }
- return null;
- };
-
- protected _findEnd(): BarcodePosition | null {
- this._row.reverse();
- const endInfo = this._findPattern(this.STOP_PATTERN);
- this._row.reverse();
-
- if (endInfo === null) {
- return null;
- }
-
- // reverse numbers
- const tmp = endInfo.start;
- endInfo.start = this._row.length - endInfo.end;
- endInfo.end = this._row.length - tmp;
-
- return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null;
- };
-
- protected _decodePair(counterPair: Array>): Array | null {
- const codes: Array = [];
-
- for (let i = 0; i < counterPair.length; i++) {
- const code = this._decodeCode(counterPair[i]);
- if (!code) {
- return null;
- }
- codes.push(code);
- }
- return codes;
- };
-
- protected _decodeCode(counter: Array): BarcodeInfo | null {
- const epsilon = this.AVG_CODE_ERROR;
-
- const bestMatch: BarcodeInfo = {
- error: Number.MAX_VALUE,
- code: -1,
- start: 0,
- end: 0,
- };
-
- for (let code = 0; code < this.CODE_PATTERN.length; code++) {
- const error = this._matchPattern(counter, this.CODE_PATTERN[code]);
- if (error < bestMatch.error!) {
- bestMatch.code = code;
- bestMatch.error = error;
- }
- }
- if (bestMatch.error! < epsilon) {
- return bestMatch;
- }
- return null;
- };
-
- protected _decodePayload(counters: ReadonlyArray, result: Array, decodedCodes: Array): Array | null {
- let pos = 0;
- const counterLength = counters.length;
- const counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]];
- let codes: BarcodeInfo[] | null = null;
-
- while (pos < counterLength) {
- for (let i = 0; i < 5; i++) {
- counterPair[0][i] = counters[pos] * this.barSpaceRatio[0];
- counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1];
- pos += 2;
- }
- codes = this._decodePair(counterPair);
- if (!codes) {
- return null;
- }
- for (let i = 0; i < codes.length; i++) {
- result.push(codes[i].code + '');
- decodedCodes.push(codes[i]);
- }
- }
- return codes;
- };
-
- protected _verifyCounterLength(counters: Array) {
- return (counters.length % 10 === 0);
- };
-
- public decode(row?: Array, start?: BarcodePosition | number): Barcode | null {
- var result = new Array();
- var decodedCodes = new Array();
-
- const startInfo = this._findStart();
- if (!startInfo) {
- return null;
- }
- decodedCodes.push(startInfo);
-
- const endInfo = this._findEnd();
- if (!endInfo) {
- return null;
- }
-
- const counters = this._fillCounters(startInfo.end, endInfo.start, false);
- if (!this._verifyCounterLength(counters)) {
- return null;
- }
- const code = this._decodePayload(counters, result, decodedCodes);
- if (!code) {
- return null;
- }
- if (result.length % 2 !== 0 ||
- result.length < 6) {
- return null;
- }
-
- decodedCodes.push(endInfo);
- return {
- code: result.join(''),
- start: startInfo.start,
- end: endInfo.end,
- startInfo: startInfo,
- decodedCodes: decodedCodes,
- format: this.FORMAT,
- };
- };
-}
-
-export default I2of5Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/index.ts b/quagga2/quagga2-1.12.1/src/reader/index.ts
deleted file mode 100644
index aff06a7..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/index.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import BarcodeReader from './barcode_reader';
-import TwoOfFiveReader from './2of5_reader';
-import NewCodabarReader from './codabar_reader';
-import Code128Reader from './code_128_reader';
-import Code32Reader from './code_32_reader';
-import Code39Reader from './code_39_reader';
-import Code39VINReader from './code_39_vin_reader';
-import Code93Reader from './code_93_reader';
-import EAN2Reader from './ean_2_reader';
-import EAN5Reader from './ean_5_reader';
-import EAN8Reader from './ean_8_reader';
-import EANReader from './ean_reader';
-import I2of5Reader from './i2of5_reader';
-import PharmacodeReader from './pharmacode_reader';
-import UPCEReader from './upc_e_reader';
-import UPCReader from './upc_reader';
-
-export {
- BarcodeReader,
- TwoOfFiveReader,
- NewCodabarReader,
- Code128Reader,
- Code32Reader,
- Code39Reader,
- Code39VINReader,
- Code93Reader,
- EAN2Reader,
- EAN5Reader,
- EAN8Reader,
- EANReader,
- I2of5Reader,
- PharmacodeReader,
- UPCEReader,
- UPCReader,
-}
diff --git a/quagga2/quagga2-1.12.1/src/reader/pharmacode_reader.ts b/quagga2/quagga2-1.12.1/src/reader/pharmacode_reader.ts
deleted file mode 100644
index bfc0454..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/pharmacode_reader.ts
+++ /dev/null
@@ -1,768 +0,0 @@
-import BarcodeReader, { Barcode, BarcodeInfo, BarcodePosition } from './barcode_reader';
-
-/**
- * Pharmacode (Pharmaceutical Binary Code) Reader
- *
- * Pharmacode is a binary barcode used in pharmaceutical packaging.
- * It encodes numbers from 3 to 131070 using narrow and wide bars.
- *
- * Encoding rules:
- * - Reading from right to left (least significant first)
- * - Narrow bar at position i adds 2^i to the value
- * - Wide bar at position i adds 2^(i+1) to the value
- * - Bars are separated by uniform-width spaces
- * - Minimum 2 bars, maximum 16 bars
- * - Valid range: 3 to 131070
- *
- * Example: Value 755
- * Binary representation of bars (from left to right in barcode):
- * wide, narrow, wide, narrow, narrow, wide, narrow, wide, narrow
- *
- * Reference: https://en.wikipedia.org/wiki/Pharmacode
- */
-
-// Minimum number of bars in a valid Pharmacode
-const MIN_BAR_COUNT = 2;
-// Maximum number of bars in a valid Pharmacode
-const MAX_BAR_COUNT = 16;
-// Minimum valid Pharmacode value
-const MIN_VALUE = 3;
-// Maximum valid Pharmacode value
-const MAX_VALUE = 131070;
-
-// Threshold ratio to distinguish narrow from wide bars
-// A bar wider than this ratio of the narrow bar width is considered wide
-const WIDE_BAR_THRESHOLD = 1.6;
-
-// Maximum allowed variation in space widths (coefficient of variation)
-// Reduced from 0.4 to help with false positives, but allowing some tolerance
-const MAX_SPACE_VARIANCE = 0.35;
-
-// Minimum quiet zone requirement in barcode widths (pharmaceutical spec: 6mm min)
-// We use 1x narrow bar width as a minimum quiet zone
-const MIN_QUIET_ZONE_WIDTHS = 1;
-
-// Allowed narrow/wide bar ratios (1:2, 1:2.5, 1:3)
-// These are multipliers applied to narrow bar width
-const ALLOWED_WIDE_BAR_RATIOS = [2.0, 2.5, 3.0];
-const WIDE_BAR_RATIO_TOLERANCE = 0.05; // Allow 5% deviation from the detected ratio
-
-class PharmacodeReader extends BarcodeReader {
- FORMAT = 'pharmacode';
-
- static adjacentLineValidationMatches = 1;
-
- SINGLE_CODE_ERROR = 0.7;
-
- AVG_CODE_ERROR = 0.48;
-
- constructor(config = {}) {
- super(config);
- }
-
- /**
- * Find the start of the barcode (first black bar after leading whitespace)
- * Public so that barcode_decoder can use it for tilted barcode validation
- */
- public _findStart(): BarcodePosition | null {
- // Strategy: scan leftâright; accept the first bar that:
- // 1. Has a sufficient leading quiet zone (âĨ 2Ã bar width, min 20px)
- // 2. Is followed by another bar at a reasonable distance (⤠10à bar width)
- // This rejects isolated noise bars surrounded by large white spaces.
-
- const minQuietZone = 20;
- let searchPos = 0;
-
- while (searchPos < this._row.length) {
- const barStart = this._nextSet(this._row, searchPos);
- if (barStart >= this._row.length) {
- return null; // no more black pixels
- }
-
- // Find the end of this black run
- let barEnd = barStart;
- while (barEnd < this._row.length && this._row[barEnd]) {
- barEnd++;
- }
-
- const barWidth = barEnd - barStart;
-
- // Skip narrow noise bars
- if (barWidth < 5) {
- searchPos = barEnd + 1;
- continue;
- }
-
- // Check leading quiet zone
- const requiredQuietZone = Math.max(barWidth * 2, minQuietZone);
- const quietZoneStart = barStart - requiredQuietZone;
- if (quietZoneStart < 0) {
- searchPos = barEnd + 1;
- continue;
- }
-
- if (!this._matchRange(quietZoneStart, barStart, 0)) {
- searchPos = barEnd + 1;
- continue;
- }
-
- // Forward-look: Check that the next bar appears within a reasonable distance.
- // A real barcode has bars followed by narrow spaces (5-15px), not huge gaps.
- // Allow up to 10Ã bar width for the space (being generous for very narrow bars).
- const maxSpaceToNextBar = Math.max(barWidth * 10, 50);
- const nextBarStart = this._nextSet(this._row, barEnd);
- if (nextBarStart >= this._row.length) {
- // No next bar; this is an isolated bar, likely noise
- searchPos = barEnd + 1;
- continue;
- }
-
- const spaceToNextBar = nextBarStart - barEnd;
- if (spaceToNextBar > maxSpaceToNextBar) {
- // Space is too large; this is likely an isolated bar
- searchPos = barEnd + 1;
- continue;
- }
-
- return { start: barStart, end: barEnd };
- }
-
- return null;
- }
-
- /**
- * Smooth bar widths to reduce edge-detection jitter from colored barcodes.
- * Applies median filter to adjacent bars: if a bar is 1â3px different from neighbors,
- * snap it to the median of local bars to stabilize measurements.
- */
- protected _smoothBarWidths(bars: number[]): number[] {
- if (bars.length <= 2) {
- return bars; // Not enough bars to smooth
- }
-
- const smoothed = bars.slice();
- for (let i = 1; i < smoothed.length - 1; i++) {
- const prev = smoothed[i - 1];
- const curr = smoothed[i];
- const next = smoothed[i + 1];
-
- // If current bar is significantly different from neighbors, snap to median
- const median = [prev, curr, next].sort((a, b) => a - b)[1];
- const deviation = Math.abs(curr - median);
-
- // If deviation is small (1â3px), snap to median to reduce noise
- if (deviation > 0 && deviation <= 3) {
- smoothed[i] = median;
- }
- }
- return smoothed;
- }
-
- /**
- * Extract all bar and space widths from the pattern.
- * Uses real-time quiet zone detection to stop extraction before reaching image edge.
- */
- protected _extractBarsAndSpaces(startPos: number): { bars: number[], spaces: number[], end: number } | null {
- const bars: number[] = [];
- const spaces: number[] = [];
-
- let pos = startPos;
- let currentWidth = 0;
- let foundTrailingQuietZone = false;
-
- // Extract first bar
- while (pos < this._row.length && this._row[pos]) {
- currentWidth++;
- pos++;
- }
- if (currentWidth === 0) {
- return null;
- }
- bars.push(currentWidth);
-
- // Extract first space (needed to establish space width and estimate narrow bar)
- currentWidth = 0;
- while (pos < this._row.length && !this._row[pos]) {
- currentWidth++;
- pos++;
- }
- if (currentWidth === 0 || pos >= this._row.length) {
- return null; // No space after first bar, or hit edge
- }
- spaces.push(currentWidth);
-
- // Estimate narrow bar width for quiet zone detection
- // If first bar < first space, assume first bar is narrow
- // Otherwise, estimate narrow from space (space â 1.25 * narrow)
- const estimatedNarrowWidth = bars[0] < spaces[0] ? bars[0] : spaces[0] * 0.8;
-
- // Pharmaceutical spec: quiet zone must be >= 6mm â 6x narrow bar (strict)
- const strictQuietZone = estimatedNarrowWidth * 6;
- // Adaptive quiet zone: 2.5x the typical inter-bar space width
- // This should catch legitimate quiet zones while avoiding false positives
- let adaptiveQuietZone = spaces[0] * 2.5;
-
- // Continue extracting alternating bars and spaces
- // Stop BEFORE reaching MAX_BAR_COUNT+1 to avoid extracting too many bars
- while (pos < this._row.length && bars.length < MAX_BAR_COUNT) {
- // Extract bar
- currentWidth = 0;
- while (pos < this._row.length && this._row[pos]) {
- currentWidth++;
- pos++;
- }
- if (currentWidth === 0) {
- // Reached end of barcode (no more bars)
- break;
- }
- bars.push(currentWidth);
-
- // Extract space
- currentWidth = 0;
- const spaceStart = pos;
- while (pos < this._row.length && !this._row[pos]) {
- currentWidth++;
- pos++;
- }
-
- if (currentWidth === 0) {
- // No space after this bar - barcode ended
- break;
- }
-
- // Check if this space is a quiet zone (strict pharmaceutical spec)
- if (currentWidth >= strictQuietZone) {
- // Found strict trailing quiet zone - stop extraction here
- foundTrailingQuietZone = true;
- pos = spaceStart; // Reset pos to start of quiet zone
- break;
- }
-
- // Adaptive quiet zone: if this space is significantly larger than normal inter-bar spaces
- // (2x or more), treat it as a quiet zone
- if (bars.length >= MIN_BAR_COUNT && currentWidth >= adaptiveQuietZone) {
- foundTrailingQuietZone = true;
- pos = spaceStart;
- break;
- }
-
- // Check if we hit the image edge while counting this space
- if (pos >= this._row.length) {
- // Hit image edge while in whitespace - treat as infinite quiet zone
- // We've reached the end of the image, which counts as an implicit quiet zone
- foundTrailingQuietZone = true;
- pos = spaceStart; // Reset to start of quiet zone
- break;
- }
-
- // This is a normal inter-bar space
- spaces.push(currentWidth);
-
- // Update adaptive quiet zone based on average space width
- // A quiet zone should be at least 2x the average inter-bar space
- if (spaces.length >= 2) {
- const avgSpace = spaces.reduce((a, b) => a + b, 0) / spaces.length;
- adaptiveQuietZone = avgSpace * 2;
- }
- }
-
- // If we exited the loop without finding a trailing quiet zone, barcode is invalid
- // (This catches barcodes that end exactly at the image edge)
- if (!foundTrailingQuietZone) {
- return null;
- }
-
- // Validate bar count
- if (bars.length < MIN_BAR_COUNT || bars.length > MAX_BAR_COUNT) {
- return null;
- }
-
- // We should have (n-1) spaces for n bars
- if (spaces.length !== bars.length - 1) {
- return null;
- }
-
- // Validate that spaces are uniform (pharmacode requirement)
- if (!this._validateSpaces(spaces)) {
- return null;
- }
-
- // Validate that bars have at most 2 distinct sizes (narrow and/or wide)
- if (!this._validateBarSizeCount(bars)) {
- return null;
- }
-
- // Apply smoothing to reduce edge-detection jitter on colored barcodes
- const smoothedBars = this._smoothBarWidths(bars);
-
- return { bars: smoothedBars, spaces, end: pos };
- }
-
- /**
- * Validate that bars have at most 2 distinct sizes (narrow and/or wide).
- * Pharmacode bars must be either all one size, or two sizes (narrow + wide).
- * If 3+ distinct sizes detected, this is not a valid pharmacode.
- */
- protected _validateBarSizeCount(bars: number[]): boolean {
- if (bars.length === 0) {
- return false;
- }
-
- // Cluster bars into size groups with 35% tolerance to handle edge-detection jitter
- // This matches the tolerance used for space validation (CV <= 0.35)
- const tolerance = 0.35;
- const clusters: number[][] = [];
-
- for (const bar of bars) {
- let foundCluster = false;
- for (const cluster of clusters) {
- const clusterAvg = cluster.reduce((a, b) => a + b, 0) / cluster.length;
- if (Math.abs(bar - clusterAvg) <= clusterAvg * tolerance) {
- cluster.push(bar);
- foundCluster = true;
- break;
- }
- }
- if (!foundCluster) {
- clusters.push([bar]);
- }
- }
-
- // Must have exactly 1 or 2 clusters (not 3+)
- if (clusters.length > 2) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Check if space widths are uniform enough for a valid Pharmacode
- */
- protected _validateSpaces(spaces: number[]): boolean {
- if (spaces.length === 0) {
- return true; // Single bar (though invalid for Pharmacode)
- }
-
- const mean = spaces.reduce((a, b) => a + b, 0) / spaces.length;
- if (mean === 0) {
- return false;
- }
-
- // Calculate coefficient of variation
- const variance = spaces.reduce((sum, s) => sum + Math.pow(s - mean, 2), 0) / spaces.length;
- const stdDev = Math.sqrt(variance);
- const cv = stdDev / mean;
-
- return cv <= MAX_SPACE_VARIANCE;
- }
-
- /**
- * Validate that narrow and wide bars follow a consistent ratio (1:2, 1:2.5, or 1:3)
- * This is a spec requirement for pharmacodes
- */
- protected _validateBarRatios(bars: number[], spaces: number[]): { narrowWidth: number, wideRatio: number } | null {
- // If all bars are essentially the same width (low variance), need to determine if narrow or wide
- const avgAll = bars.reduce((a, b) => a + b, 0) / bars.length;
- const varAll = bars.reduce((a, b) => a + Math.abs(b - avgAll), 0) / bars.length;
- const cvAll = avgAll === 0 ? 0 : varAll / avgAll;
-
- if (cvAll <= 0.1) {
- // Low variance: could be all-narrow or all-wide
- // Use space widths as a hint: spaces should be ~1.25x the narrow bar width
- const avgSpace = spaces.length > 0 ?
- (spaces.reduce((a, b) => a + b, 0) / spaces.length) :
- 0;
-
- if (avgSpace > 0) {
- const spaceToBarRatio = avgSpace / avgAll;
- // If spaces are much smaller than bars, bars are likely wide (ratio should be ~0.3-0.5)
- // If spaces are comparable to bars or larger, bars are likely narrow (ratio should be ~1.0-1.5)
- if (spaceToBarRatio < 0.7) {
- // Bars are likely wide; infer narrow width from them
- // Use the closest allowed ratio
- const inferredNarrow = avgAll / 2.5; // Try middle ratio first
- return { narrowWidth: inferredNarrow, wideRatio: 2.5 };
- }
- }
-
- // Default: treat as all-narrow
- return { narrowWidth: avgAll, wideRatio: 2.0 };
- }
- // Explore multiple possible thresholds (midpoints between sorted unique widths)
- // and pick the one that best matches an allowed ratio with low per-bar deviation.
- const sortedUnique = Array.from(new Set(bars.slice().sort((a, b) => a - b)));
- if (sortedUnique.length < 2) {
- // All bars identical: treat as single-width (valid pharmacode of all narrow or all wide)
- const avgWidth = bars.reduce((a, b) => a + b, 0) / bars.length;
- return { narrowWidth: avgWidth, wideRatio: 2.0 };
- }
-
- type Candidate = {
- threshold: number;
- narrowBars: number[];
- wideBars: number[];
- avgN: number;
- avgW: number;
- ratio: number;
- ratioDiff: number;
- matchedRatio: number;
- };
-
- const candidates: Candidate[] = [];
-
- // Generate candidate thresholds at midpoints between consecutive unique widths
- for (let i = 0; i < sortedUnique.length - 1; i++) {
- const t = (sortedUnique[i] + sortedUnique[i + 1]) / 2;
- const n: number[] = [];
- const w: number[] = [];
- for (const b of bars) {
- if (b < t) {
- n.push(b);
- } else {
- w.push(b);
- }
- }
-
- if (n.length === 0 || w.length === 0) {
- continue; // need both groups
- }
-
- const avgN = n.reduce((a, b) => a + b, 0) / n.length;
- const avgW = w.reduce((a, b) => a + b, 0) / w.length;
- const ratio = avgW / avgN;
-
- // Find closest allowed ratio
- let bestRatio = ALLOWED_WIDE_BAR_RATIOS[0];
- let bestDiff = Math.abs(ratio - bestRatio);
- for (const r of ALLOWED_WIDE_BAR_RATIOS) {
- const d = Math.abs(ratio - r);
- if (d < bestDiff) {
- bestDiff = d;
- bestRatio = r;
- }
- }
-
- candidates.push({
- threshold: t,
- narrowBars: n,
- wideBars: w,
- avgN,
- avgW,
- ratio,
- ratioDiff: bestDiff,
- matchedRatio: bestRatio,
- });
- }
-
- // Sort candidates by how close the ratio is to allowed ratios
- candidates.sort((a, b) => a.ratioDiff - b.ratioDiff);
-
- for (const c of candidates) {
- // Check ratio within tolerance
- const tolerance = c.matchedRatio * WIDE_BAR_RATIO_TOLERANCE;
- if (Math.abs(c.ratio - c.matchedRatio) > tolerance) {
- continue;
- }
-
- // Per-bar consistency checks
- // Use 15% tolerance instead of 30% to reject bars with too much width variation
- // Real pharmacodes have consistent bar widths; tilted/curved ones show variation
- const narrowTolerance = c.avgN * 0.15;
- const wideTolerance = c.avgW * 0.15;
- let ok = true;
- for (const b of c.narrowBars) {
- if (Math.abs(b - c.avgN) > narrowTolerance) { ok = false; break; }
- }
- if (!ok) continue;
- for (const b of c.wideBars) {
- if (Math.abs(b - c.avgW) > wideTolerance) { ok = false; break; }
- }
- if (!ok) continue;
-
- // Accept first viable candidate (closest ratio)
- return { narrowWidth: c.avgN, wideRatio: c.matchedRatio };
- }
-
- return null;
- }
-
- /**
- * Validate periodicity of bar and space widths
- * Real pharmacodes have consistent bar/space widths with low variation
- * Tilted barcodes create varying widths due to angle-dependent cross-sections
- * Uses coefficient of variation (CV = stdDev / mean) to detect this
- */
- protected _validatePeriodicity(bars: number[], spaces: number[]): boolean {
- // Calculate coefficient of variation for bars
- if (bars.length > 0) {
- const barMean = bars.reduce((a, b) => a + b, 0) / bars.length;
- const barVariance = bars.reduce((a, b) => a + Math.pow(b - barMean, 2), 0) / bars.length;
- const barStdDev = Math.sqrt(barVariance);
- const barCV = barMean !== 0 ? barStdDev / barMean : 0;
-
- // Reject if bar CV is too high (indicates tilted/curved barcode with varying cross-sections)
- // Threshold of 0.65 allows for reasonable variation in valid codes while still catching severe misalignments
- if (barCV > 0.65) {
- return false;
- }
- }
-
- // Calculate coefficient of variation for spaces
- if (spaces.length > 0) {
- const spaceMean = spaces.reduce((a, b) => a + b, 0) / spaces.length;
- const spaceVariance = spaces.reduce((a, b) => a + Math.pow(b - spaceMean, 2), 0) / spaces.length;
- const spaceStdDev = Math.sqrt(spaceVariance);
- const spaceCV = spaceMean !== 0 ? spaceStdDev / spaceMean : 0;
-
- // Reject if space CV is too high
- if (spaceCV > 0.55) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Verify that there is sufficient quiet zone at start and end
- * When area constraints are used, the quiet zone may be truncated,
- * so we check if we have at least SOME quiet zone or hit the scan boundary
- */
- protected _validateQuietZones(startInfo: BarcodePosition, narrowWidth: number, end: number): boolean {
- const minQuietZone = narrowWidth * MIN_QUIET_ZONE_WIDTHS;
-
- // Check leading quiet zone
- // If we're very close to the start (within 2 pixels), we likely hit the area boundary
- // In that case, accept it as we can't verify the quiet zone
- if (startInfo.start >= 2 && startInfo.start < minQuietZone) {
- return false;
- }
-
- // Check trailing quiet zone
- // If we're at or very close to the end of the row, we likely hit the area boundary
- // In real extracted images, especially with resizing, we may not have perfect quiet zones
- // So we accept it if we're within 6 pixels of the end (scan boundary)
- const remainingSpace = this._row.length - end;
-
- // If we're very close to the edge (< 6px), we hit the scan boundary - accept it
- if (remainingSpace < 6) {
- return true;
- }
-
- // We have at least 6px of trailing space - check if it meets minimum quiet zone requirement
- if (remainingSpace < minQuietZone) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Classify bars as narrow or wide and decode the value
- */
- protected _decodeBars(bars: number[], narrowWidth?: number): { value: number, pattern: string } | null {
- // Use provided narrowWidth if available (from _validateBarRatios inference)
- // Otherwise, find the minimum bar width (likely narrow bar)
- const minWidth = narrowWidth ?? Math.min(...bars);
-
- // If all bars are similar width, it might be a valid Pharmacode with all narrow or all wide bars
- // But we need to determine the threshold
- const threshold = minWidth * WIDE_BAR_THRESHOLD;
-
- // Calculate the Pharmacode value using the correct algorithm
- // Position n starts at 0 on the RIGHT (last bar in array)
- // Narrow bar at position n adds 2^n
- // Wide bar at position n adds 2^(n+1)
- let value = 0;
-
- // Reverse bars to process right-to-left
- const reversedBars = bars.slice().reverse();
-
- for (let i = 0; i < reversedBars.length; i++) {
- const isWide = reversedBars[i] > threshold;
- if (isWide) {
- value += Math.pow(2, i + 1);
- } else {
- value += Math.pow(2, i);
- }
- }
-
- // Build human-readable bar pattern for debugging
- let pattern = '';
- for (let i = reversedBars.length - 1; i >= 0; i--) {
- pattern += reversedBars[i] > threshold ? 'W' : 'N';
- }
-
- return { value, pattern };
- }
-
- /**
- * Verify trailing whitespace (quiet zone)
- */
- protected _verifyTrailingWhitespace(end: number, barWidth: number): boolean {
- const trailingWhitespaceEnd = Math.min(end + barWidth * 2, this._row.length);
- return this._matchRange(end, trailingWhitespaceEnd, 0);
- }
-
- /**
- * Check pattern consistency: extract bars from slightly shifted positions.
- * Real barcodes should produce consistent bar patterns even with small shifts.
- * Text patterns are typically edge-based and will break with a small shift.
- */
- protected _validatePatternConsistency(startInfo: BarcodePosition, bars: number[]): boolean {
- const originalStart = startInfo.start;
- let consistentOffsets = 0;
- let totalChecks = 0;
-
- // Check positions offset by Âą1 and Âą2 pixels (simulate scanning lines nearby)
- for (const offset of [-2, -1, 1, 2]) {
- const shiftedStart = originalStart + offset;
- if (shiftedStart < 0 || shiftedStart >= this._row.length) {
- continue;
- }
-
- totalChecks++;
-
- // Try to extract bars from shifted position
- const shiftedExtracted = this._extractBarsAndSpaces(shiftedStart);
- if (!shiftedExtracted) {
- continue;
- }
-
- // If we got bars and they match in count, it's more likely a real barcode
- if (shiftedExtracted.bars.length === bars.length) {
- // Check if bar widths are roughly similar (within 25%)
- let barsMatch = true;
- for (let i = 0; i < bars.length; i++) {
- const diff = Math.abs(shiftedExtracted.bars[i] - bars[i]) / Math.max(bars[i], 1);
- if (diff > 0.25) {
- barsMatch = false;
- break;
- }
- }
- if (barsMatch) {
- consistentOffsets++;
- }
- }
- }
-
- // Real barcodes should be consistent across multiple shifted positions
- // Text patterns typically fail this test
- if (totalChecks > 0 && consistentOffsets >= totalChecks * 0.5) {
- return true; // Consistent across at least 50% of positions
- }
- return false;
- }
-
- public decode(row?: Array, start?: BarcodePosition | number): Barcode | null {
-
- // Find the start of the barcode
- const startInfo = this._findStart();
- if (!startInfo) {
- return null;
- }
-
- // REJECT if barcode starts too late in the scan (>50% of line length)
- // Valid pharmacodes should be found near the image edge or early in the scan.
- // Starting too far into the image indicates we're picking up noise or a shifted pattern
- // (i.e., sampling mid-bar, which reverses the encoding).
- // This also rejects tilted barcodes that only appear straight at one specific angle.
- if (startInfo.start > this._row.length * 0.50) {
- return null;
- }
-
- // Extract bars and spaces
- const extracted = this._extractBarsAndSpaces(startInfo.start);
- if (!extracted) {
- return null;
- }
-
- const { bars, spaces, end } = extracted;
-
- // Reject extremely short patterns (total width < 20px)
- // Calculate actual barcode width from sum of bars and spaces
- const barsWidth = bars.reduce((sum, w) => sum + w, 0);
- const spacesWidth = spaces.reduce((sum, w) => sum + w, 0);
- const totalBarcodeWidth = barsWidth + spacesWidth;
- if (totalBarcodeWidth < 20) {
- return null;
- }
-
- // EDGE-REACH REJECTION: Reject if extraction reaches image boundary
- // Valid pharmacodes require proper quiet zones per pharmaceutical spec (min 6mm â 16px at typical DPI)
- // Extractions reaching the image edge (end >= row.length - 2) indicate incomplete/invalid patterns
- // This catches tilted and curved barcodes that only appear straight at one specific angle
- const EDGE_MARGIN = 0; // No margin: only reject if extraction goes PAST the row length (shouldn't happen but be safe)
- const remainingSpace = this._row.length - end;
- if (remainingSpace < EDGE_MARGIN) {
- return null;
- }
-
- // Validate space uniformity
- if (!this._validateSpaces(spaces)) {
- return null;
- }
-
- // Validate periodicity of bar and space widths to reject tilted/curved barcodes
- if (!this._validatePeriodicity(bars, spaces)) {
- return null;
- }
-
- // For short patterns, validate consistency across shifted positions
- // to reject text/noise patterns that appear as bars due to edge detection
- if (!this._validatePatternConsistency(startInfo, bars)) {
- return null;
- }
-
- // Validate bar width ratios are consistent (1:2, 1:2.5, or 1:3)
- const ratioInfo = this._validateBarRatios(bars, spaces);
- if (!ratioInfo) {
- return null;
- }
-
- // Validate quiet zones meet pharmaceutical spec
- if (!this._validateQuietZones(startInfo, ratioInfo.narrowWidth, end)) {
- return null;
- }
-
- // Decode the bars, passing the inferred narrowWidth for all-wide/all-narrow patterns
- const decoded = this._decodeBars(bars, ratioInfo.narrowWidth);
- if (!decoded) {
- return null;
- }
-
- const { value } = decoded;
-
- // Validate value range
- if (value < MIN_VALUE || value > MAX_VALUE) {
- return null;
- }
-
- // Verify trailing whitespace
- const avgBarWidth = bars.reduce((a, b) => a + b, 0) / bars.length;
- if (!this._verifyTrailingWhitespace(end, avgBarWidth)) {
- // Soft fail - allow but note it
- }
-
- // Build the decoded codes array for debugging/visualization
- const decodedCodes: Array = bars.map((width, index) => ({
- code: width > (Math.min(...bars) * WIDE_BAR_THRESHOLD) ? 1 : 0,
- start: 0, // Could calculate actual positions if needed
- end: 0,
- error: 0,
- }));
-
- return {
- code: value.toString(),
- start: startInfo.start,
- end: end,
- startInfo: startInfo,
- decodedCodes: decodedCodes,
- pattern: decoded.pattern,
- format: this.FORMAT,
- };
- }
-}
-
-export default PharmacodeReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/test_external_code_128_reader.ts b/quagga2/quagga2-1.12.1/src/reader/test_external_code_128_reader.ts
deleted file mode 100644
index 37c57fa..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/test_external_code_128_reader.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Example external Code 128 reader for testing the external reader plugin mechanism.
- * This demonstrates how users can create custom readers by extending built-in ones.
- */
-
-import Code128Reader from './code_128_reader';
-
-/**
- * TestExternalCode128Reader - A simple wrapper around Code128Reader
- * that demonstrates the external reader plugin API.
- *
- * In a real-world scenario, this could add:
- * - Custom preprocessing
- * - Additional validation
- * - Custom decode logic
- * - Logging/telemetry
- */
-class TestExternalCode128Reader extends Code128Reader {
- /**
- * The FORMAT should remain 'code_128' to maintain compatibility with existing tests.
- * In a real external reader for a different format, you would set this to your format name.
- */
- FORMAT = 'code_128' as const;
-
- /**
- * Decode method that wraps the parent implementation.
- * For this test reader, we simply call the parent implementation.
- * In a real external reader, you might add custom logic here.
- */
- // The decode method is inherited from Code128Reader - no override needed for tests
-}
-
-export default TestExternalCode128Reader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/upc_e_reader.ts b/quagga2/quagga2-1.12.1/src/reader/upc_e_reader.ts
deleted file mode 100644
index 20b441d..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/upc_e_reader.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import EANReader, { CODE_G_START } from './ean_reader';
-import { BarcodePosition, BarcodeInfo } from './barcode_reader';
-
-class UPCEReader extends EANReader {
- CODE_FREQUENCY = [
- [ 56, 52, 50, 49, 44, 38, 35, 42, 41, 37 ],
- [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]];
- STOP_PATTERN = [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7];
- FORMAT = 'upc_e';
- protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null {
- let outCode: BarcodeInfo | BarcodePosition | null = { ...inCode };
- let codeFrequency = 0x0;
-
- for (let i = 0; i < 6; i++) {
- outCode = this._decodeCode(outCode.end);
- if (!outCode) {
- return null;
- }
- if ((outCode as BarcodeInfo).code >= CODE_G_START) {
- (outCode as BarcodeInfo).code = (outCode as BarcodeInfo).code - CODE_G_START;
- codeFrequency |= (1 << (5 - i));
- }
- result.push((outCode as BarcodeInfo).code);
- decodedCodes.push(outCode);
- }
- if (!this._determineParity(codeFrequency, result)) {
- return null;
- }
- return outCode as BarcodeInfo;
- };
-
- protected _determineParity(codeFrequency: number, result: Array) {
- for (let nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++){
- for (let i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) {
- if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) {
- result.unshift(nrSystem);
- result.push(i);
- return true;
- }
- }
- }
- return false;
- };
-
- protected _convertToUPCA(result: Array) {
- let upca = [result[0]];
- const lastDigit = result[result.length - 2];
-
- if (lastDigit <= 2) {
- upca = upca.concat(result.slice(1, 3))
- .concat([lastDigit, 0, 0, 0, 0])
- .concat(result.slice(3, 6));
- } else if (lastDigit === 3) {
- upca = upca.concat(result.slice(1, 4))
- .concat([0, 0, 0, 0, 0])
- .concat(result.slice(4, 6));
- } else if (lastDigit === 4) {
- upca = upca.concat(result.slice(1, 5))
- .concat([0, 0, 0, 0, 0, result[5]]);
- } else {
- upca = upca.concat(result.slice(1, 6))
- .concat([0, 0, 0, 0, lastDigit]);
- }
-
- upca.push(result[result.length - 1]);
- return upca;
- };
-
- protected _checksum(result: Array): boolean {
- return super._checksum(this._convertToUPCA(result));
- }
-
- protected _findEnd(offset: number, isWhite: boolean): BarcodePosition | null {
- return super._findEnd(offset, true);
- }
-
- protected _verifyTrailingWhitespace(endInfo: BarcodePosition): BarcodePosition | null {
- const trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);
- if (trailingWhitespaceEnd < this._row.length) {
- if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {
- return endInfo;
- }
- }
- return null;
- };
-}
-
-export default UPCEReader;
diff --git a/quagga2/quagga2-1.12.1/src/reader/upc_reader.ts b/quagga2/quagga2-1.12.1/src/reader/upc_reader.ts
deleted file mode 100644
index d771e93..0000000
--- a/quagga2/quagga2-1.12.1/src/reader/upc_reader.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import EANReader from './ean_reader';
-import { BarcodePosition, Barcode } from './barcode_reader';
-
-class UPCReader extends EANReader {
- FORMAT = 'upc_a';
- decode(row?: Array, start?: BarcodePosition | number): Barcode | null {
- const result = EANReader.prototype.decode.call(this);
-
- if (result && result.code && result.code.length === 13 && result.code.charAt(0) === '0') {
- result.code = result.code.substring(1);
- return result;
- }
- return null;
- }
-}
-
-export default UPCReader;
diff --git a/quagga2/quagga2-1.12.1/src/test/gl-matrix-behavior.spec.ts b/quagga2/quagga2-1.12.1/src/test/gl-matrix-behavior.spec.ts
deleted file mode 100644
index 6116294..0000000
--- a/quagga2/quagga2-1.12.1/src/test/gl-matrix-behavior.spec.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * Test to verify gl-matrix behavior before/after removing glMatrix.setMatrixArrayType(Array)
- *
- * This test verifies that vec2 operations work correctly regardless of whether
- * the underlying array type is Float32Array (default) or Array (via setMatrixArrayType).
- *
- * When we remove setMatrixArrayType(Array), vectors will return Float32Array instead
- * of regular Array, but all operations and element access should work identically.
- */
-
-import { expect } from 'chai';
-import { describe, it } from 'mocha';
-import { vec2, mat2 } from 'gl-matrix';
-
-describe('gl-matrix behavior verification', () => {
- describe('vec2 operations', () => {
- it('should clone vectors and allow element access', () => {
- const original = [10, 20];
- const cloned = vec2.clone(original);
-
- // Element access should work
- expect(cloned[0]).to.equal(10);
- expect(cloned[1]).to.equal(20);
-
- // Length should be 2
- expect(cloned.length).to.equal(2);
- });
-
- it('should perform vec2.scale operations', () => {
- const vector = vec2.clone([10, 20]);
- const scaled = vec2.scale(vec2.create(), vector, 2);
-
- expect(scaled[0]).to.equal(20);
- expect(scaled[1]).to.equal(40);
- });
-
- it('should perform vec2.dot operations', () => {
- const v1 = vec2.clone([1, 0]);
- const v2 = vec2.clone([0, 1]);
- const v3 = vec2.clone([1, 0]);
-
- // Perpendicular vectors: dot product = 0
- expect(vec2.dot(v1, v2)).to.equal(0);
-
- // Parallel vectors: dot product = 1
- expect(vec2.dot(v1, v3)).to.equal(1);
- });
-
- it('should perform vec2.transformMat2 operations', () => {
- const vector = vec2.clone([1, 0]);
- const identity = mat2.create(); // Identity matrix
- const result = vec2.create();
-
- vec2.transformMat2(result, vector, identity);
-
- expect(result[0]).to.equal(1);
- expect(result[1]).to.equal(0);
- });
-
- it('should work with Math operations', () => {
- const angle = Math.PI / 4; // 45 degrees
- const vector = vec2.clone([Math.cos(angle), Math.sin(angle)]);
-
- // Should be approximately [0.707, 0.707]
- expect(vector[0]).to.be.closeTo(0.707, 0.01);
- expect(vector[1]).to.be.closeTo(0.707, 0.01);
- });
-
- it('should support array spread and destructuring', () => {
- const v1 = vec2.clone([1, 2]);
- const v2 = vec2.clone([3, 4]);
-
- // Destructuring should work
- const [x1, y1] = v1;
- expect(x1).to.equal(1);
- expect(y1).to.equal(2);
-
- // Spread should work for concatenation
- const combined = [...v1, ...v2];
- expect(combined).to.have.lengthOf(4);
- expect(combined[0]).to.equal(1);
- expect(combined[2]).to.equal(3);
- });
-
- it('should work in array methods', () => {
- const vectors = [
- vec2.clone([0, 0]),
- vec2.clone([1, 1]),
- vec2.clone([2, 2]),
- ];
-
- // Should work with array methods like map
- const scaled = vectors.map(v => vec2.scale(vec2.create(), v, 2));
-
- expect(scaled[1][0]).to.equal(2);
- expect(scaled[1][1]).to.equal(2);
- });
- });
-
- describe('mat2 operations', () => {
- it('should create and copy matrices', () => {
- const angle = Math.PI / 2; // 90 degrees
- const rotation = [
- Math.cos(angle), Math.sin(angle),
- -Math.sin(angle), Math.cos(angle)
- ];
- const rotMat = mat2.copy(mat2.create(), rotation);
-
- expect(rotMat).to.have.lengthOf(4);
- expect(rotMat[0]).to.be.closeTo(0, 0.01); // cos(90°) â 0
- expect(rotMat[1]).to.be.closeTo(1, 0.01); // sin(90°) â 1
- });
-
- it('should invert matrices', () => {
- const matrix = mat2.create(); // Identity
- const inverted = mat2.create();
- mat2.invert(inverted, matrix);
-
- // Inverted identity should still be identity
- expect(inverted[0]).to.equal(1);
- expect(inverted[1]).to.equal(0);
- expect(inverted[2]).to.equal(0);
- expect(inverted[3]).to.equal(1);
- });
-
- it('should transform vectors with matrices', () => {
- const vector = vec2.clone([1, 0]);
- const angle = Math.PI / 2; // 90 degree rotation
- const rotation = mat2.fromRotation(mat2.create(), angle);
- const result = vec2.create();
-
- vec2.transformMat2(result, vector, rotation);
-
- // [1,0] rotated 90° should be approximately [0,1]
- expect(result[0]).to.be.closeTo(0, 0.01);
- expect(result[1]).to.be.closeTo(1, 0.01);
- });
- });
-
- describe('type compatibility', () => {
- it('should work with existing code patterns in cv_utils.js', () => {
- // Simulate imageRef.toVec2() pattern
- function imageRef(x: number, y: number) {
- return {
- x,
- y,
- toVec2() {
- return vec2.clone([this.x, this.y]);
- }
- };
- }
-
- const ref = imageRef(5, 10);
- const v = ref.toVec2();
-
- // This is the actual test from cv_utils.spec.js
- expect(v[0]).to.equal(5);
- expect(v[1]).to.equal(10);
- });
-
- it('should work with array-like operations in barcode_locator.js', () => {
- // Simulate the box structure used in barcode_locator
- const box = [
- vec2.clone([0, 0]),
- vec2.clone([10, 0]),
- vec2.clone([10, 10]),
- vec2.clone([0, 10]),
- ];
-
- // Should be able to iterate
- for (let j = 0; j < box.length; j++) {
- expect(box[j]).to.have.lengthOf(2);
- expect(typeof box[j][0]).to.equal('number');
- }
-
- // Should support transformations in-place
- const scale = 2;
- for (let j = 0; j < box.length; j++) {
- vec2.scale(box[j], box[j], scale);
- }
-
- expect(box[1][0]).to.equal(20);
- });
- });
-
- describe('Float32Array vs Array compatibility', () => {
- it('should behave the same for element access', () => {
- const regularArray = [1, 2];
- const float32Array = new Float32Array([1, 2]);
-
- expect(regularArray[0]).to.equal(float32Array[0]);
- expect(regularArray[1]).to.equal(float32Array[1]);
- expect(regularArray.length).to.equal(float32Array.length);
- });
-
- it('should work with destructuring', () => {
- const float32Array = new Float32Array([3, 4]);
- const [x, y] = float32Array;
-
- expect(x).to.equal(3);
- expect(y).to.equal(4);
- });
-
- it('should work with for loops', () => {
- const float32Array = new Float32Array([1, 2, 3, 4]);
- let sum = 0;
-
- for (let i = 0; i < float32Array.length; i++) {
- sum += float32Array[i];
- }
-
- expect(sum).to.equal(10);
- });
-
- it('should NOT work with some array methods', () => {
- // This documents a known difference between Array and TypedArray
- const float32Array = new Float32Array([1, 2, 3]);
-
- // Array.isArray returns false for TypedArray
- expect(Array.isArray(float32Array)).to.be.false;
-
- // But it is still iterable
- expect([...float32Array]).to.deep.equal([1, 2, 3]);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/src/test/quagga.spec.ts b/quagga2/quagga2-1.12.1/src/test/quagga.spec.ts
deleted file mode 100644
index fcb70e7..0000000
--- a/quagga2/quagga2-1.12.1/src/test/quagga.spec.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/* eslint-disable @typescript-eslint/ban-ts-comment */
-import { expect } from 'chai';
-import { describe, it, afterEach } from 'mocha';
-import sinon from 'sinon';
-import QuaggaJSStaticInterface from '../quagga';
-
-const mockQuaggaInstance = {
- context: {},
- initializeData: () => {},
- initInputStream: (cb: () => void) => cb(),
-};
-
-describe('src/quagga.js', () => {
- afterEach(() => {
- sinon.restore();
- });
-
- describe('init', () => {
- it('returns undefined when callback provided', (done) => {
- // @ts-expect-error
- const ret = QuaggaJSStaticInterface.init({ }, done, null, mockQuaggaInstance);
- expect(ret).to.equal(undefined);
- });
- it('returns promise when no callback provided', () => {
- // @ts-expect-error
- const ret = QuaggaJSStaticInterface.init({ }, null, null, mockQuaggaInstance);
- expect(ret).to.be.a('promise');
- return ret;
- });
- });
-
- describe('start', () => {
- it('throws descriptive error when called without init() and no config provided', () => {
- // Call the actual start() method without any arguments
- // This should throw because init() was never called (framegrabber is undefined)
- expect(() => QuaggaJSStaticInterface.start()).to.throw(
- 'start() was called before init() completed. '
- + 'Call init() first, or call start(config) to combine init and start.'
- );
- });
-
- it('error message includes helpful guidance', () => {
- try {
- QuaggaJSStaticInterface.start();
- expect.fail('Expected an error to be thrown');
- } catch (err: unknown) {
- const error = err as Error;
- expect(error.message).to.include('start() was called before init() completed');
- expect(error.message).to.include('Call init() first');
- expect(error.message).to.include('start(config)');
- }
- });
-
- it('start(config) returns a Promise when no callback is provided', () => {
- // When config is provided without a callback, start should return a Promise
- const result = QuaggaJSStaticInterface.start({ inputStream: { type: 'ImageStream' } });
- expect(result).to.be.a('promise');
- // The promise should reject since init will fail without proper setup
- // but we're primarily testing the return type here
- });
-
- it('start(config, callback) returns undefined and calls callback', (done) => {
- // Stub init to immediately call its callback with no error
- const initStub = sinon.stub(QuaggaJSStaticInterface, 'init');
- initStub.callsFake((_config: unknown, cb: (err?: Error) => void) => {
- // Simulate successful init by calling callback with no error
- cb();
- return undefined;
- });
-
- const callback = sinon.spy((err: unknown) => {
- // Callback should be called after init succeeds
- // An error is expected because instance.start() will fail without proper setup
- expect(callback.called).to.be.true;
- // Verify that an error was passed to the callback
- expect(err).to.not.be.undefined;
- expect(err).to.not.be.null;
- done();
- });
-
- // Pass the spy function directly (not invoked) - sinon spies are callable
- const result = QuaggaJSStaticInterface.start(
- { inputStream: { type: 'ImageStream' } },
- callback
- );
- expect(result).to.equal(undefined);
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/.eslintrc b/quagga2/quagga2-1.12.1/test/.eslintrc
deleted file mode 100644
index b3572e4..0000000
--- a/quagga2/quagga2-1.12.1/test/.eslintrc
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "env": {
- "node": true,
- "mocha": true
- },
- "globals": {
- "should": "readonly",
- "expect": "readonly"
- }
-}
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-001.jpg
deleted file mode 100644
index 53d20c5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-002.jpg
deleted file mode 100644
index 8b49fcd..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-003.jpg
deleted file mode 100644
index 57d9672..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-004.jpg
deleted file mode 100644
index 30f55c8..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-005.jpg
deleted file mode 100644
index e4d4510..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-006.jpg
deleted file mode 100644
index 4add8c1..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-007.jpg
deleted file mode 100644
index 9d69fef..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-008.jpg
deleted file mode 100644
index d67d744..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-009.jpg
deleted file mode 100644
index 957af80..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-010.jpg
deleted file mode 100644
index 8214205..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-012.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-012.jpg
deleted file mode 100644
index 1d6111b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-012.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-015.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-015.jpg
deleted file mode 100644
index 14f61a5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-015.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-016.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-016.jpg
deleted file mode 100644
index 509c283..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-016.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-017.jpg b/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-017.jpg
deleted file mode 100644
index 29e08cc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/2of5/image-017.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-001.jpg
deleted file mode 100644
index a7295ec..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-002.jpg
deleted file mode 100644
index 007325c..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-003.jpg
deleted file mode 100644
index 504a60d..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-004.jpg
deleted file mode 100644
index ccdeea0..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-005.jpg
deleted file mode 100644
index 0f05cf7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-006.jpg
deleted file mode 100644
index a1ef76d..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-007.jpg
deleted file mode 100644
index 7a10bd5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-008.jpg
deleted file mode 100644
index 20dcab7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-009.jpg
deleted file mode 100644
index 89c3ce9..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-010.jpg
deleted file mode 100644
index 620d7c0..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/codabar/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-001.jpg
deleted file mode 100644
index 2075809..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-002.jpg
deleted file mode 100644
index 24d04a4..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-003.jpg
deleted file mode 100644
index 360b3a6..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-004.jpg
deleted file mode 100644
index 11759ce..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-005.jpg
deleted file mode 100644
index a049f41..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-006.jpg
deleted file mode 100644
index 1cbdf67..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-007.jpg
deleted file mode 100644
index eaf3465..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-008.jpg
deleted file mode 100644
index 829fa57..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-009.jpg
deleted file mode 100644
index 9c0b22b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-010.jpg
deleted file mode 100644
index d9b6dfb..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-011.png b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-011.png
deleted file mode 100644
index fed9d08..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-011.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-012.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-012.jpg
deleted file mode 100644
index 1bb3375..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-012.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-013.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-013.jpg
deleted file mode 100644
index 6112fe9..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-013.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-014.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-014.jpg
deleted file mode 100644
index 244dcd3..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_128/image-014.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-1.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-1.jpg
deleted file mode 100644
index b06d4f1..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-1.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-10.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-10.jpg
deleted file mode 100644
index 01b1615..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-10.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-2.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-2.jpg
deleted file mode 100644
index c339466..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-2.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-3.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-3.jpg
deleted file mode 100644
index 2a650b2..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-3.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-4.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-4.jpg
deleted file mode 100644
index fbdc906..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-4.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-5.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-5.jpg
deleted file mode 100644
index 2d89f82..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-5.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-6.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-6.jpg
deleted file mode 100644
index dc4d579..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-6.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-7.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-7.jpg
deleted file mode 100644
index e09b843..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-7.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-8.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-8.jpg
deleted file mode 100644
index 8b09009..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-8.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-9.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-9.jpg
deleted file mode 100644
index 95320a4..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_32/image-9.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-001.jpg
deleted file mode 100644
index 02f9d08..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-002.jpg
deleted file mode 100644
index 23054bf..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-003.jpg
deleted file mode 100644
index e375f64..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-004.jpg
deleted file mode 100644
index 3166f7b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-005.jpg
deleted file mode 100644
index 3b87463..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-006.jpg
deleted file mode 100644
index 14fb03f..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-007.jpg
deleted file mode 100644
index baeddab..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-008.jpg
deleted file mode 100644
index 4ba7c1e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-009.jpg
deleted file mode 100644
index 6a67ddc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-010.jpg
deleted file mode 100644
index f6bf568..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-011.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-011.jpg
deleted file mode 100644
index a0ae75f..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39/image-011.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-001.jpg
deleted file mode 100644
index 4e3d772..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-002.jpg
deleted file mode 100644
index 0886bc4..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-003.jpg
deleted file mode 100644
index 693d28a..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-004.jpg
deleted file mode 100644
index 643259d..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-005.jpg
deleted file mode 100644
index 789c186..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-006.jpg
deleted file mode 100644
index 822214b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-007.jpg
deleted file mode 100644
index 455ded4..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-008.jpg
deleted file mode 100644
index a7e4961..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-009.jpg
deleted file mode 100644
index 7b654b5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-010.jpg
deleted file mode 100644
index 416eca8..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-011.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-011.jpg
deleted file mode 100644
index d7ba4cf..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_39_vin/image-011.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-001.jpg
deleted file mode 100644
index ee3ed5a..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-002.jpg
deleted file mode 100644
index b9e0efd..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-003.jpg
deleted file mode 100644
index ff1c960..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-004.jpg
deleted file mode 100644
index c96c227..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-005.jpg
deleted file mode 100644
index 99d26ee..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-006.jpg
deleted file mode 100644
index 1154d8a..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-007.jpg
deleted file mode 100644
index 1b7eb41..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-008.jpg
deleted file mode 100644
index 1c809ca..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-009.jpg
deleted file mode 100644
index 3c98ed2..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-010.jpg
deleted file mode 100644
index 7f5a0e1..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-011.jpg b/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-011.jpg
deleted file mode 100644
index ea986fc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/code_93/image-011.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-001.jpg
deleted file mode 100644
index 36adff7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-002.jpg
deleted file mode 100644
index eee42c3..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-003.jpg
deleted file mode 100644
index e438fb8..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-004.jpg
deleted file mode 100644
index b2c5e9c..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-005.jpg
deleted file mode 100644
index affd510..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-006.jpg
deleted file mode 100644
index 6561f09..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-007.jpg
deleted file mode 100644
index 88c5f8f..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-008.jpg
deleted file mode 100644
index e80f70b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-009.jpg
deleted file mode 100644
index 825ac92..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean/image-010.jpg
deleted file mode 100644
index 6a5a833..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-001.jpg
deleted file mode 100644
index feec877..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-002.jpg
deleted file mode 100644
index a448baa..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-003.jpg
deleted file mode 100644
index e7aed95..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-004.jpg
deleted file mode 100644
index 41a003e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-005.jpg
deleted file mode 100644
index 4d9d04e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-006.jpg
deleted file mode 100644
index 53a52fb..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-007.jpg
deleted file mode 100644
index ccdfc94..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-008.jpg
deleted file mode 100644
index 74dfdbc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-009.jpg
deleted file mode 100644
index 1c456c0..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-010.jpg
deleted file mode 100644
index dd41fbd..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_8/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-001.jpg
deleted file mode 100644
index 0bf2ce2..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-002.jpg
deleted file mode 100644
index 5d6d9eb..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-003.jpg
deleted file mode 100644
index c04f4e8..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-004.jpg
deleted file mode 100644
index 1ed3cbc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-005.jpg
deleted file mode 100644
index 5cf81a7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-006.jpg
deleted file mode 100644
index 92f7cfd..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-007.jpg
deleted file mode 100644
index 599e442..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-008.jpg
deleted file mode 100644
index c93b591..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-009.jpg
deleted file mode 100644
index 17fe6c2..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-010.jpg
deleted file mode 100644
index 3869850..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/ean_extended/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-001.jpg
deleted file mode 100644
index 7212c84..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-002.jpg
deleted file mode 100644
index 8a3eeb9..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-003.jpg
deleted file mode 100644
index 808c7ab..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-004.jpg
deleted file mode 100644
index 8b32201..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-005.jpg
deleted file mode 100644
index bf727d6..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-011.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-011.jpg
deleted file mode 100644
index c260fd6..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-011.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-012.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-012.jpg
deleted file mode 100644
index 6897e92..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-012.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-013.jpg b/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-013.jpg
deleted file mode 100644
index da824b6..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/i2of5/image-013.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/no_code/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/no_code/image-001.jpg
deleted file mode 100644
index c0580f4..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/no_code/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/all-wide-131070.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/all-wide-131070.png
deleted file mode 100644
index 5355218..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/all-wide-131070.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-001.jpg
deleted file mode 100644
index 79e4a30..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-002.jpg
deleted file mode 100644
index 29b9117..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-003.jpg
deleted file mode 100644
index e76fd7e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-004.jpg
deleted file mode 100644
index ba69803..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-005.jpg
deleted file mode 100644
index 544004b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-006.jpg
deleted file mode 100644
index 9e328b5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-007.jpg
deleted file mode 100644
index ff07f16..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-008.jpg
deleted file mode 100644
index a24a353..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-009.jpg
deleted file mode 100644
index 59b8229..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-010.jpg
deleted file mode 100644
index c5a5a75..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-011.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-011.jpg
deleted file mode 100644
index 3cc038e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-011.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-012.jpg b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-012.jpg
deleted file mode 100644
index 1b0f069..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-012.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-013.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-013.png
deleted file mode 100644
index df71d2f..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-013.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-014.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-014.png
deleted file mode 100644
index 36c5b51..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-014.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-015.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-015.png
deleted file mode 100644
index 8b58a8e..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-015.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016-sheared.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016-sheared.png
deleted file mode 100644
index 147c5d6..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016-sheared.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016.png
deleted file mode 100644
index 29c06bc..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-016.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-017.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-017.png
deleted file mode 100644
index 02764df..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-017.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-018.png b/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-018.png
deleted file mode 100644
index 033fc88..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/pharmacode/image-018.png and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/test image with spaces.jpg b/quagga2/quagga2-1.12.1/test/fixtures/test image with spaces.jpg
deleted file mode 100644
index 2075809..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/test image with spaces.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-001.jpg
deleted file mode 100644
index 2c2ce01..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-002.jpg
deleted file mode 100644
index 6fa5d69..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-003.jpg
deleted file mode 100644
index de4b192..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-004.jpg
deleted file mode 100644
index 2e17c6c..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-005.jpg
deleted file mode 100644
index 45f3103..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-006.jpg
deleted file mode 100644
index 0ba1946..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-007.jpg
deleted file mode 100644
index 214dac5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-008.jpg
deleted file mode 100644
index 292f737..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-009.jpg
deleted file mode 100644
index 250ae6b..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc/image-010.jpg
deleted file mode 100644
index da3be38..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-001.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-001.jpg
deleted file mode 100644
index d017f20..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-001.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-002.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-002.jpg
deleted file mode 100644
index ba71ce7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-002.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-003.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-003.jpg
deleted file mode 100644
index b2603e5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-003.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-004.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-004.jpg
deleted file mode 100644
index 8e4e542..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-004.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-005.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-005.jpg
deleted file mode 100644
index 79314dd..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-005.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-006.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-006.jpg
deleted file mode 100644
index 1b83176..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-006.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-007.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-007.jpg
deleted file mode 100644
index 00e90c5..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-007.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-008.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-008.jpg
deleted file mode 100644
index 054f486..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-008.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-009.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-009.jpg
deleted file mode 100644
index 59a6c77..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-009.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-010.jpg b/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-010.jpg
deleted file mode 100644
index 1bafdf7..0000000
Binary files a/quagga2/quagga2-1.12.1/test/fixtures/upc_e/image-010.jpg and /dev/null differ
diff --git a/quagga2/quagga2-1.12.1/test/integration/README.md b/quagga2/quagga2-1.12.1/test/integration/README.md
deleted file mode 100644
index aa8a9f7..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/README.md
+++ /dev/null
@@ -1,190 +0,0 @@
-# Integration Tests
-
-## Test Infrastructure
-
-This directory contains integration tests for Quagga2's barcode decoder functionality. The tests have been organized into separate files per decoder type for better maintainability.
-
-### File Structure
-
-- `helpers.ts` - Shared test utilities and configuration functions
-- `integration.spec.ts` - General integration tests (parallel decoding, edge cases)
-- `decoders/` - Individual decoder test files:
- - `ean.spec.ts` - EAN-13 barcode tests
- - `ean_extended.spec.ts` - EAN with supplements (EAN-2, EAN-5)
- - `ean_8.spec.ts` - EAN-8 barcode tests
- - `upc.spec.ts` - UPC-A barcode tests
- - `upc_e.spec.ts` - UPC-E barcode tests
- - `code_128.spec.ts` - Code 128 barcode tests
- - `code_39.spec.ts` - Code 39 barcode tests
- - `code_39_vin.spec.ts` - Code 39 VIN (Vehicle Identification Number) tests
- - `code_32.spec.ts` - Code 32 (Italian Pharmacode) tests
- - `code_93.spec.ts` - Code 93 barcode tests
- - `codabar.spec.ts` - Codabar barcode tests
- - `i2of5.spec.ts` - Interleaved 2 of 5 barcode tests
- - `2of5.spec.ts` - Standard 2 of 5 barcode tests
- - `external-reader.spec.ts` - Tests for external reader functionality
-
-### Test Behavior
-
-By default, all decoder tests **must pass in both Node and browser environments**. If a test fails, the entire test run fails, alerting developers to regressions.
-
-For tests that are known to fail in specific environments, you can use environment-specific flags to mark them explicitly. **These flags are the single authoritative source** for test failure configuration.
-
-### Test Helper: `it.allowFail()`
-
-The `it.allowFail()` helper is used internally when a test is marked with environment-specific failure flags. When a test fails in an allowed environment, it will be marked as "pending" instead of causing the test run to fail.
-
-### Marking Tests with Environment-Specific Flags
-
-In the test data structures, you can mark individual test cases with explicit environment-specific failure policies:
-
-- **`allowFailInNode: true`**: Test can fail in Node environment without failing the build
-- **`allowFailInBrowser: true`**: Test can fail in browser environment without failing the build
-- **Both flags**: Test can fail in both environments - set both flags explicitly
-
-```typescript
-runDecoderTest('code_128', generateConfig(), [
- // This test passes everywhere - no flags needed, will fail build if it breaks
- { 'name': 'image-001.jpg', 'result': '0001285112001000040801', format: 'code_128' },
-
- // This test passes in Node but fails in browser - use allowFailInBrowser only
- { 'name': 'image-003.jpg', 'result': '673023', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
-
- // This test fails in both environments - set BOTH flags explicitly
- { 'name': 'failing-test.jpg', 'result': '123456', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
-]);
-```
-
-## Current Test Status
-
-As of the latest update:
-
-- **399 tests passing** (improved from 387, +12 tests)
-- **~54 tests pending** in both Node and browser (down from 64)
-- Tests are balanced between environments
-
-### Configuration Improvements
-
-Recent optimizations have significantly improved decoder accuracy:
-
-**EAN-8 Decoder:**
-
-- Changed `patchSize` from `'medium'` to `'large'` for better accuracy
-- Fixed: image-004 now decodes correctly with halfSample:true
-- Trade-off: image-003 now fails in browser with halfSample:false (marked with `allowFailInBrowser`)
-
-**Code 39 VIN Decoder:**
-
-- Increased `inputStream.size` from 1280 â 2000 â **2200** (2x the 1100px original image size)
-- Fixed: 5 images now pass (001, 003, 005, 006, 011) - improved from only 1 passing
-- Note: 6 images still fail (002, 004, 007, 008, 009, 010) even with optimal settings - marked with both allowFail flags
-- Testing revealed performance peaks around 2x: 3x and 4x scaling both perform worse (5/11 vs 10/11 passing)
-
-**Interleaved 2 of 5 (i2of5) Decoder:**
-
-- Set `inputStream.size` to **1375** (1.25x the 1100px original)
-- **Perfect accuracy**: All 5 test images now pass in both halfSample modes (10/10 tests)
-- Testing showed 1.25x-1.5x work well for these test images
-- Performance degrades at higher scaling: 2.5x causes complete failure in halfSample:false mode
-
-**Key Insight - Upscaling Improves Detection:**
-
-Contrary to conventional wisdom, **upscaling images can significantly improve barcode detection accuracy**. Testing showed:
-
-- Upscaling improves detection in **both** halfSample:true and halfSample:false modes
-- Integer scaling factors (2x) provide clean pixel doubling with minimal interpolation artifacts
-- Optimal scaling varies by image content and quality, not necessarily by barcode type
-- Performance typically peaks at moderate upscaling (1.25x-2x) and degrades beyond 2.5x
-- The interpolation acts as a smoothing filter, providing more pixels per bar for the locator to analyze
-
-### Decoders with Targeted Configurations
-
-- **ean_8**: Uses `patchSize: 'large'` (improved accuracy)
-- **code_39_vin**: Uses `inputStream.size: 2200` (2x scaling for optimal accuracy)
-- **i2of5**: Uses `inputStream.size: 1375` and `patchSize: 'small'` (1.25x scaling, perfect 100% accuracy)
-- **code_32**: Uses `patchSize: 'large'` and `inputStream.size: 1280`
-- **code_93**: Uses `patchSize: 'large'`
-
-## Running Tests
-
-```bash
-# Run all integration tests in Node
-npx ts-mocha -p test/tsconfig.json test/integration/**/*.spec.ts
-
-# Run all tests (including integration tests)
-npm run test:node
-
-# Run browser tests (requires Cypress)
-npm run test:browser-all
-```
-
-## Adding New Tests
-
-When adding new decoder test cases:
-
-1. Add the test data to the appropriate `runDecoderTest()` call **without** any flags
-2. Run the tests in both Node and browser environments
-3. Based on the results, add explicit flags:
- - **Passes everywhere**: Leave without flags
- - **Fails only in Node**: Add `allowFailInNode: true`
- - **Fails only in browser**: Add `allowFailInBrowser: true`
- - **Fails in both**: Add **both** `allowFailInNode: true` and `allowFailInBrowser: true`
-
-Example:
-
-```typescript
-runDecoderTest('my_decoder', generateConfig(), [
- // Passes everywhere - no flags needed
- { 'name': 'working-image.jpg', 'result': '123456', format: 'my_format' },
-
- // Passes in Node, fails in browser - set allowFailInBrowser only
- { 'name': 'browser-issue.jpg', 'result': '789012', format: 'my_format', allowFailInBrowser: true },
-
- // Fails in both environments - set BOTH flags explicitly
- { 'name': 'problematic-image.jpg', 'result': '345678', format: 'my_format', allowFailInNode: true, allowFailInBrowser: true },
-]);
-```
-
-## Fixing Failing Tests
-
-When you fix a test that was marked with failure flags:
-
-**For tests with both `allowFailInNode` and `allowFailInBrowser`:**
-
-1. Remove both flags from the test
-2. Verify the test passes consistently in both Node and browser environments
-3. The test will now fail the build if it breaks in either environment
-
-**For tests with `allowFailInBrowser` only:**
-
-1. Fix the browser-specific issue
-2. Remove the `allowFailInBrowser: true` flag
-3. Verify the test passes in both Node and browser
-4. The test will now fail the build if it breaks in either environment
-
-**For tests with `allowFailInNode` only:**
-
-1. Fix the Node-specific issue
-2. Remove the `allowFailInNode: true` flag
-3. Verify the test passes in both Node and browser
-4. The test will now fail the build if it breaks in either environment
-
-## Design Philosophy
-
-The default behavior is "tests must pass in both environments" to catch regressions early. Environment-specific failure flags provide explicit control:
-
-- **Single source of truth** - Test item flags in the spec files are the authoritative configuration
-- **Regressions are caught immediately** - If a working test breaks, the build fails
-- **Environment-specific exceptions** - Tests can be marked to allow failure in specific environments only
-- **No implicit behavior** - Flags must be set explicitly for each environment
-- **Clear intent** - Flags clearly indicate which environments have known issues
-
-## Browser vs Node Differences
-
-CI runs integration tests in **both Cypress (browser) and ts-node (Node.js)**. Some tests behave differently between these environments due to differences in image processing (Browser uses native Canvas API, Node uses the `canvas` package).
-
-### Configuration Trade-offs
-
-When optimizing decoder configurations for accuracy, some changes may improve one test while causing another to fail. These trade-offs are documented with comments in the decoder spec files and marked with appropriate failure flags.
-
-Example: Changing EAN-8's `patchSize` to `'large'` fixed image-004 but caused image-003 to fail in the browser environment. The net result is still positive (more tests passing overall), and the failure is explicitly marked.
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/2of5.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/2of5.spec.ts
deleted file mode 100644
index d3af0ff..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/2of5.spec.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('2 of 5 Decoder Tests', () => {
- const twoOf5TestSet = [
- { 'name': 'image-001.jpg', 'result': '9577149002', format: '2of5' },
- { 'name': 'image-002.jpg', 'result': '9577149002', format: '2of5' },
- { 'name': 'image-003.jpg', 'result': '5776158811', format: '2of5' },
- { 'name': 'image-004.jpg', 'result': '0463381455', format: '2of5' },
- { 'name': 'image-005.jpg', 'result': '3261594101', format: '2of5', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-006.jpg', 'result': '3261594101', format: '2of5', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-007.jpg', 'result': '3261594101', format: '2of5' },
- { 'name': 'image-008.jpg', 'result': '6730705801', format: '2of5' },
- { 'name': 'image-009.jpg', 'result': '5776158811', format: '2of5' },
- { 'name': 'image-010.jpg', 'result': '5776158811', format: '2of5' },
- ];
- runDecoderTestBothHalfSample('2of5', (halfSample) => generateConfig({
- inputStream: { size: 800, singleChannel: false },
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['2of5_reader'],
- },
- }), twoOf5TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/codabar.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/codabar.spec.ts
deleted file mode 100644
index 62a82d0..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/codabar.spec.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Codabar Decoder Tests', () => {
- const codabarTestSet = [
- { 'name': 'image-001.jpg', 'result': 'A10/53+17-70D', format: 'codabar' },
- { 'name': 'image-002.jpg', 'result': 'B546745735B', format: 'codabar' },
- { 'name': 'image-003.jpg', 'result': 'C$399.95A', format: 'codabar' },
- { 'name': 'image-004.jpg', 'result': 'B546745735B', format: 'codabar' },
- { 'name': 'image-005.jpg', 'result': 'C$399.95A', format: 'codabar' },
- { 'name': 'image-006.jpg', 'result': 'B546745735B', format: 'codabar' },
- { 'name': 'image-007.jpg', 'result': 'C$399.95A', format: 'codabar' },
- { 'name': 'image-008.jpg', 'result': 'A16:9/4:3/3:2D', format: 'codabar', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-009.jpg', 'result': 'C$399.95A', format: 'codabar' },
- { 'name': 'image-010.jpg', 'result': 'C$399.95A', format: 'codabar' },
- ];
- runDecoderTestBothHalfSample('codabar', (halfSample) => generateConfig({
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['codabar_reader']
- }
- }), codabarTestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/code_128.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/code_128.spec.ts
deleted file mode 100644
index 02cbd4f..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/code_128.spec.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Code 128 Decoder Tests', () => {
- // Note: FNC1 characters are represented as ASCII 29 (Group Separator, \x1D or \u001d)
- // These are used in GS1-128 barcodes as field separators
- const FNC1 = String.fromCharCode(29);
- const code128TestSet = [
- { 'name': 'image-001.jpg', 'result': '0001285112001000040801', format: 'code_128' },
- { 'name': 'image-002.jpg', 'result': 'FANAVF14617104', format: 'code_128' },
- { 'name': 'image-003.jpg', 'result': '673023', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-004.jpg', 'result': '010210150301625334', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-005.jpg', 'result': '419055603900009001012999', format: 'code_128' },
- { 'name': 'image-006.jpg', 'result': '419055603900009001012999', format: 'code_128' },
- // GS1-128 barcode with FNC1 characters as field separators
- { 'name': 'image-007.jpg', 'result': `${FNC1}42095747${FNC1}9499907123456123456781`, format: 'code_128' },
- { 'name': 'image-008.jpg', 'result': '1020185021797280784055', format: 'code_128' },
- { 'name': 'image-009.jpg', 'result': '0001285112001000040801', format: 'code_128' },
- { 'name': 'image-010.jpg', 'result': '673023', format: 'code_128' },
- // TODO: need to implement having different inputStream parameters to be able to
- // read this one -- it works only with inputStream size set to 1600 presently, but
- // other samples break at that high a size.
- // { name: 'image-011.png', result: '33c64780-a9c0-e92a-820c-fae7011c11e2' },
- // GS1-128 barcodes from issue #390 - real-world food packaging barcodes
- // image-012 works with halfSample: false, but not with halfSample: true
- { 'name': 'image-012.jpg', 'result': '01906641589574681121102531020003402152731515', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- // image-013 and image-014 require higher resolution settings to decode properly
- // According to issue #390, image-013 needs size: 1280, patchSize: 'small'
- // and image-014 needs size: 1600, patchSize: 'large'
- { 'name': 'image-013.jpg', 'result': '', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-014.jpg', 'result': '', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- ];
- runDecoderTestBothHalfSample('code_128', (halfSample) => generateConfig({
- inputStream: {
- size: 800,
- singleChannel: false,
- },
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['code_128_reader'],
- },
- }), code128TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/code_32.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/code_32.spec.ts
deleted file mode 100644
index 3b068e9..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/code_32.spec.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Code 32 Decoder Tests', () => {
- const code32TestSet = [
- { name: 'image-1.jpg', result: 'A123456788', format: 'code_32_reader' },
- { name: 'image-2.jpg', result: 'A931028462', format: 'code_32_reader', allowFailInNode: true },
- { name: 'image-3.jpg', result: 'A931028462', format: 'code_32_reader', allowFailInNode: true },
- { name: 'image-4.jpg', result: 'A935776043', format: 'code_32_reader' },
- { name: 'image-5.jpg', result: 'A935776043', format: 'code_32_reader' },
- { name: 'image-6.jpg', result: 'A012745182', format: 'code_32_reader', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-7.jpg', result: 'A029651039', format: 'code_32_reader', allowFailInNode: true },
- { name: 'image-8.jpg', result: 'A029651039', format: 'code_32_reader', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-9.jpg', result: 'A015896018', format: 'code_32_reader' },
- { name: 'image-10.jpg', result: 'A015896018', format: 'code_32_reader' },
- ];
- runDecoderTestBothHalfSample('code_32', (halfSample) => generateConfig({
- inputStream: {
- size: 1280,
- },
- locator: {
- patchSize: 'large',
- halfSample,
- },
- numOfWorkers: 4,
- decoder: {
- readers: ['code_32_reader']
- }
- }), code32TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/code_39.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/code_39.spec.ts
deleted file mode 100644
index b967ac0..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/code_39.spec.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Code 39 Decoder Tests', () => {
- const code39TestSet = [
- { 'name': 'image-001.jpg', 'result': 'B3% $DAD$', format: 'code_39' },
- { 'name': 'image-003.jpg', 'result': 'CODE39', format: 'code_39' },
- { 'name': 'image-004.jpg', 'result': 'QUAGGAJS', format: 'code_39' },
- { 'name': 'image-005.jpg', 'result': 'CODE39', format: 'code_39', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-006.jpg', 'result': '2/4-8/16-32', format: 'code_39' },
- { 'name': 'image-007.jpg', 'result': '2/4-8/16-32', format: 'code_39' },
- { 'name': 'image-008.jpg', 'result': 'CODE39', format: 'code_39' },
- { 'name': 'image-009.jpg', 'result': '2/4-8/16-32', format: 'code_39' },
- // TODO: image 10 in this set appears to be dependent upon #191
- { 'name': 'image-010.jpg', 'result': 'CODE39', format: 'code_39' },
- { 'name': 'image-011.jpg', 'result': '4', format: 'code_39', allowFailInNode: true, allowFailInBrowser: true },
- ];
- runDecoderTestBothHalfSample('code_39', (halfSample) => generateConfig({
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['code_39_reader'],
- }
- }), code39TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/code_39_vin.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/code_39_vin.spec.ts
deleted file mode 100644
index fc96bfe..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/code_39_vin.spec.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Code 39 VIN Decoder Tests', () => {
- const code39VinTestSet = [
- { name: 'image-001.jpg', result: '2HGFG1B86BH501831', format: 'code_39_vin' },
- { name: 'image-002.jpg', result: 'JTDKB20U887718156', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-003.jpg', result: 'JM1BK32G071773697', format: 'code_39_vin' },
- { name: 'image-004.jpg', result: 'WDBTK75G94T028954', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-005.jpg', result: '3VW2K7AJ9EM381173', format: 'code_39_vin' },
- { name: 'image-006.jpg', result: 'JM1BL1H4XA1335663', format: 'code_39_vin' },
- { name: 'image-007.jpg', result: 'JHMGE8H42AS021233', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-008.jpg', result: 'WMEEJ3BA4DK652562', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true },
- { name: 'image-009.jpg', result: 'WMEEJ3BA4DK652562', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true }, //yes, 8 and 9 are same barcodes, different images slightly
- { name: 'image-010.jpg', result: 'WMEEJ3BA4DK652562', format: 'code_39_vin', allowFailInNode: true, allowFailInBrowser: true }, // 10 also
- { name: 'image-011.jpg', result: '5FNRL38488B411196', format: 'code_39_vin' },
- ];
- runDecoderTestBothHalfSample('code_39_vin', (halfSample) => generateConfig({
- inputStream: {
- size: 2200, // 2x scaling (from 1100x658) provides optimal detection accuracy
- sequence: false,
- },
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['code_39_vin_reader'],
- },
- }), code39VinTestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/code_93.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/code_93.spec.ts
deleted file mode 100644
index c769096..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/code_93.spec.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Code 93 Decoder Tests', () => {
- const code93TestSet = [
- { 'name': 'image-001.jpg', 'result': 'WIWV8ETQZ1', format: 'code_93' },
- { 'name': 'image-002.jpg', 'result': 'EH3C-%GU23RK3', format: 'code_93' },
- { 'name': 'image-003.jpg', 'result': 'O308SIHQOXN5SA/PJ', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-004.jpg', 'result': 'DG7Q$TV8JQ/EN', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-005.jpg', 'result': 'DG7Q$TV8JQ/EN', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-006.jpg', 'result': 'O308SIHQOXN5SA/PJ', format: 'code_93' },
- { 'name': 'image-007.jpg', 'result': 'VOFD1DB5A.1F6QU', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-008.jpg', 'result': 'WIWV8ETQZ1', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-009.jpg', 'result': '4SO64P4X8 U4YUU1T-', format: 'code_93' },
- { 'name': 'image-010.jpg', 'result': '4SO64P4X8 U4YUU1T-', format: 'code_93', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-011.jpg', result: '11169', format: 'code_93' },
- ];
- runDecoderTestBothHalfSample('code_93', (halfSample) => generateConfig({
- inputStream: { size: 800, singleChannel: false },
- locator: {
- patchSize: 'large',
- halfSample,
- },
- decoder: {
- readers: ['code_93_reader'],
- },
- }), code93TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/ean.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/ean.spec.ts
deleted file mode 100644
index 89e7ec0..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/ean.spec.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('EAN Decoder Tests', () => {
- const eanTestSet = [
- { 'name': 'image-001.jpg', 'result': '3574660239843', format: 'ean_13' },
- { 'name': 'image-002.jpg', 'result': '8032754490297', format: 'ean_13' },
- { 'name': 'image-004.jpg', 'result': '9002233139084', format: 'ean_13' },
- { 'name': 'image-003.jpg', 'result': '4006209700068', format: 'ean_13' },
- { 'name': 'image-005.jpg', 'result': '8004030044005', format: 'ean_13' },
- { 'name': 'image-006.jpg', 'result': '4003626011159', format: 'ean_13' },
- { 'name': 'image-007.jpg', 'result': '2111220009686', format: 'ean_13' },
- { 'name': 'image-008.jpg', 'result': '9000275609022', format: 'ean_13' },
- { 'name': 'image-009.jpg', 'result': '9004593978587', format: 'ean_13' },
- { 'name': 'image-010.jpg', 'result': '9002244845578', format: 'ean_13' },
- ];
- runDecoderTestBothHalfSample('ean', (halfSample) => generateConfig({ locator: { halfSample } }), eanTestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_8.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/ean_8.spec.ts
deleted file mode 100644
index 15676bc..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_8.spec.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('EAN-8 Decoder Tests', () => {
- const ean8TestSet = [
- { 'name': 'image-001.jpg', 'result': '42191605', format: 'ean_8' },
- { 'name': 'image-002.jpg', 'result': '42191605', format: 'ean_8' },
- { 'name': 'image-003.jpg', 'result': '90311208', format: 'ean_8', allowFailInBrowser: true },
- { 'name': 'image-004.jpg', 'result': '24057257', format: 'ean_8' },
- // {"name": "image-005.jpg", "result": "90162602"},
- { 'name': 'image-006.jpg', 'result': '24036153', format: 'ean_8' },
- // {"name": "image-007.jpg", "result": "42176817"},
- { 'name': 'image-008.jpg', 'result': '42191605', format: 'ean_8' },
- { 'name': 'image-009.jpg', 'result': '42242215', format: 'ean_8', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-010.jpg', 'result': '42184799', format: 'ean_8' },
- ];
- runDecoderTestBothHalfSample('ean_8', (halfSample) => generateConfig({
- locator: {
- patchSize: 'large',
- halfSample,
- },
- decoder: {
- readers: ['ean_8_reader']
- }
- }), ean8TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_extended.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/ean_extended.spec.ts
deleted file mode 100644
index e5f3c72..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_extended.spec.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('EAN Extended Decoder Tests', () => {
- // Note: The main result's format is 'ean_13' (the parent barcode format).
- // The supplement's format is available in result.codeResult.supplement.format
- // and will correctly be 'ean_2' or 'ean_5' depending on the supplement type.
- const eanExtendedTestSet = [
- { 'name': 'image-001.jpg', 'result': '900437801102701', format: 'ean_13', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-002.jpg', 'result': '419871600890101', format: 'ean_13' },
- { 'name': 'image-003.jpg', 'result': '419871600890101', format: 'ean_13', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-004.jpg', 'result': '978054466825652495', format: 'ean_13' },
- { 'name': 'image-005.jpg', 'result': '419664190890712', format: 'ean_13', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-006.jpg', 'result': '412056690699101', format: 'ean_13', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-007.jpg', 'result': '419204531290601', format: 'ean_13' },
- { 'name': 'image-008.jpg', 'result': '419871600890101', format: 'ean_13' },
- { 'name': 'image-009.jpg', 'result': '978054466825652495', format: 'ean_13' },
- { 'name': 'image-010.jpg', 'result': '900437801102701', format: 'ean_13' },
- ];
- runDecoderTestBothHalfSample('ean_extended', (halfSample) => generateConfig({
- inputStream: {
- size: 800,
- singleChannel: false,
- },
- locator: {
- halfSample,
- },
- decoder: {
- readers: [{
- format: 'ean_reader',
- config: {
- supplements: [
- 'ean_5_reader',
- 'ean_2_reader',
- ],
- },
- }],
- },
- }), eanExtendedTestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_supplement_format.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/ean_supplement_format.spec.ts
deleted file mode 100644
index 2d18b45..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/ean_supplement_format.spec.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import Quagga from '../../../src/quagga';
-import { expect } from 'chai';
-import { it } from '../helpers';
-
-describe('EAN Supplement Format Tests', () => {
- // Test that verifies the supplement format is correctly returned as 'ean_2' or 'ean_5'
- // rather than inheriting the parent 'ean_13' format
-
- const isBrowser = typeof window !== 'undefined';
- const fixturePrefix = isBrowser ? '/' : '';
-
- const baseConfig = {
- inputStream: {
- size: 800,
- singleChannel: false,
- },
- locator: {
- patchSize: 'medium' as const,
- halfSample: false,
- },
- numOfWorkers: 0,
- decoder: {
- readers: [{
- format: 'ean_reader',
- config: {
- supplements: [
- 'ean_5_reader',
- 'ean_2_reader',
- ],
- },
- }],
- },
- };
-
- it('should return ean_2 format for 2-digit supplement', async function() {
- this.timeout(30000);
-
- const config = {
- ...baseConfig,
- src: `${fixturePrefix}test/fixtures/ean_extended/image-002.jpg`, // EAN-13 with 2-digit supplement
- };
-
- const result = await Quagga.decodeSingle(config);
-
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.format).to.equal('ean_13');
- expect(result.codeResult.supplement).to.be.an('Object');
- expect(result.codeResult.supplement.format).to.equal('ean_2');
- expect(result.codeResult.supplement.code).to.equal('01');
- });
-
- it('should return ean_5 format for 5-digit supplement', async function() {
- this.timeout(30000);
-
- const config = {
- ...baseConfig,
- src: `${fixturePrefix}test/fixtures/ean_extended/image-004.jpg`, // EAN-13 with 5-digit supplement
- };
-
- const result = await Quagga.decodeSingle(config);
-
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.format).to.equal('ean_13');
- expect(result.codeResult.supplement).to.be.an('Object');
- expect(result.codeResult.supplement.format).to.equal('ean_5');
- expect(result.codeResult.supplement.code).to.equal('52495');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/i2of5.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/i2of5.spec.ts
deleted file mode 100644
index 8e58304..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/i2of5.spec.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('Interleaved 2 of 5 Decoder Tests', () => {
- const i2of5TestSet = [
- { 'name': 'image-001.jpg', 'result': '2167361334', format: 'i2of5' },
- { 'name': 'image-002.jpg', 'result': '2167361334', format: 'i2of5' },
- { 'name': 'image-003.jpg', 'result': '2167361334', format: 'i2of5' },
- { 'name': 'image-004.jpg', 'result': '2167361334', format: 'i2of5' },
- { 'name': 'image-005.jpg', 'result': '2167361334', format: 'i2of5' },
- ];
- runDecoderTestBothHalfSample('i2of5', (halfSample) => generateConfig({
- inputStream: { size: 1375, singleChannel: false }, // 1.25x scaling (from 1100x658) provides optimal detection
- locator: {
- patchSize: 'small',
- halfSample,
- },
- decoder: {
- readers: ['i2of5_reader'],
- },
- }), i2of5TestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/pharmacode.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/pharmacode.spec.ts
deleted file mode 100644
index db53344..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/pharmacode.spec.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-import { runDecoderTestBothHalfSample, runNoCodeTest, generateConfig } from '../helpers';
-
-describe('Pharmacode Decoder Tests', () => {
- // Synthetic test images with known values
- // Note: Tests only run with halfSample: false currently work reliably
- // halfSample: true causes bar width detection issues for some images
- const pharmacodeTestSet = [
- { 'name': 'image-001.jpg', 'result': '3', format: 'pharmacode' },
- { 'name': 'image-002.jpg', 'result': '7', format: 'pharmacode' },
- { 'name': 'image-003.jpg', 'result': '12', format: 'pharmacode' },
- { 'name': 'image-004.jpg', 'result': '15', format: 'pharmacode' },
- { 'name': 'image-005.jpg', 'result': '64', format: 'pharmacode' },
- { 'name': 'image-006.jpg', 'result': '100', format: 'pharmacode' },
- { 'name': 'image-007.jpg', 'result': '255', format: 'pharmacode' },
- { 'name': 'image-008.jpg', 'result': '755', format: 'pharmacode' },
- { 'name': 'image-009.jpg', 'result': '1000', format: 'pharmacode' },
- { 'name': 'image-010.jpg', 'result': '4096', format: 'pharmacode' },
- { 'name': 'image-011.jpg', 'result': '12345', format: 'pharmacode' },
- { 'name': 'image-012.jpg', 'result': '65535', format: 'pharmacode' },
- ];
-
- // Real-world test images added by @ericblade
- // Images 013, 014, 018 contain Pharmacode value 123456
- // Image 017 contains multiple barcodes: 4174 and 3715
- // Images 015, 016 have unknown values
-
- const pharmacodeRealWorldPositiveTestSet = [
- { 'name': 'image-013.png', 'result': '123456', format: 'pharmacode' },
- // image-014 is two-track pharmacode, not supported at the moment -- maybe not ever depending on difficulty level
- // { 'name': 'image-014.png', 'result': '123456', format: 'pharmacode' },
- ];
-
- // image-018 requires a constrained scan window to avoid false positives elsewhere in the frame
- // still working out how to fix the false positive from the "orange and white" barcode.
- const pharmacodeRealWorldAreaConstrainedTestSet = [
- { 'name': 'image-018.png', 'result': '123456', format: 'pharmacode' },
- ];
-
- // Images intentionally expected to decode nothing (should succeed with empty result)
- const pharmacodeRealWorldNoCodeTestSet = [
- { 'name': 'image-015.png', 'result': '', format: 'pharmacode' },
- { 'name': 'image-016.png', 'result': '', format: 'pharmacode' },
- { 'name': 'image-016-sheared.png', 'result': '', format: 'pharmacode' },
- { 'name': 'image-017.png', 'result': '', format: 'pharmacode' },
- ];
-
- // Cross-barcode rejection: i2of5 images should be rejected by pharmacode reader
- // This ensures the pharmacode reader doesn't accidentally decode other barcode types
- const pharmacodeCrossBarcodeRejectionTestSet = [
- { 'name': 'image-011.jpg', 'result': '', format: 'pharmacode' },
- ];
-
- // Use locate: false since test images are synthetically generated and pre-cropped to contain only the barcode (location detection not required)
- runDecoderTestBothHalfSample('pharmacode set 1', (halfSample) => generateConfig({
- locate: false,
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['pharmacode_reader']
- }
- }), pharmacodeTestSet, 'pharmacode');
-
- runDecoderTestBothHalfSample('pharmacode set 2', (halfSample) => generateConfig({
- locate: false,
- inputStream: {
- size: 800,
- },
- locator: {
- halfSample,
- patchSize: 'large',
- },
- decoder: {
- readers: ['pharmacode_reader']
- }
- }), pharmacodeRealWorldPositiveTestSet, 'pharmacode');
-
- // Dedicated run for image-018 with a narrowed search area (bottom 50%) - top 50% has an unreadable code
- runDecoderTestBothHalfSample('pharmacode area constrained', (halfSample) => generateConfig({
- locate: false,
- inputStream: {
- size: 800,
- area: {
- top: '50%',
- },
- },
- locator: {
- halfSample,
- patchSize: 'large',
- },
- decoder: {
- readers: ['pharmacode_reader']
- }
- }), pharmacodeRealWorldAreaConstrainedTestSet, 'pharmacode');
-
- // Explicitly validate that certain images decode to nothing (empty barcodes array)
- [true, false].forEach((halfSample) => {
- runNoCodeTest(`pharmacode SHOULD NOT DECODE halfSample:${halfSample}`, generateConfig({
- locate: false,
- inputStream: {
- size: 800,
- },
- locator: {
- halfSample,
- patchSize: 'large',
- },
- decoder: {
- readers: ['pharmacode_reader']
- }
- }), pharmacodeRealWorldNoCodeTestSet, 'pharmacode');
- });
-
- // Cross-barcode rejection: Pharmacode reader should reject other barcode types (e.g., i2of5)
- [true, false].forEach((halfSample) => {
- runNoCodeTest(`pharmacode rejects i2of5 barcodes halfSample:${halfSample}`, generateConfig({
- locate: false,
- inputStream: {
- size: 800,
- },
- locator: {
- halfSample,
- patchSize: 'large',
- },
- decoder: {
- readers: ['pharmacode_reader']
- }
- }), pharmacodeCrossBarcodeRejectionTestSet, 'i2of5');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/upc.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/upc.spec.ts
deleted file mode 100644
index 2732374..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/upc.spec.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('UPC-A Decoder Tests', () => {
- const upcTestSet = [
- { 'name': 'image-001.jpg', 'result': '882428015268', format: 'upc_a' },
- { 'name': 'image-002.jpg', 'result': '882428015268', format: 'upc_a' },
- { 'name': 'image-003.jpg', 'result': '882428015084', format: 'upc_a' },
- { 'name': 'image-004.jpg', 'result': '882428015343', format: 'upc_a' },
- { 'name': 'image-005.jpg', 'result': '882428015343', format: 'upc_a' },
- { 'name': 'image-006.jpg', 'result': '882428015046', format: 'upc_a', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-007.jpg', 'result': '882428015084', format: 'upc_a' },
- { 'name': 'image-008.jpg', 'result': '882428015046', format: 'upc_a' },
- { 'name': 'image-009.jpg', 'result': '039047013551', format: 'upc_a' },
- { 'name': 'image-010.jpg', 'result': '039047013551', format: 'upc_a', allowFailInNode: true, allowFailInBrowser: true },
- ];
- runDecoderTestBothHalfSample('upc', (halfSample) => generateConfig({
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['upc_reader']
- }
- }), upcTestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/decoders/upc_e.spec.ts b/quagga2/quagga2-1.12.1/test/integration/decoders/upc_e.spec.ts
deleted file mode 100644
index 2ac5acb..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/decoders/upc_e.spec.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { runDecoderTestBothHalfSample, generateConfig } from '../helpers';
-
-describe('UPC-E Decoder Tests', () => {
- const upcETestSet = [
- { 'name': 'image-001.jpg', 'result': '04965802', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-002.jpg', 'result': '04965802', format: 'upc_e' },
- { 'name': 'image-003.jpg', 'result': '03897425', format: 'upc_e' },
- { 'name': 'image-004.jpg', 'result': '05096893', format: 'upc_e' },
- { 'name': 'image-005.jpg', 'result': '05096893', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-006.jpg', 'result': '05096893', format: 'upc_e' },
- { 'name': 'image-007.jpg', 'result': '03897425', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-008.jpg', 'result': '01264904', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-009.jpg', 'result': '01264904', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-010.jpg', 'result': '01264904', format: 'upc_e', allowFailInNode: true, allowFailInBrowser: true },
- ];
- runDecoderTestBothHalfSample('upc_e', (halfSample) => generateConfig({
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['upc_e_reader']
- }
- }), upcETestSet);
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/external-reader.spec.ts b/quagga2/quagga2-1.12.1/test/integration/external-reader.spec.ts
deleted file mode 100644
index e18a0b6..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/external-reader.spec.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import Quagga from '../../src/quagga';
-import TestExternalCode128Reader from '../../src/reader/test_external_code_128_reader';
-import { runDecoderTestBothHalfSample, generateConfig } from './helpers';
-
-describe('External Reader Test, using test external code_128 reader', () => {
- // NOTE: This test demonstrates the external reader plugin API.
- // There is a known issue where external readers may fail intermittently in TypeScript
- // test environments. The .allowFail mechanism handles this by skipping failing tests
- // rather than failing the build. This issue does not occur in production (compiled code).
- // External readers work correctly in production (compiled code).
- describe('works', () => {
- before(() => {
- Quagga.registerReader('external_code_128_reader', TestExternalCode128Reader);
- });
- // Note: FNC1 characters are represented as ASCII 29 (Group Separator, \x1D or \u001d)
- // These are used in GS1-128 barcodes as field separators
- const FNC1 = String.fromCharCode(29);
- const externalCode128TestSet = [
- { 'name': 'image-001.jpg', 'result': '0001285112001000040801', format: 'code_128' },
- { 'name': 'image-002.jpg', 'result': 'FANAVF14617104', format: 'code_128' },
- { 'name': 'image-003.jpg', 'result': '673023', format: 'code_128' },
- { 'name': 'image-004.jpg', 'result': '010210150301625334', format: 'code_128', allowFailInNode: true, allowFailInBrowser: true },
- { 'name': 'image-005.jpg', 'result': '419055603900009001012999', format: 'code_128' },
- { 'name': 'image-006.jpg', 'result': '419055603900009001012999', format: 'code_128' },
- // GS1-128 barcode with FNC1 characters as field separators
- { 'name': 'image-007.jpg', 'result': `${FNC1}42095747${FNC1}9499907123456123456781`, format: 'code_128' },
- { 'name': 'image-008.jpg', 'result': '1020185021797280784055', format: 'code_128' },
- { 'name': 'image-009.jpg', 'result': '0001285112001000040801', format: 'code_128' },
- { 'name': 'image-010.jpg', 'result': '673023', format: 'code_128' },
- // TODO: need to implement having different inputStream parameters to be able to
- // read this one -- it works only with inputStream size set to 1600 presently, but
- // other samples break at that high a size.
- // { name: 'image-011.png', result: '33c64780-a9c0-e92a-820c-fae7011c11e2' },
- ];
- runDecoderTestBothHalfSample('code_128_external', (halfSample) => generateConfig({
- inputStream: {
- size: 800,
- singleChannel: false,
- },
- locator: {
- halfSample,
- },
- decoder: {
- readers: ['external_code_128_reader'],
- },
- }), externalCode128TestSet, 'code_128'); // Use code_128 fixture path
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/helpers.ts b/quagga2/quagga2-1.12.1/test/integration/helpers.ts
deleted file mode 100644
index ae5e622..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/helpers.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import Quagga from '../../src/quagga';
-import { QuaggaJSConfigObject } from '../../type-definitions/quagga';
-import { expect } from 'chai';
-import { it as mochaIt } from 'mocha';
-
-// Export our own 'it' with allowFail support
-export const it = Object.assign(
- mochaIt,
- {
- allowFail: (title: string, callback: Function) => {
- mochaIt(title, function() {
- return Promise.resolve().then(() => {
- return callback.apply(this, arguments);
- }).catch((err) => {
- console.trace('* error during test', title, err);
- this.skip();
- });
- });
- }
- }
-);
-
-export function runDecoderTest(name: string, config: QuaggaJSConfigObject, testSet: Array<{ name: string, result: string, format: string, allowFailInNode?: boolean, allowFailInBrowser?: boolean }>, halfSampleLabel?: string, fixturePath?: string) {
- const testLabel = halfSampleLabel ? `${name} (${halfSampleLabel})` : name;
- const actualFixturePath = fixturePath || name;
-
- describe(`Decoder ${testLabel}`, () => {
- testSet.forEach((sample) => {
- // Use the flags on the test item as the authoritative source
- const isBrowser = typeof window !== 'undefined';
- const shouldAllowFail = isBrowser ? sample.allowFailInBrowser : sample.allowFailInNode;
- const testFn = shouldAllowFail ? it.allowFail : it;
- testFn(`decodes ${sample.name}`, async function() {
- this.timeout(20000); // need to set a long timeout because laptops sometimes lag like hell in tests when they go low power
- const thisConfig = {
- ...config,
- src: `${isBrowser ? '/' : ''}test/fixtures/${actualFixturePath}/${sample.name}`,
- };
- const result = await Quagga.decodeSingle(thisConfig);
-
- // // console.warn(`* Expect result ${JSON.stringify(result)} to be an object`);
- expect(result).to.be.an('Object');
- expect(result.codeResult).to.be.an('Object');
- expect(result.codeResult.code).to.equal(sample.result);
- expect(result.codeResult.format).to.equal(sample.format);
- expect(Quagga.canvas).to.be.an('Object');
- expect(Quagga.canvas.dom).to.be.an('Object');
- expect(Quagga.canvas.ctx).to.be.an('Object');
- });
- });
- });
-}
-
-// Helper function to run decoder tests with both halfSample configurations
-export function runDecoderTestBothHalfSample(
- name: string,
- configGenerator: (halfSample: boolean) => QuaggaJSConfigObject,
- testSet: Array<{ name: string, result: string, format: string, allowFailInNode?: boolean, allowFailInBrowser?: boolean }>,
- fixturePath?: string
-) {
- describe(`Decoder ${name} (both halfSample configurations)`, () => {
- runDecoderTest(name, configGenerator(true), testSet, 'halfSample: true', fixturePath);
- runDecoderTest(name, configGenerator(false), testSet, 'halfSample: false', fixturePath);
- });
-}
-
-// run test that should not fail but no barcode is in the images
-export function runNoCodeTest(name: string, config: QuaggaJSConfigObject, testSet: Array<{ name: string, result: string, format: string }>, fixturePath?: string) {
- const actualFixturePath = fixturePath || name;
- describe(`Not decoding ${name}`, () => {
- testSet.forEach((sample) => {
- it(`should run without error (${sample.name})`, async function() {
- this.timeout(20000); // need to set a long timeout because laptops sometimes lag like hell in tests when they go low power
- const thisConfig = {
- ...config,
- src: `${typeof window !== 'undefined' ? '/' : ''}test/fixtures/${actualFixturePath}/${sample.name}`,
- };
- const result = await Quagga.decodeSingle(thisConfig);
- expect(result).to.be.an('Object');
- // When multiple: false and no decode found, result should have codeResult.code as null or undefined
- if (result.codeResult) {
- expect(result.codeResult.code).to.be.null;
- }
- // // console.warn(`* Expect result ${JSON.stringify(result)} to be an object`);
- expect(Quagga.canvas).to.be.an('Object');
- expect(Quagga.canvas.dom).to.be.an('Object');
- expect(Quagga.canvas.ctx).to.be.an('Object');
- });
- });
- });
-}
-
-export function generateConfig(configOverride: QuaggaJSConfigObject = {}) {
- const config: QuaggaJSConfigObject = {
- inputStream: {
- size: 640,
- ...configOverride.inputStream,
- },
- locator: {
- patchSize: 'medium',
- halfSample: true,
- ...configOverride.locator,
- },
- numOfWorkers: 0,
- decoder: {
- readers: ['ean_reader'],
- ...configOverride.decoder,
- },
- locate: configOverride.locate,
- src: null,
- };
- return config;
-}
diff --git a/quagga2/quagga2-1.12.1/test/integration/integration.spec.ts b/quagga2/quagga2-1.12.1/test/integration/integration.spec.ts
deleted file mode 100644
index aed2bb5..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/integration.spec.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-// TODO: write a test that ensures that Quagga.decodeSingle returns a Promise when it should
-// TODO: write a test that tests the multiple: true decoding option, allowing for multiple barcodes in
-// a single image to be returned.
-// TODO: write a test that allows for locate: false and locator configs to be tested.
-
-import Quagga from '../../src/quagga';
-import { expect } from 'chai';
-import { runNoCodeTest, generateConfig } from './helpers';
-
-
-
-describe('Parallel decoding works', () => {
- it('decodeSingle running in parallel', async () => {
- // TODO: we should throw in some other formats here too.
- const testSet = [
- { 'name': 'image-001.jpg', 'result': '3574660239843', format: 'ean_13' },
- { 'name': 'image-002.jpg', 'result': '8032754490297', format: 'ean_13' },
- { 'name': 'image-004.jpg', 'result': '9002233139084', format: 'ean_13' },
- { 'name': 'image-003.jpg', 'result': '4006209700068', format: 'ean_13' },
- { 'name': 'image-005.jpg', 'result': '8004030044005', format: 'ean_13' },
- { 'name': 'image-006.jpg', 'result': '4003626011159', format: 'ean_13' },
- { 'name': 'image-007.jpg', 'result': '2111220009686', format: 'ean_13' },
- { 'name': 'image-008.jpg', 'result': '9000275609022', format: 'ean_13' },
- { 'name': 'image-009.jpg', 'result': '9004593978587', format: 'ean_13' },
- { 'name': 'image-010.jpg', 'result': '9002244845578', format: 'ean_13' },
- ];
- const promises: Array> = [];
-
- testSet.forEach(sample => {
- const config = generateConfig();
- config.src = `${typeof window !== 'undefined' ? '/' : ''}test/fixtures/ean/${sample.name}`;
- promises.push(Quagga.decodeSingle(config));
- });
- const results = await Promise.all(promises).catch((err) => { console.warn('* error decoding simultaneously', err); throw(err); });
- const testResults = testSet.map(x => x.result);
- results.forEach((r, index) => {
- expect(r).to.be.an('object');
- expect(r.codeResult).to.be.an('object');
- expect(r.codeResult.code).to.equal(testResults[index]);
- });
- });
-});
-
-describe('Canvas Update Test, avoid DOMException', () => {
- // This test ensures that Quagga handles edge cases with invalid canvas dimensions
- // (NaN width/height) without throwing a DOMException during canvas operations.
- // This is a regression test - the library should gracefully handle invalid dimensions
- // and return an empty result rather than crashing.
- describe('works', () => {
- runNoCodeTest(
- 'no_code',
- generateConfig({
- decoder: {
- readers: ['code_128_reader', 'ean_reader'],
- },
- inputStream: {
- constraints: {
- width: NaN,
- height: NaN
- },
- singleChannel: false,
- },
- locate: false,
- locator: {
- halfSample: true,
- patchSize: 'x-large'
- }
- }),
- [
- { 'name': 'image-001.jpg', 'result': null, format: 'code_128' },
- ]
- );
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/integration/reader-order.spec.ts b/quagga2/quagga2-1.12.1/test/integration/reader-order.spec.ts
deleted file mode 100644
index ffe25a6..0000000
--- a/quagga2/quagga2-1.12.1/test/integration/reader-order.spec.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Tests to verify that barcode readers are processed in the order specified
- * in the configuration. This is important for predictable decoding behavior.
- *
- * Key findings about reader order:
- * 1. Internal readers (code_128_reader, ean_reader, etc.) are processed in the
- * order they appear in the `readers` config array
- * 2. External readers must be registered via `Quagga.registerReader()` BEFORE
- * they can be used in the `readers` array
- * 3. The position of a reader in the `readers` array determines when it attempts
- * to decode (earlier = higher priority)
- * 4. The first reader to successfully decode the barcode wins
- */
-
-import Quagga from '../../src/quagga';
-import { expect } from 'chai';
-
-/**
- * Helper function to construct fixture paths consistently across browser and Node environments
- */
-function getFixturePath(folder: string, filename: string): string {
- const prefix = typeof window !== 'undefined' ? '/' : '';
- return `${prefix}test/fixtures/${folder}/${filename}`;
-}
-
-describe('Priority Behavior with Multiple Readers', () => {
- it('should decode EAN-8 as ean_8 when ean_8_reader is prioritized over ean_reader', async function() {
- this.timeout(20000);
-
- // This test uses an EAN-8 barcode image (8 digits)
- // When ean_8_reader is listed first, it should decode as ean_8
- const config = {
- inputStream: {
- size: 640,
- },
- locator: {
- patchSize: 'large',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- // EAN-8 reader first - should decode EAN-8 barcodes as ean_8
- readers: ['ean_8_reader', 'ean_reader'],
- },
- locate: true,
- src: getFixturePath('ean_8', 'image-001.jpg'),
- };
-
- const result = await Quagga.decodeSingle(config);
-
- expect(result).to.be.an('object');
- expect(result.codeResult).to.be.an('object');
- expect(result.codeResult.code).to.equal('42191605');
- expect(result.codeResult.format).to.equal('ean_8');
- });
-
- it('should fallback to ean_8_reader when ean_reader cannot decode EAN-8 barcode', async function() {
- this.timeout(20000);
-
- // EAN-8 and EAN-13 are different barcode formats with different structures.
- // The EAN-13 reader will not successfully decode an EAN-8 barcode,
- // so it will return null and the decoder will try the next reader.
- // This test demonstrates that reader order affects fallback behavior.
- const config = {
- inputStream: {
- size: 640,
- },
- locator: {
- patchSize: 'large',
- halfSample: true,
- },
- numOfWorkers: 0,
- decoder: {
- // EAN-13 reader first, EAN-8 as fallback
- readers: ['ean_reader', 'ean_8_reader'],
- },
- locate: true,
- src: getFixturePath('ean_8', 'image-001.jpg'),
- };
-
- const result = await Quagga.decodeSingle(config);
-
- // EAN-13 reader cannot decode EAN-8, so EAN-8 reader succeeds as fallback
- expect(result).to.be.an('object');
- expect(result.codeResult).to.be.an('object');
- expect(result.codeResult.code).to.equal('42191605');
- // Since EAN-13 reader fails, the EAN-8 reader handles it
- expect(result.codeResult.format).to.equal('ean_8');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/node-bundle.spec.js b/quagga2/quagga2-1.12.1/test/node-bundle.spec.js
deleted file mode 100644
index 84d370f..0000000
--- a/quagga2/quagga2-1.12.1/test/node-bundle.spec.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Test that the Node bundle (lib/quagga.js) works correctly with decodeSingle
-// This validates that the built bundle can decode images without createImageBitmap errors
-
-const { expect } = require('chai');
-const path = require('path');
-
-describe('Node Bundle - decodeSingle', function() {
- this.timeout(10000); // Image decoding can take a few seconds
-
- let Quagga;
-
- before(function() {
- // Import the built Node bundle
- Quagga = require('../lib/quagga.js');
- });
-
- it('should decode a Code 128 barcode from the built lib/quagga.js', function(done) {
- const imagePath = path.join(__dirname, 'fixtures', 'code_128', 'image-001.jpg');
-
- Quagga.decodeSingle({
- src: imagePath,
- numOfWorkers: 0,
- inputStream: {
- size: 800
- },
- decoder: {
- readers: ['code_128_reader']
- },
- }, function(result) {
- if (result && result.codeResult) {
- expect(result.codeResult.code).to.be.a('string');
- expect(result.codeResult.code.length).to.be.greaterThan(0);
- console.log('Decoded:', result.codeResult.code);
- done();
- } else {
- done(new Error('Failed to decode barcode'));
- }
- });
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/test-import.mjs b/quagga2/quagga2-1.12.1/test/test-import.mjs
deleted file mode 100644
index 7389968..0000000
--- a/quagga2/quagga2-1.12.1/test/test-import.mjs
+++ /dev/null
@@ -1,22 +0,0 @@
-import { describe, it } from 'mocha';
-import { expect } from 'chai';
-import Q from '../lib/quagga.js';
-
-describe('testing node import', () => {
- it('import works', () => {
- expect(Q).to.be.an('object');
- expect(Q.init).to.be.a('function');
- expect(Q.start).to.be.a('function');
- expect(Q.stop).to.be.a('function');
- });
- it('contains CameraAccess', () => {
- const { CameraAccess: CA } = Q;
- expect(CA).to.be.an('object').with.keys([
- 'request', 'release', 'enumerateVideoDevices',
- 'getActiveStream', 'getActiveStreamLabel', 'getActiveTrack', 'requestedVideoElement',
- 'enableTorch', 'disableTorch',
- ]);
- });
-});
-
-// export default 1;
diff --git a/quagga2/quagga2-1.12.1/test/test-require.js b/quagga2/quagga2-1.12.1/test/test-require.js
deleted file mode 100644
index c806ec2..0000000
--- a/quagga2/quagga2-1.12.1/test/test-require.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const { describe, it } = require('mocha');
-const { expect } = require('chai');
-
-const Q = require('..');
-const Q2 = require('..').default;
-
-describe('testing node require', () => {
- it('require works', () => {
- expect(Q).to.be.an('object');
- expect(Q.init).to.be.a('function');
- expect(Q.start).to.be.a('function');
- expect(Q.stop).to.be.a('function');
- });
- it('require default works', () => {
- expect(Q2).to.be.an('object');
- expect(Q.init).to.be.a('function');
- expect(Q.start).to.be.a('function');
- expect(Q.stop).to.be.a('function');
- });
-});
diff --git a/quagga2/quagga2-1.12.1/test/tsconfig.json b/quagga2/quagga2-1.12.1/test/tsconfig.json
deleted file mode 100644
index 7b507eb..0000000
--- a/quagga2/quagga2-1.12.1/test/tsconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "extends": "../tsconfig",
- "compilerOptions": {
- "esModuleInterop": true,
- "allowSyntheticDefaultImports": true,
- "target": "ES2015",
- "module": "commonjs",
- "lib": [ "es2015", "esnext", "dom" ],
- "types": [ "mocha", "chai", "sinon", "sinon-chai", "es6-promise" ],
- "strictNullChecks": false,
- "typeRoots": [
- "../node_modules/@types",
- "../type-definitions"
- ]
- },
- "include": [
- ".",
- "../src"
- ]
-}
diff --git a/quagga2/quagga2-1.12.1/tsconfig.json b/quagga2/quagga2-1.12.1/tsconfig.json
deleted file mode 100644
index 3f98767..0000000
--- a/quagga2/quagga2-1.12.1/tsconfig.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "compilerOptions": {
- "noEmit": true,
- "forceConsistentCasingInFileNames": true,
- "noImplicitAny": true/* Raise error on expressions and declarations with an implied 'any' type. */,
- "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
- "sourceMap": true /* Generates corresponding '.map' file. */,
- "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
- "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
- "lib": [
- "ES6",
- "dom"
- ] /* Specify library files to be included in the compilation. */,
- "types": [
- "mocha",
- "node"
- ] /* Type declaration files to be included in compilation. */,
- "module": "esNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
- "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
- "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
- "declaration": false /* Generates corresponding '.d.ts' file. */,
- "removeComments": true /* Do not emit comments to output. */,
- "noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
- "noUnusedLocals": true /* Report errors on unused locals. */,
- "strict": true /* Enable all strict type-checking options. */,
- "outDir": "dist" /* Redirect output structure to the directory. */,
- "baseUrl": "src" /* Base directory to resolve non-absolute module names. */,
- "typeRoots": [
- "./type-definitions",
- "node_modules/@types"
- ] /* List of folders to include type definitions from. */,
- "strictNullChecks": true /* Enable strict null checks. */,
- "allowJs": true /* Allow javascript files to be compiled. */,
- "checkJs": false
- },
- "include": [
- "./src/**/*"
- ],
- "exclude": [
- "**/browser/*.spec.*"
- ]
-}
diff --git a/quagga2/quagga2-1.12.1/type-definitions/quagga.d.ts b/quagga2/quagga2-1.12.1/type-definitions/quagga.d.ts
deleted file mode 100644
index 96be7b0..0000000
--- a/quagga2/quagga2-1.12.1/type-definitions/quagga.d.ts
+++ /dev/null
@@ -1,1129 +0,0 @@
-/* eslint-disable max-classes-per-file */
-// Type definitions for QuaggaJS v0.12.1 (2017-10-19)
-// Project: http://serratus.github.io/quaggaJS/
-// Definitions by: Cam Birch, Peter Horwood aka Madman Pierre, Dan Manastireanu
-
-import { vec2 } from 'gl-matrix';
-
-// import SubImage from '../src/common/subImage';
-// import ImageWrapper from '../src/common/image_wrapper';
-// export { SubImage, ImageWrapper };
-
-declare const Quagga: QuaggaJSStatic;
-export default Quagga;
-
-// There are many different spots inside Quagga where we refer to an X/Y position of something, but it has entirely different
-// contextual meaning. This allows us to create a type that is branded by name, and therefore these variables cannot be directly
-// mixed up with each other, without explicitly forcing it to happen. Good.
-export interface XYObject {
- type: T;
- x: number;
- y: number;
-}
-
-// TODO: fill this in from cv_utils#imageRef
-export type ImageRef = XYObject<'ImageRef'>;
-
-export type XYSize = XYObject<'XYSize'>;
-
-export type Point = XYObject<'Point'>;
-
-export type SparseImageWrapper = {
- data: TypedArray | Array | null;
- size: XYSize;
-};
-
-export type WrapperIndexMapping = {
- x: Array;
- y: Array;
-};
-
-// eslint-disable-next-line @typescript-eslint/class-name-casing
-export type Moment = {
- m00: number;
- m01: number;
- m02: number;
- m10: number;
- m11: number;
- m20: number;
- rad: number;
- theta: number;
- vec?: vec2;
-};
-
-export class ImageWrapper {
- data: TypedArray | Array;
-
- size: XYSize;
-
- indexMapping?: WrapperIndexMapping;
-
- constructor(
- size: XYSize,
- data?: TypedArray | Array,
- ArrayType?: TypedArrayConstructor | ArrayConstructor,
- initialize?: boolean
- );
-
- inImageWithBorder(imgRef: ImageRef, border: number): boolean;
-
- subImageAsCopy(imageWrapper: ImageWrapper, from: XYSize): ImageWrapper;
-
- get(x: number, y: number): number;
-
- getSafe(x: number, y: number): number;
-
- set(x: number, y: number, value: number): ImageWrapper;
-
- zeroBorder(): ImageWrapper;
-
- moments(labelCount: any): Array;
-
- getAsRGBA(scale?: number): Uint8ClampedArray;
-
- show(canvas: HTMLCanvasElement, scale?: number): void;
-
- overlay(canvas: HTMLCanvasElement, scale: number, from: XYSize): void;
-}
-
-export class SubImage {
- I: ImageWrapper | SparseImageWrapper;
-
- data: ImageWrapper['data'];
-
- originalSize: ImageRef;
-
- from: ImageRef;
-
- size: ImageRef;
-
- constructor(from: ImageRef, size: ImageRef, I: SparseImageWrapper);
-
- get(x: number, y: number): number;
-
- show(canvas: HTMLCanvasElement, scale: number): void;
-
- updateData(image: ImageWrapper): void;
-
- updateFrom(from: ImageRef): void;
-}
-
-export type QuaggaImageData = Array;
-
-export type BarcodeReaderType = string;
-
-/**
- * Constructor type for a BarcodeReader class.
- * Used when registering custom readers via registerReader().
- */
-export type BarcodeReaderConstructor = new (config?: BarcodeReaderConfig, supplements?: Array) => Readers.BarcodeReader;
-
-export interface BarcodeReaderConfig {
- normalizeBarSpaceWidth?: boolean,
- supplements?: Array,
-}
-
-export enum BarcodeDirection {
- Forward = 1,
- Reverse = -1,
-}
-type BarcodeFormat = string;
-
-export interface BarcodeCorrection {
- bar: number;
- space: number;
-}
-
-export interface BarcodePosition {
- end: number;
- endCounter?: number;
- error?: number;
- start: number;
- startCounter?: number;
-}
-
-export interface BarcodeInfo extends BarcodePosition {
- code: number;
- correction?: BarcodeCorrection;
-}
-
-export interface Barcode {
- code: string;
- codeset?: number;
- correction?: BarcodeCorrection;
- decodedCodes?: Array;
- direction?: BarcodeDirection;
- end: number;
- endInfo?: BarcodePosition;
- format: BarcodeFormat;
- start: number;
- startInfo: BarcodePosition;
- supplement?: Barcode;
-}
-
-export interface ThresholdSize {
- counts: number;
- max: number;
- min: number;
- size: number;
-}
-
-export interface Threshold {
- bar: {
- narrow: ThresholdSize;
- wide: ThresholdSize;
- };
- space: {
- narrow: ThresholdSize;
- wide: ThresholdSize;
- };
-}
-
-export declare module Readers {
- export abstract class BarcodeReader {
- _row: Array;
-
- SINGLE_CODE_ERROR: number;
-
- FORMAT: BarcodeFormat;
-
- CONFIG_KEYS: BarcodeReaderConfig;
-
- static get Exception(): {
- CodeNotFoundException: string;
- PatternNotFoundException: string;
- StartNotFoundException: string;
- };
-
- static adjacentLineValidationMatches: number;
-
- constructor(config: BarcodeReaderConfig, supplements?: Array);
-
- abstract decode(row?: Array, start?: BarcodePosition | number): Barcode | null;
-
- decodePattern(pattern: Array): Barcode | null;
-
- protected _nextUnset(line: ReadonlyArray, start?: number): number;
-
- protected _matchPattern(counter: ReadonlyArray, code: ReadonlyArray, maxSingleError?: number): number;
-
- protected _nextSet(line: ReadonlyArray, offset?: number): number;
-
- protected _correctBars(counter: Array, correction: number, indices: Array): void;
-
- protected _matchRange(start: number, end: number, value: number): boolean;
-
- protected _fillCounters(offset?: number, end?: number, isWhite?: boolean): number[];
-
- protected _toCounters(start: number, counters: Uint16Array | Array): number[] | Uint16Array;
- }
-
- export class TwoOfFiveReader extends BarcodeReader {
- FORMAT: string;
-
- SINGLE_CODE_ERROR: number;
-
- AVG_CODE_ERROR: number;
-
- decode(row?: Array, start?: BarcodePosition): Barcode | null;
-
- protected _findPattern(pattern: ReadonlyArray, offset: number, isWhite?: boolean, tryHarder?: boolean): BarcodeInfo | null;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _verifyTrailingWhitespace(endInfo: BarcodeInfo): BarcodePosition | null;
-
- protected _findEnd(): BarcodePosition | null;
-
- protected _verifyCounterLength(counters: Array): boolean;
-
- protected _decodeCode(counter: ReadonlyArray): BarcodeInfo | null;
-
- protected _decodePayload(counters: ReadonlyArray, result: Array, decodedCodes: Array): BarcodeInfo | null;
- }
-
- export class NewCodabarReader extends BarcodeReader {
- FORMAT: string;
-
- decode(row?: Array, start?: BarcodePosition | number | null): Barcode | null;
-
- protected _computeAlternatingThreshold(offset: number, end: number): number;
-
- protected _toPattern(offset: number): number;
-
- protected _isStartEnd(pattern: number): boolean;
-
- protected _sumCounters(start: number, end: number): number;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _patternToChar(pattern: number): string | null;
-
- protected _calculatePatternLength(offset: number): number;
-
- protected _verifyWhitespace(startCounter: number, endCounter: number): boolean;
-
- protected _charToPattern(char: string): number;
-
- protected _thresholdResultPattern(result: ReadonlyArray, startCounter: number): Threshold;
-
- protected _validateResult(result: ReadonlyArray, startCounter: number): boolean;
- }
-
- export class Code128Reader extends BarcodeReader {
- CODE_SHIFT: number;
-
- CODE_C: number;
-
- CODE_B: number;
-
- CODE_A: number;
-
- START_CODE_A: number;
-
- START_CODE_B: number;
-
- START_CODE_C: number;
-
- STOP_CODE: number;
-
- CODE_PATTERN: number[][];
-
- SINGLE_CODE_ERROR: number;
-
- AVG_CODE_ERROR: number;
-
- FORMAT: string;
-
- MODULE_INDICES: {
- bar: number[];
- space: number[];
- };
-
- decode(row?: Array, start?: BarcodePosition): Barcode | null;
-
- calculateCorrection(expected: ReadonlyArray, normalized: ReadonlyArray, indices: ReadonlyArray): number;
-
- protected _decodeCode(start: number, correction?: BarcodeCorrection): BarcodeInfo | null;
-
- protected _correct(counter: Array, correction: BarcodeCorrection): void;
-
- protected _findStart(): BarcodeInfo | null;
-
- protected _verifyTrailingWhitespace(endInfo: BarcodeInfo): BarcodeInfo | null;
- }
-
- export class Code39Reader extends BarcodeReader {
- FORMAT: string;
-
- decode(row?: Array, start?: BarcodePosition | number | null): Barcode | null;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _toPattern(counters: Uint16Array): number;
-
- protected _findNextWidth(counters: Uint16Array, current: number): number;
-
- protected _patternToChar(pattern: number): string | null;
-
- protected _verifyTrailingWhitespace(lastStart: number, nextStart: number, counters: Uint16Array): boolean;
- }
-
- export class Code32Reader extends Code39Reader {
- FORMAT: string;
-
- decode(row?: Array, start?: BarcodePosition): Barcode | null;
-
- protected _decodeCode32(code: string): string | null;
-
- protected _checkChecksum(code: string): boolean;
- }
-
- export class Code39VINReader extends Code39Reader {
- FORMAT: string;
-
- decode(row?: Array, start?: BarcodePosition): Barcode | null;
-
- protected _checkChecksum(code: string): boolean;
- }
-
- export class Code93Reader extends BarcodeReader {
- FORMAT: string;
-
- decode(row?: Array, start?: BarcodePosition | number | null): Barcode | null;
-
- protected _patternToChar(pattern: number): string | null;
-
- protected _toPattern(counters: Uint16Array): number;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _verifyEnd(lastStart: number, nextStart: number): boolean;
-
- protected _decodeExtended(charArray: Array): string[] | null;
-
- protected _matchCheckChar(charArray: Array, index: number, maxWeight: number): boolean;
-
- protected _verifyChecksums(charArray: Array): boolean;
- }
-
- export class EANReader extends BarcodeReader {
- FORMAT: string;
- SINGLE_CODE_ERROR: number;
- STOP_PATTERN: number[];
-
- constructor(config?: BarcodeReaderConfig, supplements?: Array);
-
- decode(row?: Array, start?: BarcodePosition | number): Barcode | null;
-
- protected _findPattern(pattern: ReadonlyArray, offset: number, isWhite: boolean, tryHarder: boolean): BarcodePosition | null;
-
- protected _decodeCode(start: number, coderange?: number): BarcodeInfo | null;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null;
-
- protected _verifyTrailingWhitespace(endInfo: BarcodePosition): BarcodePosition | null;
-
- protected _findEnd(offset: number, isWhite: boolean): BarcodePosition | null;
-
- protected _checksum(result: Array): boolean;
- }
-
- export class EAN2Reader extends EANReader {
- FORMAT: string;
-
- decode(row?: Array, start?: number): Barcode | null;
- }
-
- export class EAN5Reader extends EANReader {
- FORMAT: string;
-
- decode(row?: Array, start?: number): Barcode | null;
- }
-
- export class EAN8Reader extends EANReader {
- FORMAT: string;
-
- protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null;
- }
-
- export class I2of5Reader extends BarcodeReader {
- SINGLE_CODE_ERROR: number;
-
- AVG_CODE_ERROR: number;
-
- START_PATTERN: number[];
-
- STOP_PATTERN: number[];
-
- CODE_PATTERN: number[][];
-
- MAX_CORRECTION_FACTOR: number;
-
- FORMAT: string;
-
- constructor(opts: BarcodeReaderConfig);
-
- decode(row?: Array, start?: BarcodePosition | number): Barcode | null;
-
- protected _matchPattern(counter: Array, code: ReadonlyArray): number;
-
- protected _findPattern(pattern: ReadonlyArray, offset?: number, isWhite?: boolean, tryHarder?: boolean): BarcodePosition | null;
-
- protected _findStart(): BarcodePosition | null;
-
- protected _verifyTrailingWhitespace(endInfo: BarcodePosition): BarcodePosition | null;
-
- protected _findEnd(): BarcodePosition | null;
-
- protected _decodePair(counterPair: Array>): Array | null;
-
- protected _decodeCode(counter: Array