From 8481e1108935df8267a267eb9513b414e3c0f936 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 18 Jun 2024 18:28:57 -0300 Subject: [PATCH 1/5] feat: interoperability with typescript --- README.md | 99 +---------------------------- src/MediaTypes.d.ts | 151 ++++++++++++++++++++++++++++++++++++++++++++ src/MediaTypes.js | 56 ++++++++-------- 3 files changed, 182 insertions(+), 124 deletions(-) create mode 100644 src/MediaTypes.d.ts diff --git a/README.md b/README.md index e656d0e..0cec52c 100644 --- a/README.md +++ b/README.md @@ -12,101 +12,8 @@ This is a comprehensive compilation of media types under the [RFC-6838](https:// A file's extension has no meaning on the web. In order for the client to interpret the document correctly, the media type must be sent in the Content-Type header. -## Interfaces -```typescript -/** - * @constructor - * @fires MediaTypes#update - * @fires MediaTypes#error - * - * @throws {TypeError} Invalid updateInterval - */ -constructor(updateInterval?: number = 86400000) -``` - -```typescript -// Getters -list(): { [extension: string]: MIMEType[] } // List of all extensions with their media types -updateInterval(): number -versions(): { apache: string, debian: string, nginx: string } -``` - -```typescript -// Setters -/** - * Periodic database update in milliseconds. if less than zero, will be disabled - * - * @fires MediaTypes#update - * @fires MediaTypes#error - * - * @throws {TypeError} Invalid updateInterval - * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay - */ -updateInterval(updateInterval?: number = 86400000): void -``` - -```typescript -/** - * @method - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType - */ -delete( - extension: string - mediaType: string, // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type -): boolean - -/** - * @method - * @throws {TypeError} Invalid path - * @throws {SyntaxError} Invalid extension - */ -get( - path: string // https://nodejs.org/api/path.html#pathparsepath -): MIMEType[] // https://nodejs.org/api/util.html#class-utilmimetype - -/** - * @method - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType - */ -set( - extension: string - mediaType: string, // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type -): boolean - -/** - * @method - * @fires MediaTypes#update - */ -update(force?: boolean = false): Promise // List of new inserted media types -``` - -```typescript -// Events -on('update', callback: (list: { [extension: string]: MIMEType[] }) => void): void -on('error', callback: (error: Error) => void): void -``` - -> This module extends the main methods of the [EventEmitter module](https://nodejs.org/api/events.html#class-eventemitter): -> - [addListener](https://nodejs.org/api/events.html#emitteraddlistenereventname-listener) -> - [eventNames](https://nodejs.org/api/events.html#emittereventnames) -> - [getMaxListeners](https://nodejs.org/api/events.html#emittergetmaxlisteners) -> - [listenerCount](https://nodejs.org/api/events.html#emitterlistenercounteventname-listener) -> - [listeners](https://nodejs.org/api/events.html#emitterlistenerseventname) -> - [off](https://nodejs.org/api/events.html#emitteroffeventname-listener) -> - [on](https://nodejs.org/api/events.html#emitteroneventname-listener) -> - [once](https://nodejs.org/api/events.html#emitteronceeventname-listener) -> - [prependListener](https://nodejs.org/api/events.html#emitterprependlistenereventname-listener) -> - [prependOnceListener](https://nodejs.org/api/events.html#emitterprependoncelistenereventname-listener) -> - [removeAllListeners](https://nodejs.org/api/events.html#emitterremovealllistenerseventname) -> - [removeListener](https://nodejs.org/api/events.html#emitterremovelistenereventname-listener) -> - [setMaxListeners](https://nodejs.org/api/events.html#emittersetmaxlistenersn) -> - [rawListeners](https://nodejs.org/api/events.html#emitterrawlistenerseventname) +## Interface +Although this is a javascript module, we use a typescript interface to maintain interoperability and better readability. See: [src/MediaTypes.d.ts](src/MediaTypes.d.ts) ## Specifications -We strive to maintain complete code coverage in tests. With that, we provide all the necessary use cases for a good understanding of how this module works. See: [test/MediaTypes.spec.js](https://github.com/JadsonLucena/MediaTypes.js/blob/main/test/MediaTypes.spec.js) \ No newline at end of file +We strive to maintain complete code coverage in tests. With that, we provide all the necessary use cases for a good understanding of how this module works. See: [test/MediaTypes.spec.js](test/MediaTypes.spec.js) \ No newline at end of file diff --git a/src/MediaTypes.d.ts b/src/MediaTypes.d.ts new file mode 100644 index 0000000..5757c9e --- /dev/null +++ b/src/MediaTypes.d.ts @@ -0,0 +1,151 @@ +import { MIMEType } from 'node:util' +import { EventEmitter } from 'node:events' + +type Versions = { + apache: string, + nginx: string, + debian: string +} + +declare module '@jadsonlucena/mediatypes' { + /** + * @classdesc This is a comprehensive compilation of media types that is periodically updated through the following projects: Apache, NGINX and Debian + */ + export default class MediaTypes { + + /** + * Create a MediaType class + * @param {number} [updateInterval=86400000] - Periodic database update in milliseconds. if less than zero, will be disabled + * + * @fires MediaTypes#update + * @fires MediaTypes#error + * + * @throws {TypeError} Invalid updateInterval + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay + */ + constructor (updateInterval?: number) + + /** + * @default '86400000' + * + * @fires MediaTypes#update + * @fires MediaTypes#error + * + * @throws {TypeError} Invalid updateInterval + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay + */ + set updateInterval(param: number) + get updateInterval(): number + + get versions(): Versions + + get list(): Record + + /** + * @method + * @param {boolean} [force=false] - Force update even if no version changes + * + * @fires MediaTypes#update + * + * @return {Promise>} List of all extensions with their media types + */ + update(force?: boolean): Promise> + + /** + * @param {string} path - File path + * + * @throws {TypeError} Invalid path + * @throws {SyntaxError} Invalid extension + * + * @return {MIMEType[]} + * + * @see https://nodejs.org/api/path.html#pathparsepath + */ + get(path: string): MIMEType[] + + /** + * @param {string} extension - File extension + * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} + * + * @throws {TypeError} Invalid extension + * @throws {SyntaxError} Invalid extension + * @throws {TypeError} Invalid mediaType + * @throws {SyntaxError} Invalid mediaType + * + * @return {boolean} + */ + set(extension: string, mediaType: string): boolean + + /** + * @param {string} extension - File extension + * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} + * + * @throws {TypeError} Invalid extension + * @throws {SyntaxError} Invalid extension + * @throws {TypeError} Invalid mediaType + * @throws {SyntaxError} Invalid mediaType + * + * @return {boolean} + */ + delete(extension: string, mediaType: string): boolean + + /** + * @see https://nodejs.org/api/events.html#emitteraddlistenereventname-listener + */ + addListener(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emittereventnames + */ + eventNames(): (string | symbol)[] + /** + * @see https://nodejs.org/api/events.html#emittergetmaxlisteners + */ + getMaxListeners(): number + /** + * @see https://nodejs.org/api/events.html#emitterlistenercounteventname-listener + */ + listenerCount(eventName: string | symbol, listener?: Function | undefined): number + /** + * @see https://nodejs.org/api/events.html#emitterlistenerseventname + */ + listeners(eventName: string | symbol): Function[] + /** + * @see https://nodejs.org/api/events.html#emitteroffeventname-listener + */ + off(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitteroneventname-listener + */ + on(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitteronceeventname-listener + */ + once(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitterprependlistenereventname-listener + */ + prependListener(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitterprependoncelistenereventname-listener + */ + prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitterremovealllistenerseventname + */ + removeAllListeners(event?: string | symbol | undefined): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitterremovelistenereventname-listener + */ + removeListener(eventName: string | symbol, listener: (...args: any[]) => void): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emittersetmaxlistenersn + */ + setMaxListeners(n: number): EventEmitter + /** + * @see https://nodejs.org/api/events.html#emitterrawlistenerseventname + */ + rawListeners(eventName: string | symbol): Function[] + } +} \ No newline at end of file diff --git a/src/MediaTypes.js b/src/MediaTypes.js index 76b25f0..84a827c 100644 --- a/src/MediaTypes.js +++ b/src/MediaTypes.js @@ -63,7 +63,7 @@ class MediaTypes { this.updateInterval = updateInterval } - #isMediaType = mediaType => { + #isMediaType (mediaType) { try { return new MIMEType(mediaType) } catch (err) { @@ -71,7 +71,7 @@ class MediaTypes { } } - #updateList = content => { + #updateList (content) { const list = {} for (let extension in content) { @@ -95,7 +95,7 @@ class MediaTypes { return list } - #load = async res => { + async #load (res) { return { version: res.headers.get('etag'), content: (await res.text()) @@ -135,7 +135,7 @@ class MediaTypes { * * @return {Promise>} List of all extensions with their media types */ - update = (force = false) => { + update (force = false) { return Promise.allSettled([ fetch('https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types', { // https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types method: 'HEAD', @@ -250,27 +250,6 @@ class MediaTypes { }) } - /** - * @return {Object.} - */ - get list () { - return this.#mediaTypes - } - - /** - * @type {number} - */ - get updateInterval () { - return this.#updateInterval - } - - /** - * @return {Versions} - */ - get versions () { - return this.#versions - } - /** * @type {number} [updateInterval=86400000] * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay @@ -310,6 +289,27 @@ class MediaTypes { } } + /** + * @type {number} + */ + get updateInterval () { + return this.#updateInterval + } + + /** + * @return {Versions} + */ + get versions () { + return this.#versions + } + + /** + * @return {Object.} + */ + get list () { + return this.#mediaTypes + } + /** * @method * @param {string} path - File path @@ -320,7 +320,7 @@ class MediaTypes { * * @return {MIMEType[]} */ - get = path => { + get (path) { if (typeof path !== 'string') { throw new TypeError('Invalid path') } @@ -347,7 +347,7 @@ class MediaTypes { * * @return {boolean} */ - set = (extension, mediaType) => { + set (extension, mediaType) { if (typeof extension !== 'string') { throw new TypeError('Invalid extension') } else if (!this.#formatExtension.test(extension)) { @@ -389,7 +389,7 @@ class MediaTypes { * * @return {boolean} */ - delete = (extension, mediaType) => { + delete (extension, mediaType) { if (typeof extension !== 'string') { throw new TypeError('Invalid extension') } else if (!this.#formatExtension.test(extension)) { From 5af4fdb858439a5300350421f6705956c31c0823 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 19 Jun 2024 09:49:28 -0300 Subject: [PATCH 2/5] chore: update local database --- src/DB.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DB.json b/src/DB.json index aaff60a..8a3d091 100644 --- a/src/DB.json +++ b/src/DB.json @@ -1 +1 @@ -{"mediaTypes":{"123":["application/vnd.lotus-1-2-3"],"210":["application/p21"],"726":["audio/32kadpcm"],"ez":["application/andrew-inset"],"aw":["application/applixware"],"atom":["application/atom+xml"],"atomcat":["application/atomcat+xml"],"atomsvc":["application/atomsvc+xml"],"ccxml":["application/ccxml+xml"],"cdmia":["application/cdmi-capability"],"cdmic":["application/cdmi-container"],"cdmid":["application/cdmi-domain"],"cdmio":["application/cdmi-object"],"cdmiq":["application/cdmi-queue"],"cu":["application/cu-seeme"],"davmount":["application/davmount+xml"],"dbk":["application/docbook+xml"],"dssc":["application/dssc+der"],"xdssc":["application/dssc+xml"],"ecma":["application/ecmascript"],"emma":["application/emma+xml"],"epub":["application/epub+zip"],"exi":["application/exi"],"pfr":["application/font-tdpfr"],"gml":["application/gml+xml"],"gpx":["application/gpx+xml"],"gxf":["application/gxf"],"stk":["application/hyperstudio"],"ink":["application/inkml+xml"],"inkml":["application/inkml+xml"],"ipfix":["application/ipfix"],"jar":["application/java-archive"],"ser":["application/java-serialized-object"],"class":["application/java-vm"],"json":["application/json"],"jsonml":["application/jsonml+json"],"lostxml":["application/lost+xml"],"hqx":["application/mac-binhex40"],"cpt":["application/mac-compactpro","image/x-corelphotopaint"],"mads":["application/mads+xml"],"mrc":["application/marc"],"mrcx":["application/marcxml+xml"],"ma":["application/mathematica"],"nb":["application/mathematica","application/vnd.wolfram.mathematica"],"mb":["application/mathematica"],"mathml":["application/mathml+xml"],"mbox":["application/mbox"],"mscml":["application/mediaservercontrol+xml"],"metalink":["application/metalink+xml"],"meta4":["application/metalink4+xml"],"mets":["application/mets+xml"],"mods":["application/mods+xml"],"m21":["application/mp21"],"mp21":["application/mp21"],"mp4s":["application/mp4"],"doc":["application/msword"],"dot":["application/msword","text/vnd.graphviz"],"mxf":["application/mxf"],"bin":["application/octet-stream"],"dms":["application/octet-stream","text/vnd.dmclientscript"],"lrf":["application/octet-stream"],"mar":["application/octet-stream"],"so":["application/octet-stream"],"dist":["application/octet-stream","application/vnd.apple.installer+xml"],"distz":["application/octet-stream","application/vnd.apple.installer+xml"],"pkg":["application/octet-stream","application/vnd.apple.installer+xml"],"bpk":["application/octet-stream"],"dump":["application/octet-stream"],"elc":["application/octet-stream"],"deploy":["application/octet-stream"],"oda":["application/oda"],"opf":["application/oebps-package+xml"],"ogx":["application/ogg"],"omdoc":["application/omdoc+xml"],"onetoc":["application/onenote"],"onetoc2":["application/onenote"],"onetmp":["application/onenote"],"onepkg":["application/onenote"],"oxps":["application/oxps"],"xer":["application/patch-ops-error+xml","application/xcap-error+xml"],"pdf":["application/pdf"],"pgp":["application/pgp-encrypted"],"asc":["application/pgp-keys","application/pgp-signature"],"sig":["application/pgp-signature"],"prf":["application/pics-rules"],"p10":["application/pkcs10"],"p7m":["application/pkcs7-mime"],"p7c":["application/pkcs7-mime"],"p7s":["application/pkcs7-signature"],"p8":["application/pkcs8"],"ac":["application/pkix-attr-cert"],"cer":["application/pkix-cert"],"crl":["application/pkix-crl"],"pkipath":["application/pkix-pkipath"],"pki":["application/pkixcmp"],"pls":["application/pls+xml","audio/x-scpls"],"ai":["application/postscript"],"eps":["application/postscript"],"ps":["application/postscript"],"cww":["application/prs.cww"],"pskcxml":["application/pskc+xml"],"rdf":["application/rdf+xml"],"rif":["application/reginfo+xml"],"rnc":["application/relax-ng-compact-syntax"],"rl":["application/resource-lists+xml"],"rld":["application/resource-lists-diff+xml"],"rs":["application/rls-services+xml"],"gbr":["application/rpki-ghostbusters"],"mft":["application/rpki-manifest"],"roa":["application/rpki-roa"],"rsd":["application/rsd+xml"],"rss":["application/rss+xml","application/x-rss+xml"],"rtf":["application/rtf"],"sbml":["application/sbml+xml"],"scq":["application/scvp-cv-request"],"scs":["application/scvp-cv-response"],"spq":["application/scvp-vp-request"],"spp":["application/scvp-vp-response"],"sdp":["application/sdp"],"setpay":["application/set-payment-initiation"],"setreg":["application/set-registration-initiation"],"shf":["application/shf+xml"],"smi":["application/smil+xml"],"smil":["application/smil+xml"],"rq":["application/sparql-query"],"srx":["application/sparql-results+xml"],"gram":["application/srgs"],"grxml":["application/srgs+xml"],"sru":["application/sru+xml"],"ssdl":["application/ssdl+xml"],"ssml":["application/ssml+xml"],"tei":["application/tei+xml"],"teicorpus":["application/tei+xml"],"tfi":["application/thraud+xml"],"tsd":["application/timestamped-data"],"plb":["application/vnd.3gpp.pic-bw-large"],"psb":["application/vnd.3gpp.pic-bw-small"],"pvb":["application/vnd.3gpp.pic-bw-var"],"tcap":["application/vnd.3gpp2.tcap"],"pwn":["application/vnd.3m.post-it-notes"],"aso":["application/vnd.accpac.simply.aso","chemical/x-ncbi-asn1-binary"],"imp":["application/vnd.accpac.simply.imp"],"acu":["application/vnd.acucobol"],"atc":["application/vnd.acucorp"],"acutc":["application/vnd.acucorp"],"air":["application/vnd.adobe.air-application-installer-package+zip"],"fcdt":["application/vnd.adobe.formscentral.fcdt"],"fxp":["application/vnd.adobe.fxp"],"fxpl":["application/vnd.adobe.fxp"],"xdp":["application/vnd.adobe.xdp+xml"],"xfdf":["application/vnd.adobe.xfdf","application/xfdf"],"ahead":["application/vnd.ahead.space"],"azf":["application/vnd.airzip.filesecure.azf"],"azs":["application/vnd.airzip.filesecure.azs"],"azw":["application/vnd.amazon.ebook"],"acc":["application/vnd.americandynamics.acc"],"ami":["application/vnd.amiga.ami"],"apk":["application/vnd.android.package-archive"],"cii":["application/vnd.anser-web-certificate-issue-initiation"],"fti":["application/vnd.anser-web-funds-transfer-initiation"],"atx":["application/vnd.antix.game-component","audio/atrac-x"],"mpkg":["application/vnd.apple.installer+xml"],"m3u8":["application/vnd.apple.mpegurl"],"swi":["application/vnd.aristanetworks.swi"],"iota":["application/vnd.astraea-software.iota"],"aep":["application/vnd.audiograph"],"mpm":["application/vnd.blueice.multipass"],"bmi":["application/vnd.bmi"],"rep":["application/vnd.businessobjects"],"cdxml":["application/vnd.chemdraw+xml"],"mmd":["application/vnd.chipnuts.karaoke-mmd"],"cdy":["application/vnd.cinderella"],"cla":["application/vnd.claymore"],"rp9":["application/vnd.cloanto.rp9"],"c4g":["application/vnd.clonk.c4group"],"c4d":["application/vnd.clonk.c4group"],"c4f":["application/vnd.clonk.c4group"],"c4p":["application/vnd.clonk.c4group"],"c4u":["application/vnd.clonk.c4group"],"c11amc":["application/vnd.cluetrust.cartomobile-config"],"c11amz":["application/vnd.cluetrust.cartomobile-config-pkg"],"csp":["application/vnd.commonspace"],"cdbcmsg":["application/vnd.contact.cmsg"],"cmc":["application/vnd.cosmocaller"],"clkx":["application/vnd.crick.clicker"],"clkk":["application/vnd.crick.clicker.keyboard"],"clkp":["application/vnd.crick.clicker.palette"],"clkt":["application/vnd.crick.clicker.template"],"clkw":["application/vnd.crick.clicker.wordbank"],"wbs":["application/vnd.criticaltools.wbs+xml"],"pml":["application/vnd.ctc-posml"],"ppd":["application/vnd.cups-ppd"],"car":["application/vnd.curl.car","application/vnd.ipld.car"],"pcurl":["application/vnd.curl.pcurl"],"dart":["application/vnd.dart"],"rdz":["application/vnd.data-vision.rdz"],"uvf":["application/vnd.dece.data"],"uvvf":["application/vnd.dece.data"],"uvd":["application/vnd.dece.data"],"uvvd":["application/vnd.dece.data"],"uvt":["application/vnd.dece.ttml+xml"],"uvvt":["application/vnd.dece.ttml+xml"],"uvx":["application/vnd.dece.unspecified"],"uvvx":["application/vnd.dece.unspecified"],"uvz":["application/vnd.dece.zip"],"uvvz":["application/vnd.dece.zip"],"fe_launch":["application/vnd.denovo.fcselayout-link"],"dna":["application/vnd.dna"],"mlp":["application/vnd.dolby.mlp","audio/vnd.dolby.mlp"],"dpg":["application/vnd.dpgraph"],"dfac":["application/vnd.dreamfactory"],"kpxx":["application/vnd.ds-keypoint"],"ait":["application/vnd.dvb.ait"],"svc":["application/vnd.dvb.service"],"geo":["application/vnd.dynageo"],"mag":["application/vnd.ecowin.chart"],"nml":["application/vnd.enliven"],"esf":["application/vnd.epson.esf"],"msf":["application/vnd.epson.msf"],"qam":["application/vnd.epson.quickanime"],"slt":["application/vnd.epson.salt"],"ssf":["application/vnd.epson.ssf"],"es3":["application/vnd.eszigno3+xml"],"et3":["application/vnd.eszigno3+xml"],"ez2":["application/vnd.ezpix-album"],"ez3":["application/vnd.ezpix-package"],"fdf":["application/fdf","application/vnd.fdf"],"mseed":["application/vnd.fdsn.mseed"],"seed":["application/vnd.fdsn.seed"],"dataless":["application/vnd.fdsn.seed"],"gph":["application/vnd.flographit"],"ftc":["application/vnd.fluxtime.clip"],"fm":["application/vnd.framemaker","application/x-maker"],"frame":["application/vnd.framemaker","application/x-maker"],"maker":["application/vnd.framemaker","application/x-maker"],"book":["application/vnd.framemaker","application/x-maker"],"fnc":["application/vnd.frogans.fnc"],"ltf":["application/vnd.frogans.ltf"],"fsc":["application/vnd.fsc.weblaunch"],"oas":["application/vnd.fujitsu.oasys"],"oa2":["application/vnd.fujitsu.oasys2"],"oa3":["application/vnd.fujitsu.oasys3"],"fg5":["application/vnd.fujitsu.oasysgp"],"bh2":["application/vnd.fujitsu.oasysprs"],"ddd":["application/vnd.fujixerox.ddd"],"xdw":["application/vnd.fujixerox.docuworks"],"xbd":["application/vnd.fujixerox.docuworks.binder"],"fzs":["application/vnd.fuzzysheet"],"txd":["application/vnd.genomatix.tuxedo"],"ggb":["application/vnd.geogebra.file"],"ggt":["application/vnd.geogebra.tool"],"gex":["application/vnd.geometry-explorer"],"gre":["application/vnd.geometry-explorer"],"gxt":["application/vnd.geonext"],"g2w":["application/vnd.geoplan"],"g3w":["application/vnd.geospace"],"gmx":["application/vnd.gmx"],"kml":["application/vnd.google-earth.kml+xml"],"kmz":["application/vnd.google-earth.kmz"],"gqf":["application/vnd.grafeq"],"gqs":["application/vnd.grafeq"],"gac":["application/vnd.groove-account"],"ghf":["application/vnd.groove-help"],"gim":["application/vnd.groove-identity-message"],"grv":["application/vnd.groove-injector"],"gtm":["application/vnd.groove-tool-message"],"tpl":["application/vnd.groove-tool-template"],"vcg":["application/vnd.groove-vcard"],"hal":["application/vnd.hal+xml"],"zmm":["application/vnd.handheld-entertainment+xml"],"hbci":["application/vnd.hbci"],"les":["application/vnd.hhe.lesson-player"],"hpgl":["application/vnd.hp-hpgl"],"hpid":["application/vnd.hp-hpid"],"hps":["application/vnd.hp-hps"],"jlt":["application/vnd.hp-jlyt"],"pcl":["application/vnd.hp-pcl"],"pclxl":["application/vnd.hp-pclxl"],"sfd-hdstx":["application/vnd.hydrostatix.sof-data"],"mpy":["application/vnd.ibm.minipay"],"afp":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"listafp":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"list3820":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"irm":["application/vnd.ibm.rights-management"],"sc":["application/vnd.ibm.secure-container"],"icc":["application/vnd.iccprofile"],"icm":["application/vnd.iccprofile"],"igl":["application/vnd.igloader"],"ivp":["application/vnd.immervision-ivp"],"ivu":["application/vnd.immervision-ivu"],"igm":["application/vnd.insors.igm"],"xpw":["application/vnd.intercon.formnet"],"xpx":["application/vnd.intercon.formnet"],"i2g":["application/vnd.intergeo"],"qbo":["application/vnd.intu.qbo"],"qfx":["application/vnd.intu.qfx"],"rcprofile":["application/vnd.ipunplugged.rcprofile"],"irp":["application/vnd.irepository.package+xml"],"xpr":["application/vnd.is-xpr"],"fcs":["application/vnd.isac.fcs"],"jam":["application/vnd.jam"],"rms":["application/vnd.jcp.javame.midlet-rms"],"jisp":["application/vnd.jisp"],"joda":["application/vnd.joost.joda-archive"],"ktz":["application/vnd.kahootz"],"ktr":["application/vnd.kahootz"],"karbon":["application/vnd.kde.karbon"],"chrt":["application/vnd.kde.kchart"],"kfo":["application/vnd.kde.kformula"],"flw":["application/vnd.kde.kivio"],"kon":["application/vnd.kde.kontour"],"kpr":["application/vnd.kde.kpresenter"],"kpt":["application/vnd.kde.kpresenter"],"ksp":["application/vnd.kde.kspread"],"kwd":["application/vnd.kde.kword"],"kwt":["application/vnd.kde.kword"],"htke":["application/vnd.kenameaapp"],"kia":["application/vnd.kidspiration"],"kne":["application/vnd.kinar"],"knp":["application/vnd.kinar"],"skp":["application/vnd.koan"],"skd":["application/vnd.koan"],"skt":["application/vnd.koan"],"skm":["application/vnd.koan"],"sse":["application/vnd.kodak-descriptor"],"lasxml":["application/vnd.las.las+xml"],"lbd":["application/vnd.llamagraphics.life-balance.desktop"],"lbe":["application/vnd.llamagraphics.life-balance.exchange+xml"],"apr":["application/vnd.lotus-approach"],"pre":["application/vnd.lotus-freelance"],"nsf":["application/vnd.lotus-notes"],"org":["application/vnd.lotus-organizer"],"scm":["application/vnd.lotus-screencam"],"lwp":["application/vnd.lotus-wordpro"],"portpkg":["application/vnd.macports.portpkg"],"mcd":["application/vnd.mcd"],"mc1":["application/vnd.medcalcdata"],"cdkey":["application/vnd.mediastation.cdkey"],"mwf":["application/vnd.mfer"],"mfm":["application/vnd.mfmp"],"flo":["application/vnd.micrografx.flo"],"igx":["application/vnd.micrografx.igx"],"mif":["application/vnd.mif"],"daf":["application/vnd.mobius.daf"],"dis":["application/vnd.mobius.dis"],"mbk":["application/vnd.mobius.mbk"],"mqy":["application/vnd.mobius.mqy"],"msl":["application/vnd.mobius.msl"],"plc":["application/vnd.mobius.plc"],"txf":["application/vnd.mobius.txf"],"mpn":["application/vnd.mophun.application"],"mpc":["application/vnd.mophun.certificate","chemical/x-mopac-input"],"xul":["application/vnd.mozilla.xul+xml"],"cil":["application/vnd.ms-artgalry"],"cab":["application/vnd.ms-cab-compressed"],"xls":["application/vnd.ms-excel"],"xlm":["application/vnd.ms-excel"],"xla":["application/vnd.ms-excel"],"xlc":["application/vnd.ms-excel"],"xlt":["application/vnd.ms-excel"],"xlw":["application/vnd.ms-excel"],"xlam":["application/vnd.ms-excel.addin.macroenabled.12"],"xlsb":["application/vnd.ms-excel.sheet.binary.macroenabled.12"],"xlsm":["application/vnd.ms-excel.sheet.macroenabled.12"],"xltm":["application/vnd.ms-excel.template.macroenabled.12"],"eot":["application/vnd.ms-fontobject"],"chm":["application/vnd.ms-htmlhelp","chemical/x-chemdraw"],"ims":["application/vnd.ms-ims"],"lrm":["application/vnd.ms-lrm"],"thmx":["application/vnd.ms-officetheme"],"cat":["application/vnd.ms-pki.seccat"],"stl":["application/vnd.ms-pki.stl","model/stl"],"ppt":["application/vnd.ms-powerpoint"],"pps":["application/vnd.ms-powerpoint"],"pot":["application/vnd.ms-powerpoint","text/plain"],"ppam":["application/vnd.ms-powerpoint.addin.macroenabled.12"],"pptm":["application/vnd.ms-powerpoint.presentation.macroenabled.12"],"sldm":["application/vnd.ms-powerpoint.slide.macroenabled.12"],"ppsm":["application/vnd.ms-powerpoint.slideshow.macroenabled.12"],"potm":["application/vnd.ms-powerpoint.template.macroenabled.12"],"mpp":["application/vnd.ms-project"],"mpt":["application/vnd.ms-project"],"docm":["application/vnd.ms-word.document.macroenabled.12"],"dotm":["application/vnd.ms-word.template.macroenabled.12"],"wps":["application/vnd.ms-works"],"wks":["application/vnd.ms-works"],"wcm":["application/vnd.ms-works"],"wdb":["application/vnd.ms-works"],"wpl":["application/vnd.ms-wpl"],"xps":["application/vnd.ms-xpsdocument"],"mseq":["application/vnd.mseq"],"mus":["application/vnd.musician"],"msty":["application/vnd.muvee.style"],"taglet":["application/vnd.mynfc"],"nlu":["application/vnd.neurolanguage.nlu"],"ntf":["application/vnd.lotus-notes","application/vnd.nitf"],"nitf":["application/vnd.nitf"],"nnd":["application/vnd.noblenet-directory"],"nns":["application/vnd.noblenet-sealer"],"nnw":["application/vnd.noblenet-web"],"ngdat":["application/vnd.nokia.n-gage.data"],"n-gage":["application/vnd.nokia.n-gage.symbian.install"],"rpst":["application/vnd.nokia.radio-preset"],"rpss":["application/vnd.nokia.radio-presets"],"edm":["application/vnd.novadigm.edm"],"edx":["application/vnd.novadigm.edx"],"ext":["application/vnd.novadigm.ext"],"odc":["application/vnd.oasis.opendocument.chart"],"otc":["application/vnd.oasis.opendocument.chart-template"],"odb":["application/vnd.oasis.opendocument.base","application/vnd.oasis.opendocument.database"],"odf":["application/vnd.oasis.opendocument.formula"],"odft":["application/vnd.oasis.opendocument.formula-template"],"odg":["application/vnd.oasis.opendocument.graphics"],"otg":["application/vnd.oasis.opendocument.graphics-template"],"odi":["application/vnd.oasis.opendocument.image"],"oti":["application/vnd.oasis.opendocument.image-template"],"odp":["application/vnd.oasis.opendocument.presentation"],"otp":["application/vnd.oasis.opendocument.presentation-template"],"ods":["application/vnd.oasis.opendocument.spreadsheet"],"ots":["application/vnd.oasis.opendocument.spreadsheet-template"],"odt":["application/vnd.oasis.opendocument.text"],"odm":["application/vnd.oasis.opendocument.text-master"],"ott":["application/vnd.oasis.opendocument.text-template"],"oth":["application/vnd.oasis.opendocument.text-web"],"xo":["application/vnd.olpc-sugar"],"dd2":["application/vnd.oma.dd2+xml"],"oxt":["application/vnd.openofficeorg.extension"],"pptx":["application/vnd.openxmlformats-officedocument.presentationml.presentation"],"sldx":["application/vnd.openxmlformats-officedocument.presentationml.slide"],"ppsx":["application/vnd.openxmlformats-officedocument.presentationml.slideshow"],"potx":["application/vnd.openxmlformats-officedocument.presentationml.template"],"xlsx":["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],"xltx":["application/vnd.openxmlformats-officedocument.spreadsheetml.template"],"docx":["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],"dotx":["application/vnd.openxmlformats-officedocument.wordprocessingml.template"],"mgp":["application/vnd.osgeo.mapguide.package"],"dp":["application/vnd.osgi.dp"],"esa":["application/vnd.osgi.subsystem"],"pdb":["application/vnd.palm","application/x-pilot","chemical/x-pdb"],"pqa":["application/vnd.palm"],"oprc":["application/vnd.palm"],"paw":["application/vnd.pawaafile"],"str":["application/vnd.pg.format"],"ei6":["application/vnd.pg.osasli"],"efif":["application/vnd.picsel"],"wg":["application/vnd.pmi.widget"],"plf":["application/vnd.pocketlearn"],"pbd":["application/vnd.powerbuilder6"],"box":["application/vnd.previewsystems.box"],"mgz":["application/vnd.proteus.magazine"],"qps":["application/vnd.publishare-delta-tree"],"ptid":["application/vnd.pvi.ptid1"],"qxd":["application/vnd.quark.quarkxpress"],"qxt":["application/vnd.quark.quarkxpress"],"qwd":["application/vnd.quark.quarkxpress"],"qwt":["application/vnd.quark.quarkxpress"],"qxl":["application/vnd.quark.quarkxpress"],"qxb":["application/vnd.quark.quarkxpress"],"bed":["application/vnd.realvnc.bed"],"mxl":["application/vnd.recordare.musicxml"],"musicxml":["application/vnd.recordare.musicxml+xml"],"cryptonote":["application/vnd.rig.cryptonote"],"cod":["application/vnd.rim.cod"],"rm":["application/vnd.rn-realmedia","audio/x-pn-realaudio"],"rmvb":["application/vnd.rn-realmedia-vbr"],"link66":["application/vnd.route66.link66+xml"],"st":["application/vnd.sailingtracker.track"],"see":["application/vnd.seemail"],"sema":["application/vnd.sema"],"semd":["application/vnd.semd"],"semf":["application/vnd.semf"],"ifm":["application/vnd.shana.informed.formdata"],"itp":["application/vnd.shana.informed.formtemplate"],"iif":["application/vnd.shana.informed.interchange"],"ipk":["application/vnd.shana.informed.package"],"twd":["application/vnd.simtech-mindmapper"],"twds":["application/vnd.simtech-mindmapper"],"mmf":["application/vnd.smaf"],"teacher":["application/vnd.smart.teacher"],"sdkm":["application/vnd.solent.sdkm+xml"],"sdkd":["application/vnd.solent.sdkm+xml"],"dxp":["application/vnd.spotfire.dxp"],"sfs":["application/vnd.spotfire.sfs"],"sdc":["application/vnd.stardivision.calc"],"sda":["application/vnd.stardivision.draw"],"sdd":["application/vnd.stardivision.impress"],"smf":["application/vnd.stardivision.math"],"sdw":["application/vnd.stardivision.writer"],"vor":["application/vnd.stardivision.writer"],"sgl":["application/vnd.stardivision.writer-global"],"smzip":["application/vnd.stepmania.package"],"sm":["application/vnd.stepmania.stepchart"],"sxc":["application/vnd.sun.xml.calc"],"stc":["application/vnd.sun.xml.calc.template"],"sxd":["application/vnd.sun.xml.draw"],"std":["application/vnd.sun.xml.draw.template"],"sxi":["application/vnd.sun.xml.impress"],"sti":["application/vnd.sun.xml.impress.template"],"sxm":["application/vnd.sun.xml.math"],"sxw":["application/vnd.sun.xml.writer"],"sxg":["application/vnd.sun.xml.writer.global"],"stw":["application/vnd.sun.xml.writer.template"],"sus":["application/vnd.sus-calendar"],"susp":["application/vnd.sus-calendar"],"svd":["application/vnd.svd"],"sis":["application/vnd.symbian.install"],"sisx":["application/vnd.symbian.install"],"xsm":["application/vnd.syncml+xml"],"bdm":["application/vnd.syncml.dm+wbxml"],"xdm":["application/vnd.syncml.dm+xml"],"tao":["application/vnd.tao.intent-module-archive"],"pcap":["application/vnd.tcpdump.pcap"],"cap":["application/vnd.tcpdump.pcap"],"dmp":["application/vnd.tcpdump.pcap"],"tmo":["application/vnd.tmobile-livetv"],"tpt":["application/vnd.trid.tpt"],"mxs":["application/vnd.triscape.mxs"],"tra":["application/vnd.trueapp"],"ufd":["application/vnd.ufdl"],"ufdl":["application/vnd.ufdl"],"utz":["application/vnd.uiq.theme"],"umj":["application/vnd.umajin"],"unityweb":["application/vnd.unity"],"uoml":["application/vnd.uoml+xml"],"vcx":["application/vnd.vcx"],"vsd":["application/vnd.visio"],"vst":["application/vnd.visio"],"vss":["application/vnd.visio"],"vsw":["application/vnd.visio"],"vis":["application/vnd.visionary"],"vsf":["application/vnd.vsf"],"wbxml":["application/vnd.wap.wbxml"],"wmlc":["application/vnd.wap.wmlc"],"wmlsc":["application/vnd.wap.wmlscriptc"],"wtb":["application/vnd.webturbo"],"nbp":["application/vnd.wolfram.player"],"wpd":["application/vnd.wordperfect"],"wqd":["application/vnd.wqd"],"stf":["application/vnd.wt.stf"],"xar":["application/vnd.xara"],"xfdl":["application/vnd.xfdl"],"hvd":["application/vnd.yamaha.hv-dic"],"hvs":["application/vnd.yamaha.hv-script"],"hvp":["application/vnd.yamaha.hv-voice"],"osf":["application/vnd.yamaha.openscoreformat"],"osfpvg":["application/vnd.yamaha.openscoreformat.osfpvg+xml"],"saf":["application/vnd.yamaha.smaf-audio"],"spf":["application/vnd.yamaha.smaf-phrase"],"cmp":["application/vnd.yellowriver-custom-menu"],"zir":["application/vnd.zul"],"zirz":["application/vnd.zul"],"zaz":["application/vnd.zzazz.deck+xml"],"vxml":["application/voicexml+xml"],"wgt":["application/widget"],"hlp":["application/winhlp"],"wsdl":["application/wsdl+xml"],"wspolicy":["application/wspolicy+xml"],"7z":["application/x-7z-compressed"],"abw":["application/x-abiword"],"ace":["application/x-ace-compressed"],"dmg":["application/octet-stream","application/x-apple-diskimage"],"aab":["application/x-authorware-bin"],"x32":["application/x-authorware-bin"],"u32":["application/x-authorware-bin"],"vox":["application/x-authorware-bin"],"aam":["application/x-authorware-map"],"aas":["application/x-authorware-seg"],"bcpio":["application/x-bcpio"],"torrent":["application/x-bittorrent"],"blb":["application/x-blorb"],"blorb":["application/x-blorb"],"bz":["application/x-bzip"],"bz2":["application/x-bzip2"],"boz":["application/x-bzip2"],"cbr":["application/vnd.comicbook-rar","application/x-cbr"],"cba":["application/x-cbr"],"cbt":["application/x-cbr"],"cbz":["application/vnd.comicbook+zip","application/x-cbr"],"cb7":["application/x-cbr"],"vcd":["application/x-cdlink"],"cfs":["application/x-cfs-compressed"],"chat":["application/x-chat"],"pgn":["application/vnd.chess-pgn","application/x-chess-pgn"],"nsc":["application/x-conference"],"cpio":["application/x-cpio"],"csh":["application/x-csh","text/x-csh"],"deb":["application/octet-stream","application/vnd.debian.binary-package","application/x-debian-package"],"udeb":["application/vnd.debian.binary-package","application/x-debian-package"],"dgc":["application/x-dgc-compressed"],"dir":["application/x-director"],"dcr":["application/x-director"],"dxr":["application/x-director"],"cst":["application/vnd.commonspace","application/x-director"],"cct":["application/x-director"],"cxt":["application/x-director"],"w3d":["application/x-director"],"fgd":["application/x-director"],"swa":["application/x-director"],"wad":["application/x-doom"],"ncx":["application/x-dtbncx+xml"],"dtb":["application/x-dtbook+xml"],"res":["application/x-dtbresource+xml"],"dvi":["application/x-dvi"],"evy":["application/x-envoy"],"eva":["application/x-eva"],"bdf":["application/x-font-bdf"],"gsf":["application/x-font","application/x-font-ghostscript"],"psf":["application/x-font-linux-psf"],"pcf":["application/x-font-pcf"],"snf":["application/x-font-snf"],"pfa":["application/x-font","application/x-font-type1"],"pfb":["application/x-font","application/x-font-type1"],"pfm":["application/x-font-type1"],"afm":["application/x-font-type1"],"arc":["application/x-freearc"],"spl":["application/futuresplash","application/x-futuresplash"],"gca":["application/x-gca-compressed"],"ulx":["application/x-glulx"],"gnumeric":["application/x-gnumeric"],"gramps":["application/x-gramps-xml"],"gtar":["application/x-gtar"],"hdf":["application/x-hdf"],"install":["application/x-install-instructions"],"iso":["application/octet-stream","application/x-iso9660-image"],"jnlp":["application/x-java-jnlp-file"],"latex":["application/x-latex"],"lzh":["application/x-lzh","application/x-lzh-compressed"],"lha":["application/x-lha","application/x-lzh-compressed"],"mie":["application/x-mie"],"prc":["application/x-mobipocket-ebook","application/x-pilot","model/prc"],"mobi":["application/x-mobipocket-ebook"],"application":["application/x-ms-application"],"lnk":["application/x-ms-shortcut"],"wmd":["application/x-ms-wmd"],"wmz":["application/x-ms-wmz","application/x-msmetafile"],"xbap":["application/x-ms-xbap"],"mdb":["application/msaccess","application/x-msaccess"],"obd":["application/x-msbinder"],"crd":["application/x-mscardfile"],"clp":["application/x-msclip"],"exe":["application/octet-stream","application/x-msdos-program","application/x-msdownload"],"dll":["application/octet-stream","application/x-msdos-program","application/x-msdownload"],"com":["application/x-msdos-program","application/x-msdownload"],"bat":["application/x-msdos-program","application/x-msdownload"],"msi":["application/octet-stream","application/x-msdownload","application/x-msi"],"mvb":["application/x-msmediaview","chemical/x-mopac-vib"],"m13":["application/x-msmediaview"],"m14":["application/x-msmediaview"],"wmf":["application/x-msmetafile","image/wmf"],"emf":["application/x-msmetafile","image/emf"],"emz":["application/x-msmetafile"],"mny":["application/x-msmoney"],"pub":["application/vnd.exstream-package","application/x-mspublisher"],"scd":["application/vnd.scribus","application/x-msschedule"],"trm":["application/x-msterminal"],"wri":["application/x-mswrite"],"nc":["application/x-netcdf"],"cdf":["application/x-cdf","application/x-netcdf"],"nzb":["application/x-nzb"],"p12":["application/pkcs12","application/x-pkcs12"],"pfx":["application/pkcs12","application/x-pkcs12"],"p7b":["application/x-pkcs7-certificates"],"spc":["application/x-pkcs7-certificates","chemical/x-galactic-spc"],"p7r":["application/x-pkcs7-certreqresp"],"rar":["application/vnd.rar","application/x-rar-compressed"],"ris":["application/x-research-info-systems"],"sh":["application/x-sh","text/x-sh"],"shar":["application/x-shar"],"swf":["application/vnd.adobe.flash.movie","application/x-shockwave-flash"],"xap":["application/x-silverlight-app"],"sql":["application/sql","application/x-sql"],"sit":["application/x-stuffit"],"sitx":["application/x-stuffit","application/x-stuffitx"],"srt":["application/x-subrip","text/plain"],"sv4cpio":["application/x-sv4cpio"],"sv4crc":["application/x-sv4crc"],"t3":["application/x-t3vm-image"],"gam":["application/x-tads","chemical/x-gamess-input"],"tar":["application/x-tar"],"tcl":["application/x-tcl","text/x-tcl"],"tex":["application/x-tex","text/x-tex"],"tfm":["application/x-tex-tfm"],"texinfo":["application/x-texinfo"],"texi":["application/x-texinfo"],"obj":["application/x-tgif","model/obj"],"ustar":["application/x-ustar"],"src":["application/x-wais-source"],"der":["application/x-x509-ca-cert"],"crt":["application/x-x509-ca-cert"],"fig":["application/x-xfig"],"xlf":["application/x-xliff+xml","application/xliff+xml"],"xpi":["application/x-xpinstall"],"xz":["application/x-xz"],"z1":["application/x-zmachine"],"z2":["application/x-zmachine"],"z3":["application/x-zmachine"],"z4":["application/x-zmachine"],"z5":["application/x-zmachine"],"z6":["application/x-zmachine"],"z7":["application/x-zmachine"],"z8":["application/x-zmachine"],"xaml":["application/xaml+xml"],"xdf":["application/xcap-diff+xml"],"xenc":["application/xenc+xml"],"xhtml":["application/xhtml+xml"],"xht":["application/xhtml+xml"],"xml":["application/xml","text/xml"],"xsl":["application/xml","application/xslt+xml"],"dtd":["application/xml-dtd"],"xop":["application/xop+xml"],"xpl":["application/xproc+xml"],"xslt":["application/xslt+xml"],"xspf":["application/xspf+xml"],"mxml":["application/xv+xml"],"xhvml":["application/xv+xml"],"xvml":["application/xv+xml"],"xvm":["application/xv+xml"],"yang":["application/yang"],"yin":["application/yin+xml"],"zip":["application/zip"],"adp":["audio/adpcm"],"au":["audio/basic"],"snd":["audio/basic"],"mid":["audio/midi","audio/sp-midi"],"midi":["audio/midi"],"kar":["audio/midi"],"rmi":["audio/midi"],"m4a":["audio/mp4","audio/x-m4a"],"mp4a":["audio/mp4"],"mpga":["audio/mpeg"],"mp2":["audio/mpeg"],"mp2a":["audio/mpeg"],"mp3":["audio/mpeg"],"m2a":["audio/mpeg"],"m3a":["audio/mpeg"],"oga":["audio/ogg"],"ogg":["audio/ogg"],"spx":["audio/ogg"],"opus":["audio/ogg"],"s3m":["audio/s3m"],"sil":["audio/silk"],"uva":["audio/vnd.dece.audio"],"uvva":["audio/vnd.dece.audio"],"eol":["audio/vnd.digital-winds"],"dra":["audio/vnd.dra"],"dts":["audio/vnd.dts"],"dtshd":["audio/vnd.dts.hd"],"lvp":["audio/vnd.lucent.voice"],"pya":["audio/vnd.ms-playready.media.pya"],"ecelp4800":["audio/vnd.nuera.ecelp4800"],"ecelp7470":["audio/vnd.nuera.ecelp7470"],"ecelp9600":["audio/vnd.nuera.ecelp9600"],"rip":["audio/vnd.rip"],"weba":["audio/webm"],"aac":["audio/aac","audio/x-aac"],"aif":["audio/x-aiff"],"aiff":["audio/x-aiff"],"aifc":["audio/x-aiff"],"caf":["audio/x-caf"],"flac":["audio/flac","audio/x-flac"],"mka":["audio/x-matroska"],"m3u":["audio/mpegurl","audio/x-mpegurl"],"wax":["audio/x-ms-wax"],"wma":["audio/x-ms-wma"],"ram":["audio/x-pn-realaudio"],"ra":["audio/x-pn-realaudio","audio/x-realaudio"],"rmp":["audio/x-pn-realaudio-plugin"],"wav":["audio/x-wav"],"xm":["audio/xm"],"cdx":["chemical/x-cdx"],"cif":["application/vnd.multiad.creator.cif","chemical/x-cif"],"cmdf":["chemical/x-cmdf"],"cml":["application/cellml+xml","chemical/x-cml"],"csml":["chemical/x-csml"],"xyz":["chemical/x-xyz"],"ttc":["font/collection"],"otf":["font/otf"],"ttf":["font/ttf"],"woff":["font/woff"],"woff2":["font/woff2"],"bmp":["image/bmp","image/x-ms-bmp"],"cgm":["image/cgm"],"g3":["image/g3fax"],"gif":["image/gif"],"ief":["image/ief"],"jpeg":["image/jpeg"],"jpg":["image/jpeg"],"jpe":["image/jpeg"],"ktx":["image/ktx"],"png":["image/png"],"btif":["image/prs.btif"],"sgi":["image/sgi","image/vnd.sealedmedia.softseal.gif"],"svg":["image/svg+xml"],"svgz":["image/svg+xml"],"tiff":["image/tiff"],"tif":["image/tiff"],"psd":["image/vnd.adobe.photoshop"],"uvi":["image/vnd.dece.graphic"],"uvvi":["image/vnd.dece.graphic"],"uvg":["image/vnd.dece.graphic"],"uvvg":["image/vnd.dece.graphic"],"djvu":["image/vnd.djvu"],"djv":["image/vnd.djvu"],"sub":["image/vnd.dvb.subtitle","text/vnd.dvb.subtitle"],"dwg":["image/vnd.dwg"],"dxf":["image/vnd.dxf"],"fbs":["image/vnd.fastbidsheet"],"fpx":["image/vnd.fpx"],"fst":["image/vnd.fst"],"mmr":["image/vnd.fujixerox.edmics-mmr"],"rlc":["image/vnd.fujixerox.edmics-rlc"],"mdi":["image/vnd.ms-modi"],"wdp":["image/vnd.ms-photo"],"npx":["image/vnd.net-fpx"],"wbmp":["image/vnd.wap.wbmp"],"xif":["image/vnd.xiff"],"webp":["image/webp"],"3ds":["image/x-3ds"],"ras":["image/x-cmu-raster"],"cmx":["image/x-cmx"],"fh":["image/x-freehand"],"fhc":["image/x-freehand"],"fh4":["image/x-freehand"],"fh5":["image/x-freehand"],"fh7":["image/x-freehand"],"ico":["image/vnd.microsoft.icon","image/x-icon"],"sid":["audio/prs.sid","image/x-mrsid-image"],"pcx":["image/vnd.zbrush.pcx","image/x-pcx"],"pic":["image/x-pict"],"pct":["image/x-pict"],"pnm":["image/x-portable-anymap"],"pbm":["image/x-portable-bitmap"],"pgm":["image/x-portable-graymap"],"ppm":["image/x-portable-pixmap"],"rgb":["image/x-rgb"],"tga":["image/x-tga"],"xbm":["image/x-xbitmap"],"xpm":["image/x-xpixmap"],"xwd":["image/x-xwindowdump"],"eml":["message/rfc822"],"mime":["message/rfc822"],"igs":["model/iges"],"iges":["model/iges"],"msh":["model/mesh"],"mesh":["model/mesh"],"silo":["model/mesh"],"dae":["model/vnd.collada+xml"],"dwf":["model/vnd.dwf"],"gdl":["model/vnd.gdl"],"gtw":["model/vnd.gtw"],"mts":["model/vnd.mts"],"vtu":["model/vnd.vtu"],"wrl":["model/vrml"],"vrml":["model/vrml"],"x3db":["model/x3d+binary","model/x3d+fastinfoset"],"x3dbz":["model/x3d+binary"],"x3dv":["model/x3d+vrml","model/x3d-vrml"],"x3dvz":["model/x3d+vrml","model/x3d-vrml"],"x3d":["model/x3d+xml"],"x3dz":["model/x3d+xml"],"appcache":["text/cache-manifest"],"ics":["text/calendar"],"ifb":["text/calendar"],"css":["text/css"],"csv":["text/csv"],"html":["text/html"],"htm":["text/html"],"js":["application/javascript","text/javascript"],"mjs":["text/javascript"],"n3":["text/n3"],"txt":["text/plain"],"text":["text/plain"],"conf":["text/plain"],"def":["text/plain"],"list":["text/plain"],"log":["text/plain"],"in":["text/plain"],"dsc":["text/prs.lines.tag"],"rtx":["text/richtext"],"sgml":["text/sgml"],"sgm":["text/sgml"],"tsv":["text/tab-separated-values"],"t":["text/troff"],"tr":["text/troff"],"roff":["text/troff"],"man":["application/x-troff-man","text/troff"],"me":["application/x-troff-me","text/troff"],"ms":["application/x-troff-ms","text/troff"],"ttl":["text/turtle"],"uri":["text/uri-list"],"uris":["text/uri-list"],"urls":["text/uri-list"],"vcard":["text/vcard"],"curl":["text/vnd.curl"],"dcurl":["text/vnd.curl.dcurl"],"mcurl":["text/vnd.curl.mcurl"],"scurl":["text/vnd.curl.scurl"],"fly":["text/vnd.fly"],"flx":["text/vnd.fmi.flexstor"],"gv":["text/vnd.graphviz"],"3dml":["text/vnd.in3d.3dml"],"spot":["text/vnd.in3d.spot"],"jad":["text/vnd.sun.j2me.app-descriptor"],"wml":["text/vnd.wap.wml"],"wmls":["text/vnd.wap.wmlscript"],"s":["text/x-asm"],"asm":["text/x-asm"],"c":["text/x-c","text/x-csrc"],"cc":["text/x-c","text/x-c++src"],"cxx":["text/x-c","text/x-c++src"],"cpp":["text/x-c","text/x-c++src"],"h":["text/x-c","text/x-chdr"],"hh":["text/x-c","text/x-c++hdr"],"dic":["text/x-c"],"f":["text/x-fortran"],"for":["text/x-fortran"],"f77":["text/x-fortran"],"f90":["text/x-fortran"],"java":["text/x-java","text/x-java-source"],"nfo":["text/x-nfo"],"opml":["text/x-opml"],"p":["text/x-pascal"],"pas":["text/x-pascal"],"etx":["text/x-setext"],"sfv":["text/x-sfv"],"uu":["text/x-uuencode"],"vcs":["text/x-vcalendar"],"vcf":["text/vcard","text/x-vcard"],"3gp":["video/3gpp"],"3g2":["video/3gpp2"],"h261":["video/h261"],"h263":["video/h263"],"h264":["video/h264"],"jpgv":["video/jpeg"],"jpm":["image/jpm","video/jpm"],"jpgm":["image/jpm","video/jpm"],"mj2":["video/mj2"],"mjp2":["video/mj2"],"mp4":["video/mp4"],"mp4v":["video/mp4"],"mpg4":["video/mp4"],"mpeg":["video/mpeg"],"mpg":["video/mpeg"],"mpe":["video/mpeg"],"m1v":["video/mpeg"],"m2v":["video/mpeg"],"ogv":["video/ogg"],"qt":["video/quicktime"],"mov":["video/quicktime"],"uvh":["video/vnd.dece.hd"],"uvvh":["video/vnd.dece.hd"],"uvm":["video/vnd.dece.mobile"],"uvvm":["video/vnd.dece.mobile"],"uvp":["video/vnd.dece.pd"],"uvvp":["video/vnd.dece.pd"],"uvs":["video/vnd.dece.sd"],"uvvs":["video/vnd.dece.sd"],"uvv":["video/vnd.dece.video"],"uvvv":["video/vnd.dece.video"],"dvb":["video/vnd.dvb.file"],"fvt":["video/vnd.fvt"],"mxu":["video/vnd.mpegurl"],"m4u":["video/vnd.mpegurl"],"pyv":["video/vnd.ms-playready.media.pyv"],"uvu":["video/vnd.dece.mp4","video/vnd.uvvu.mp4"],"uvvu":["video/vnd.dece.mp4","video/vnd.uvvu.mp4"],"viv":["video/vnd.vivo"],"webm":["video/webm"],"f4v":["video/x-f4v"],"fli":["video/fli","video/x-fli"],"flv":["video/x-flv"],"m4v":["video/mp4","video/x-m4v"],"mkv":["video/x-matroska"],"mk3d":["video/x-matroska"],"mks":["video/x-matroska"],"mng":["video/x-mng"],"asf":["application/vnd.ms-asf","video/x-ms-asf"],"asx":["video/x-ms-asf"],"vob":["video/x-ms-vob"],"wm":["video/x-ms-wm"],"wmv":["video/x-ms-wmv"],"wmx":["video/x-ms-wmx"],"wvx":["video/x-ms-wvx"],"avi":["video/x-msvideo"],"movie":["video/x-sgi-movie"],"smv":["audio/smv","video/x-smv"],"ice":["x-conference/x-cooltalk"],"a2l":["application/a2l"],"aml":["application/aml"],"anx":["application/annodex"],"atf":["application/atf"],"atfx":["application/atfx"],"atomdeleted":["application/atomdeleted+xml"],"atomsrv":["application/atomserv+xml"],"dwd":["application/atsc-dwd+xml"],"held":["application/atsc-held+xml"],"rsat":["application/atsc-rsat+xml"],"atxml":["application/atxml"],"apxml":["application/auth-policy+xml"],"amlx":["application/automationml-amlx+zip"],"xdd":["application/bacnet-xdd+zip"],"lin":["application/bbolin"],"xcs":["application/calendar+xml"],"cbor":["application/cbor"],"c3ex":["application/cccex"],"ccmp":["application/ccmp+xml"],"cdfx":["application/cdfx+xml"],"cea":["application/cea"],"cellml":["application/cellml+xml"],"1clr":["application/clr"],"clue":["application/clue_info+xml"],"cmsc":["application/cms"],"cpl":["application/cpl+xml"],"csrattrs":["application/csrattrs"],"cwl":["application/cwl"],"mpd":["application/dash+xml"],"mpdd":["application/dashdelta"],"dcd":["application/dcd"],"dcm":["application/dicom"],"dii":["application/dii"],"dit":["application/dit"],"xmls":["application/dskpp+xml"],"tsp":["application/dsptype"],"dvc":["application/dvcs"],"efi":["application/efi"],"emotionml":["application/emotionml+xml"],"exp":["application/express"],"finf":["application/fastinfoset"],"fdt":["application/fdt+xml"],"geojson":["application/geo+json"],"gpkg":["application/geopackage+sqlite3"],"glbin":["application/gltf-buffer"],"glbuf":["application/gltf-buffer"],"gz":["application/gzip"],"hta":["application/hta"],"its":["application/its+xml"],"jrd":["application/jrd+json"],"json-patch":["application/json-patch+json"],"jsonld":["application/ld+json"],"lgr":["application/lgr+xml"],"wlnk":["application/link-format"],"lostsyncxml":["application/lostsync+xml"],"lpf":["application/lpf+zip"],"lxf":["application/lxf"],"m3g":["application/m3g"],"webmanifest":["application/manifest+json"],"mml":["application/mathml+xml","text/mathml"],"mf4":["application/mf4"],"maei":["application/mmt-aei+xml"],"musd":["application/mmt-usd+xml"],"nq":["application/n-quads"],"nt":["application/n-triples"],"orq":["application/ocsp-request"],"ors":["application/ocsp-response"],"msu":["application/octet-stream"],"msp":["application/octet-stream"],"odx":["application/odx"],"one":["application/onenote"],"p21":["application/p21"],"stpnc":["application/p21"],"ifc":["application/p21"],"relo":["application/p2p-overlay+xml"],"pdx":["application/pdx"],"pem":["application/pem-certificate-chain","application/x-x509-ca-cert"],"key":["application/pgp-keys"],"p7z":["application/pkcs7-mime"],"p8e":["application/pkcs8-encrypted"],"epsi":["application/postscript"],"epsf":["application/postscript"],"eps2":["application/postscript"],"eps3":["application/postscript"],"provx":["application/provenance+xml"],"cw":["application/prs.cww"],"hpub":["application/prs.hpub+zip"],"rnd":["application/prs.nprend"],"rct":["application/prs.nprend"],"rdf-crypt":["application/prs.rdf-xml-crypt"],"xsf":["application/prs.xsf+xml"],"rfcxml":["application/rfc+xml"],"rapd":["application/route-apd+xml"],"sls":["application/route-s-tsid+xml"],"rusd":["application/route-usd+xml"],"sarif":["application/sarif+json"],"sarif-external-properties":["application/sarif-external-properties+json"],"scim":["application/scim+json"],"senmlc":["application/senml+cbor"],"senml":["application/senml+json"],"senmlx":["application/senml+xml"],"senml-etchc":["application/senml-etch+cbor"],"senml-etchj":["application/senml-etch+json"],"senmle":["application/senml-exi"],"sensmlc":["application/sensml+cbor"],"sensml":["application/sensml+json"],"sensmlx":["application/sensml+xml"],"sensmle":["application/sensml-exi"],"soc":["application/sgml-open-catalog"],"siv":["application/sieve"],"sieve":["application/sieve"],"cl":["application/simple-filter+xml"],"sml":["application/smil+xml"],"stix":["application/stix+json"],"coswid":["application/swid+cbor"],"swidtag":["application/swid+xml"],"tau":["application/tamp-apex-update"],"auc":["application/tamp-apex-update-confirm"],"tcu":["application/tamp-community-update"],"cuc":["application/tamp-community-update-confirm"],"ter":["application/tamp-error"],"tsa":["application/tamp-sequence-adjust"],"sac":["application/tamp-sequence-adjust-confirm"],"tur":["application/tamp-update"],"tuc":["application/tamp-update-confirm"],"jsontd":["application/td+json"],"odd":["application/tei+xml"],"tsq":["application/timestamp-query"],"tsr":["application/timestamp-reply"],"jsontm":["application/tm+json"],"trig":["application/trig"],"ttml":["application/ttml+xml"],"gsheet":["application/urc-grpsheet+xml"],"rsheet":["application/urc-ressheet+xml"],"td":["application/urc-targetdesc+xml"],"uis":["application/urc-uisocketdesc+xml"],"1km":["application/vnd.1000minds.decision-model+xml"],"sms":["application/vnd.3gpp2.sms"],"imgcal":["application/vnd.3lightssoftware.imagescal"],"pseg3820":["application/vnd.afpc.modca"],"ovl":["application/vnd.afpc.modca-overlay"],"psg":["application/vnd.afpc.modca-pagesegment"],"age":["application/vnd.age"],"azw3":["application/vnd.amazon.mobi8-ebook"],"ota":["application/vnd.android.ota"],"apkg":["application/vnd.anki"],"arrow":["application/vnd.apache.arrow.file"],"arrows":["application/vnd.apache.arrow.stream"],"apexlang":["application/vnd.apexlang"],"apex":["application/vnd.apexlang"],"keynote":["application/vnd.apple.keynote"],"numbers":["application/vnd.apple.numbers"],"pages":["application/vnd.apple.pages"],"artisan":["application/vnd.artisan+json"],"package":["application/vnd.autopackage"],"bmml":["application/vnd.balsamiq.bmml+xml"],"bmpr":["application/vnd.balsamiq.bmpr"],"ac2":["application/vnd.banana-accounting"],"lhzd":["application/vnd.belightsoft.lhzd+zip"],"lhzl":["application/vnd.belightsoft.lhzl+zip"],"ep":["application/vnd.bluetooth.ep.oob"],"le":["application/vnd.bluetooth.le.oob"],"tlclient":["application/vnd.cendio.thinlinc.clientconf"],"csl":["application/vnd.citationstyles.style+xml"],"coffee":["application/vnd.coffeescript"],"xodt":["application/vnd.collabio.xodocuments.document"],"xott":["application/vnd.collabio.xodocuments.document-template"],"xodp":["application/vnd.collabio.xodocuments.presentation"],"xotp":["application/vnd.collabio.xodocuments.presentation-template"],"xods":["application/vnd.collabio.xodocuments.spreadsheet"],"xots":["application/vnd.collabio.xodocuments.spreadsheet-template"],"icf":["application/vnd.commerce-battelle"],"icd":["application/vnd.commerce-battelle"],"ic0":["application/vnd.commerce-battelle"],"ic1":["application/vnd.commerce-battelle"],"ic2":["application/vnd.commerce-battelle"],"ic3":["application/vnd.commerce-battelle"],"ic4":["application/vnd.commerce-battelle"],"ic5":["application/vnd.commerce-battelle"],"ic6":["application/vnd.commerce-battelle"],"ic7":["application/vnd.commerce-battelle"],"ic8":["application/vnd.commerce-battelle"],"ign":["application/vnd.coreos.ignition+json"],"ignition":["application/vnd.coreos.ignition+json"],"ssvc":["application/vnd.crypto-shade-file"],"c9r":["application/vnd.cryptomator.encrypted"],"c9s":["application/vnd.cryptomator.encrypted"],"cryptomator":["application/vnd.cryptomator.vault"],"dl":["application/vnd.datalog"],"dbf":["application/vnd.dbf"],"ddeb":["application/vnd.debian.binary-package"],"dsm":["application/vnd.desmume.movie"],"docjson":["application/vnd.document+json"],"scld":["application/vnd.doremir.scorecloud-binary-document"],"mwc":["application/vnd.dpgraph"],"dpgraph":["application/vnd.dpgraph"],"fla":["application/vnd.dtg.local.flash"],"dzr":["application/vnd.dzr"],"eln":["application/vnd.eln+zip"],"qcall":["application/vnd.ericsson.quickcall"],"qca":["application/vnd.ericsson.quickcall"],"espass":["application/vnd.espass-espass+zip"],"asice":["application/vnd.etsi.asic-e+zip"],"sce":["application/vnd.etsi.asic-e+zip","application/x-scilab"],"asics":["application/vnd.etsi.asic-s+zip"],"tst":["application/vnd.etsi.timestamp-token"],"carjson":["application/vnd.eu.kasparian.car+json"],"ecigprofile":["application/vnd.evolv.ecig.profile"],"ecig":["application/vnd.evolv.ecig.settings"],"ecigtheme":["application/vnd.evolv.ecig.theme"],"mpw":["application/vnd.exstream-empower+zip"],"gdz":["application/vnd.familysearch.gedcom+zip"],"dim":["application/vnd.fastcopy-disk-image"],"msd":["application/vnd.fdsn.mseed"],"flb":["application/vnd.ficlab.flb+zip"],"zfc":["application/vnd.filmit.zfc"],"sfd":["application/vnd.font-fontforge-sfd"],"xct":["application/vnd.fujixerox.docuworks.container"],"genozip":["application/vnd.genozip"],"grd":["application/vnd.gentics.grd+json"],"ebuild":["application/vnd.gentoo.ebuild"],"eclass":["application/vnd.gentoo.eclass"],"xpak":["application/vnd.gentoo.xpak"],"ggs":["application/vnd.geogebra.slides"],"hbc":["application/vnd.hbci"],"kom":["application/vnd.hbci"],"upa":["application/vnd.hbci"],"pkd":["application/vnd.hbci"],"bpd":["application/vnd.hbci"],"hdt":["application/vnd.hdt"],"hpi":["application/vnd.hp-hpid"],"hsl":["application/vnd.hsl"],"emm":["application/vnd.ibm.electronic-media"],"imf":["application/vnd.imagemeter.folder+zip"],"imi":["application/vnd.imagemeter.image+zip"],"imscc":["application/vnd.ims.imsccv1p1"],"sdf":["application/vnd.kinar","chemical/x-mdl-sdfile"],"las":["application/vnd.las"],"lasjson":["application/vnd.las.las+json"],"lcs":["application/vnd.logipipe.circuit+zip"],"lca":["application/vnd.logipipe.circuit+zip"],"loom":["application/vnd.loom"],"wk4":["application/vnd.lotus-1-2-3"],"wk3":["application/vnd.lotus-1-2-3"],"wk1":["application/vnd.lotus-1-2-3"],"vew":["application/vnd.lotus-approach"],"prz":["application/vnd.lotus-freelance"],"ndl":["application/vnd.lotus-notes"],"ns4":["application/vnd.lotus-notes"],"ns3":["application/vnd.lotus-notes"],"ns2":["application/vnd.lotus-notes"],"nsh":["application/vnd.lotus-notes"],"nsg":["application/vnd.lotus-notes"],"or3":["application/vnd.lotus-organizer"],"or2":["application/vnd.lotus-organizer"],"sam":["application/vnd.lotus-wordpro"],"mvt":["application/vnd.mapbox-vector-tile"],"mdc":["application/vnd.marlin.drm.mdcf"],"3tz":["application/vnd.maxar.archive.3tz+zip"],"mmdb":["application/vnd.maxmind.maxmind-db"],"mdl":["application/vnd.mdl"],"mbsdf":["application/vnd.mdl-mbsdf"],"rxt":["application/vnd.medicalholodeck.recordxr"],"modl":["application/vnd.modl"],"3mf":["application/vnd.ms-3mfdocument"],"tnef":["application/vnd.ms-tnef"],"tnf":["application/vnd.ms-tnef"],"msa":["application/vnd.msa-disk-image"],"crtr":["application/vnd.multiad.creator"],"nebul":["application/vnd.nebumind.line"],"line":["application/vnd.nebumind.line"],"entity":["application/vnd.nervana"],"request":["application/vnd.nervana"],"bkm":["application/vnd.nervana"],"kcm":["application/vnd.nervana"],"nimn":["application/vnd.nimn"],"nds":["application/vnd.nintendo.nitro.rom"],"sfc":["application/vnd.nintendo.snes.rom"],"smc":["application/vnd.nintendo.snes.rom"],"otm":["application/vnd.oasis.opendocument.text-master-template"],"tam":["application/vnd.onepager"],"tamp":["application/vnd.onepagertamp"],"tamx":["application/vnd.onepagertamx"],"tat":["application/vnd.onepagertat"],"tatp":["application/vnd.onepagertatp"],"tatx":["application/vnd.onepagertatx"],"obgx":["application/vnd.openblox.game+xml"],"obg":["application/vnd.openblox.game-binary"],"oeb":["application/vnd.openeye.oeb"],"osm":["application/vnd.openstreetmap.data+xml"],"ndc":["application/vnd.osa.netdeploy"],"oxlicg":["application/vnd.oxli.countgraph"],"plp":["application/vnd.panoply"],"dive":["application/vnd.patentdive"],"pil":["application/vnd.piaccess.application-licence"],"preminet":["application/vnd.preminet"],"vbox":["application/vnd.previewsystems.box"],"psfs":["application/vnd.psfs"],"bar":["application/vnd.qualcomm.brew-app-res"],"quox":["application/vnd.quobject-quoxdocument"],"quiz":["application/vnd.quobject-quoxdocument"],"tree":["application/vnd.rainstor.data"],"rlm":["application/vnd.resilient.logic"],"reload":["application/vnd.resilient.logic"],"sar":["application/vnd.sar"],"sla":["application/vnd.scribus"],"slaz":["application/vnd.scribus"],"s3df":["application/vnd.sealed.3df"],"scsf":["application/vnd.sealed.csf"],"sdoc":["application/vnd.sealed.doc"],"sdo":["application/vnd.sealed.doc"],"s1w":["application/vnd.sealed.doc"],"seml":["application/vnd.sealed.eml"],"sem":["application/vnd.sealed.eml"],"smht":["application/vnd.sealed.mht"],"smh":["application/vnd.sealed.mht"],"sppt":["application/vnd.sealed.ppt"],"s1p":["application/vnd.sealed.ppt"],"stif":["application/vnd.sealed.tiff"],"sxls":["application/vnd.sealed.xls"],"sxl":["application/vnd.sealed.xls"],"s1e":["application/vnd.sealed.xls"],"stml":["application/vnd.sealedmedia.softseal.html"],"s1h":["application/vnd.sealedmedia.softseal.html"],"spdf":["application/vnd.sealedmedia.softseal.pdf"],"spd":["application/vnd.sealedmedia.softseal.pdf"],"s1a":["application/vnd.sealedmedia.softseal.pdf"],"ssv":["application/vnd.shade-save-file"],"shp":["application/vnd.shp","application/x-qgis"],"shx":["application/vnd.shx","application/x-qgis"],"sr":["application/vnd.sigrok.session"],"notebook":["application/vnd.smart.notebook"],"sipa":["application/vnd.smintio.portals.archive"],"ptrom":["application/vnd.snesdev-page-table"],"pt":["application/vnd.snesdev-page-table"],"fo":["application/vnd.software602.filler.form+xml"],"zfo":["application/vnd.software602.filler.form-xml-zip"],"sqlite":["application/vnd.sqlite3"],"sqlite3":["application/vnd.sqlite3"],"sds":["application/vnd.stardivision.chart"],"wadl":["application/vnd.sun.wadl+xml"],"ml2":["application/vnd.sybyl.mol2"],"mol2":["application/vnd.sybyl.mol2"],"sy2":["application/vnd.sybyl.mol2"],"scl":["application/vnd.sycle+xml"],"ddf":["application/vnd.syncml.dmddf+xml"],"qvd":["application/vnd.theqvd"],"ppttc":["application/vnd.think-cell.ppttc+json"],"vfr":["application/vnd.tml"],"viaframe":["application/vnd.tml"],"frm":["application/vnd.ufdl","application/x-maker"],"uo":["application/vnd.uoml+xml"],"urim":["application/vnd.uri-map"],"urimap":["application/vnd.uri-map"],"vmt":["application/vnd.valve.source.material"],"mxi":["application/vnd.vd-study"],"study-inter":["application/vnd.vd-study"],"model-inter":["application/vnd.vd-study"],"vwx":["application/vnd.vectorworks"],"aion":["application/vnd.veritone.aion+json"],"vtnstd":["application/vnd.veritone.aion+json"],"istc":["application/vnd.veryant.thin"],"isws":["application/vnd.veryant.thin"],"ves":["application/vnd.ves.encrypted"],"vsc":["application/vnd.vidsoft.vidconference"],"sic":["application/vnd.wap.sic"],"slc":["application/vnd.wap.slc"],"wafl":["application/vnd.wasmflow.wafl"],"p2p":["application/vnd.wfa.p2p"],"wsc":["application/vnd.wfa.wsc"],"wmc":["application/vnd.wmc"],"m":["application/vnd.wolfram.mathematica.package"],"wv":["application/vnd.wv.csp+wbxml"],"xfd":["application/vnd.xfdl"],"cpkg":["application/vnd.xmpie.cpkg"],"dpkg":["application/vnd.xmpie.dpkg"],"ppkg":["application/vnd.xmpie.ppkg"],"xlim":["application/vnd.xmpie.xlim"],"yme":["application/vnd.yaoweme"],"vcj":["application/voucher-cms+json"],"wasm":["application/wasm"],"wif":["application/watcherinfo+xml"],"wk":["application/x-123"],"cda":["application/x-cdf"],"mph":["application/x-comsol"],"mm":["application/x-freemind"],"gan":["application/x-ganttproject"],"sgf":["application/x-go-sgf"],"gcf":["application/x-graphing-calculator"],"tgz":["application/x-gtar-compressed"],"taz":["application/x-gtar-compressed"],"hwp":["application/x-hwp"],"ica":["application/x-ica"],"info":["application/x-info"],"ins":["application/x-internet-signup"],"isp":["application/x-internet-signup"],"iii":["application/x-iphone"],"jmz":["application/x-jmol"],"kil":["application/x-killustrator"],"lyx":["application/x-lyx"],"lzx":["application/x-lzx"],"fb":["application/x-maker"],"fbdoc":["application/x-maker"],"pac":["application/x-ns-proxy-autoconfig"],"nwc":["application/x-nwc"],"o":["application/x-object"],"oza":["application/x-oz-application"],"pyc":["application/x-python-code"],"pyo":["application/x-python-code"],"qgs":["application/x-qgis"],"qtl":["application/x-quicktimeplayer"],"rdp":["application/x-rdp"],"rpm":["application/x-redhat-package-manager"],"rb":["application/x-ruby"],"sci":["application/x-scilab"],"xcos":["application/x-scilab-xcos"],"scr":["application/x-silverlight"],"gf":["application/x-tex-gf"],"pk":["application/x-tex-pk"],"bak":["application/x-trash"],"old":["application/x-trash"],"sik":["application/x-trash"],"wz":["application/x-wingz"],"xav":["application/xcap-att+xml"],"xca":["application/xcap-caps+xml"],"xel":["application/xcap-el+xml"],"xns":["application/xcap-ns+xml"],"xhtm":["application/xhtml+xml"],"mod":["application/xml-dtd"],"ent":["application/xml-external-parsed-entity"],"zst":["application/zstd"],"adts":["audio/aac"],"ass":["audio/aac"],"ac3":["audio/ac3"],"amr":["audio/amr","audio/amr"],"awb":["audio/amr-wb","audio/amr-wb"],"axa":["audio/annodex"],"acn":["audio/asc"],"aal":["audio/atrac-advanced-lossless"],"at3":["audio/atrac3"],"aa3":["audio/atrac3"],"omg":["audio/atrac3"],"csd":["audio/csound"],"orc":["audio/csound"],"sco":["audio/csound"],"dls":["audio/dls"],"evc":["audio/evrc"],"qcp":["audio/evrc-qcp","audio/evrc-qcp"],"evb":["audio/evrcb"],"enw":["audio/evrcnw"],"evw":["audio/evrcwb"],"lbc":["audio/ilbc"],"l16":["audio/l16"],"mhas":["audio/mhas"],"mxmf":["audio/mobile-xmf"],"mpega":["audio/mpeg"],"mp1":["audio/mpeg"],"psid":["audio/prs.sid"],"sofa":["audio/sofa"],"loas":["audio/usac"],"xhe":["audio/usac"],"koz":["audio/vnd.audiokoz"],"plj":["audio/vnd.everad.plj"],"vbk":["audio/vnd.nortel.vbk"],"multitrack":["audio/vnd.presonus.multitrack"],"smp3":["audio/vnd.sealedmedia.softseal.mpeg"],"smp":["audio/vnd.sealedmedia.softseal.mpeg"],"s1m":["audio/vnd.sealedmedia.softseal.mpeg"],"gsm":["audio/x-gsm","model/vnd.gdl"],"sd2":["audio/x-sd2"],"alc":["chemical/x-alchemy"],"cac":["chemical/x-cache"],"cache":["chemical/x-cache"],"csf":["chemical/x-cache-csf"],"cbin":["chemical/x-cactvs-binary"],"cascii":["chemical/x-cactvs-binary"],"ctab":["chemical/x-cactvs-binary"],"c3d":["chemical/x-chem3d"],"cpa":["chemical/x-compass"],"bsd":["chemical/x-crossfire"],"csm":["chemical/x-csml"],"ctx":["chemical/x-ctx"],"cxf":["chemical/x-cxf"],"cef":["chemical/x-cxf"],"emb":["chemical/x-embl-dl-nucleotide"],"embl":["chemical/x-embl-dl-nucleotide"],"inp":["chemical/x-gamess-input"],"gamin":["chemical/x-gamess-input"],"fch":["chemical/x-gaussian-checkpoint"],"fchk":["chemical/x-gaussian-checkpoint"],"cub":["chemical/x-gaussian-cube"],"gau":["chemical/x-gaussian-input"],"gjc":["chemical/x-gaussian-input"],"gjf":["chemical/x-gaussian-input"],"gal":["chemical/x-gaussian-log"],"gcg":["chemical/x-gcg8-sequence"],"gen":["chemical/x-genbank"],"hin":["chemical/x-hin"],"istr":["chemical/x-isostar"],"ist":["chemical/x-isostar"],"jdx":["chemical/x-jcamp-dx"],"dx":["chemical/x-jcamp-dx"],"kin":["chemical/x-kinemage"],"mcm":["chemical/x-macmolecule"],"mmod":["chemical/x-macromodel-input"],"mol":["chemical/x-mdl-molfile"],"rd":["chemical/x-mdl-rdfile"],"rxn":["chemical/x-mdl-rxnfile"],"sd":["chemical/x-mdl-sdfile"],"tgf":["chemical/x-mdl-tgf"],"mcif":["chemical/x-mmcif"],"b":["chemical/x-molconn-z"],"gpt":["chemical/x-mopac-graph"],"mop":["chemical/x-mopac-input"],"mopcrt":["chemical/x-mopac-input"],"zmt":["chemical/x-mopac-input"],"moo":["chemical/x-mopac-out"],"asn":["chemical/x-ncbi-asn1","chemical/x-ncbi-asn1-spec"],"prt":["chemical/x-ncbi-asn1-ascii"],"val":["chemical/x-ncbi-asn1-binary"],"ros":["chemical/x-rosdal"],"sw":["chemical/x-swissprot"],"vms":["chemical/x-vamas-iso14976"],"vmd":["chemical/x-vmd"],"xtel":["chemical/x-xtel"],"exr":["image/aces"],"apng":["image/apng"],"avci":["image/avci"],"avcs":["image/avcs"],"avif":["image/avif"],"hif":["image/avif"],"drle":["image/dicom-rle"],"dpx":["image/dpx"],"fits":["image/fits"],"fit":["image/fits"],"fts":["image/fits"],"heic":["image/heic"],"heics":["image/heic-sequence"],"heif":["image/heif"],"heifs":["image/heif-sequence"],"hej2":["image/hej2k"],"hsj2":["image/hsj2"],"jls":["image/jls"],"jp2":["image/jp2"],"jpg2":["image/jp2"],"jfif":["image/jpeg"],"jph":["image/jph"],"jhc":["image/jphc"],"jphc":["image/jphc"],"jpx":["image/jpx"],"jpf":["image/jpx"],"jxl":["image/jxl"],"jxr":["image/jxr"],"jxra":["image/jxra"],"jxrs":["image/jxrs"],"jxs":["image/jxs"],"jxsc":["image/jxsc"],"jxsi":["image/jxsi"],"jxss":["image/jxss"],"ktx2":["image/ktx2"],"btf":["image/prs.btif"],"pti":["image/prs.pti"],"tfx":["image/tiff-fx"],"azv":["image/vnd.airzip.accelerator.azv"],"pgb":["image/vnd.globalgraphics.pgb","image/vnd.globalgraphics.pgb"],"b16":["image/vnd.pco.b16"],"hdr":["image/vnd.radiance"],"rgbe":["image/vnd.radiance"],"xyze":["image/vnd.radiance"],"spng":["image/vnd.sealed.png"],"spn":["image/vnd.sealed.png"],"s1n":["image/vnd.sealed.png"],"sgif":["image/vnd.sealedmedia.softseal.gif"],"s1g":["image/vnd.sealedmedia.softseal.gif"],"sjpg":["image/vnd.sealedmedia.softseal.jpg"],"sjp":["image/vnd.sealedmedia.softseal.jpg"],"s1j":["image/vnd.sealedmedia.softseal.jpg"],"tap":["image/vnd.tencent.tap"],"vtf":["image/vnd.valve.source.texture"],"cr2":["image/x-canon-cr2"],"crw":["image/x-canon-crw"],"cdr":["image/x-coreldraw"],"pat":["image/x-coreldrawpattern"],"cdt":["image/x-coreldrawtemplate"],"erf":["image/x-epson-erf"],"art":["image/x-jg","message/rfc822"],"jng":["image/x-jng"],"nef":["image/x-nikon-nef"],"orf":["image/x-olympus-orf"],"xcf":["image/x-xcf"],"u8msg":["message/global"],"u8dsn":["message/global-delivery-status"],"u8mdn":["message/global-disposition-notification"],"u8hdr":["message/global-headers"],"mail":["message/rfc822"],"gltf":["model/gltf+json"],"glb":["model/gltf-binary"],"jt":["model/jt"],"mtl":["model/mtl"],"stp":["model/step"],"step":["model/step"],"stpx":["model/step+xml"],"stpz":["model/step+zip"],"stpxz":["model/step-xml+zip"],"u3d":["model/u3d"],"cld":["model/vnd.cld"],"win":["model/vnd.gdl"],"dor":["model/vnd.gdl"],"lmp":["model/vnd.gdl"],"rsm":["model/vnd.gdl"],"msm":["application/octet-stream","model/vnd.gdl"],"ism":["model/vnd.gdl"],"moml":["model/vnd.moml+xml"],"ogex":["model/vnd.opengex"],"x_b":["model/vnd.parasolid.transmit.binary"],"xmt_bin":["model/vnd.parasolid.transmit.binary"],"x_t":["model/vnd.parasolid.transmit.text"],"xmt_txt":["model/vnd.parasolid.transmit.text"],"pyox":["model/vnd.pytha.pyox"],"vds":["model/vnd.sap.vds"],"usda":["model/vnd.usda"],"usdz":["model/vnd.usdz+zip"],"bsp":["model/vnd.valve.source.compiled-map"],"vrm":["model/vrml"],"bmed":["multipart/vnd.bint.med-plus"],"vpm":["multipart/voice-message"],"manifest":["text/cache-manifest"],"cql":["text/cql"],"csvs":["text/csv-schema"],"soa":["text/dns"],"zone":["text/dns"],"gff3":["text/gff3"],"shtml":["text/html"],"es":["text/javascript"],"cnd":["text/jcr-cnd"],"md":["text/markdown"],"markdown":["text/markdown"],"miz":["text/mizar"],"brf":["text/plain"],"provn":["text/provenance-notation"],"rst":["text/prs.fallenstein.rst"],"tag":["text/prs.lines.tag"],"shaclc":["text/shaclc"],"shc":["text/shaclc"],"shex":["text/shex"],"spdx":["text/spdx"],"tm":["text/texmacs"],"a":["text/vnd.a"],"abc":["text/vnd.abc"],"ascii":["text/vnd.ascii-art"],"copyright":["text/vnd.debian.copyright"],"jtd":["text/vnd.esmertec.theme-descriptor"],"vfk":["text/vnd.exchangeable"],"ged":["text/vnd.familysearch.gedcom"],"flt":["text/vnd.ficlab.flt"],"hans":["text/vnd.hans"],"hgl":["text/vnd.hgl"],"3dm":["text/vnd.in3d.3dml"],"spo":["text/vnd.in3d.spot"],"mpf":["text/vnd.ms-mediapackage"],"ccc":["text/vnd.net2phone.commcenter.command"],"mc2":["text/vnd.senx.warpscript"],"sos":["text/vnd.sosi"],"ts":["text/vnd.trolltech.linguist","video/mp2t"],"si":["text/vnd.wap.si"],"sl":["text/vnd.wap.sl"],"vtt":["text/vtt"],"wgsl":["text/wgsl"],"bib":["text/x-bibtex"],"boo":["text/x-boo"],"h++":["text/x-c++hdr"],"hpp":["text/x-c++hdr"],"hxx":["text/x-c++hdr"],"c++":["text/x-c++src"],"htc":["text/x-component"],"diff":["text/x-diff"],"patch":["text/x-diff"],"d":["text/x-dsrc"],"hs":["text/x-haskell"],"ly":["text/x-lilypond"],"lhs":["text/x-literate-haskell"],"moc":["text/x-moc"],"gcd":["text/x-pcs-gcd"],"pl":["application/x-perl","text/x-perl"],"pm":["application/x-perl","text/x-perl"],"py":["text/x-python"],"scala":["text/x-scala"],"tk":["application/x-tcl","text/x-tcl"],"ltx":["text/x-tex"],"sty":["text/x-tex"],"cls":["text/x-tex"],"axv":["video/annodex"],"dif":["video/dv"],"dv":["video/dv"],"gl":["video/gl"],"m4s":["video/iso.segment"],"nim":["video/vnd.nokia.interleaved-multimedia"],"bik":["video/vnd.radgamettools.bink"],"bk2":["video/vnd.radgamettools.bink"],"smk":["video/vnd.radgamettools.smacker"],"smpg":["video/vnd.sealed.mpeg1"],"s11":["video/vnd.sealed.mpeg1"],"s14":["video/vnd.sealed.mpeg4"],"sswf":["video/vnd.sealed.swf"],"ssw":["video/vnd.sealed.swf"],"smov":["video/vnd.sealedmedia.softseal.mov"],"smo":["video/vnd.sealedmedia.softseal.mov"],"s1q":["video/vnd.sealedmedia.softseal.mov"],"yt":["video/vnd.youtube.yt"],"lsf":["video/x-la-asf"],"lsx":["video/x-la-asf"],"mpv":["video/x-matroska"],"war":["application/java-archive"],"ear":["application/java-archive"],"cco":["application/x-cocoa"],"jardiff":["application/x-java-archive-diff"],"run":["application/x-makeself"],"sea":["application/x-sea"],"img":["application/octet-stream"],"3gpp":["video/3gpp"]},"versions":{"apache":"\"96a37ba1632e641c249ff7aaf0edc9ea998e6245bb03ed0836776835b20e416f\"","debian":"\"a92781663cb1283ce779993f9a9745db\"","nginx":"\"93c6df1b623b8401a2fe94f4904f3a1aef9d370f06586596ed17df4901d2eaab\""}} \ No newline at end of file +{"mediaTypes":{"123":["application/vnd.lotus-1-2-3"],"210":["application/p21"],"726":["audio/32kadpcm"],"ez":["application/andrew-inset"],"aw":["application/applixware"],"atom":["application/atom+xml"],"atomcat":["application/atomcat+xml"],"atomsvc":["application/atomsvc+xml"],"ccxml":["application/ccxml+xml"],"cdmia":["application/cdmi-capability"],"cdmic":["application/cdmi-container"],"cdmid":["application/cdmi-domain"],"cdmio":["application/cdmi-object"],"cdmiq":["application/cdmi-queue"],"cu":["application/cu-seeme"],"davmount":["application/davmount+xml"],"dbk":["application/docbook+xml"],"dssc":["application/dssc+der"],"xdssc":["application/dssc+xml"],"ecma":["application/ecmascript"],"emma":["application/emma+xml"],"epub":["application/epub+zip"],"exi":["application/exi"],"pfr":["application/font-tdpfr"],"gml":["application/gml+xml"],"gpx":["application/gpx+xml"],"gxf":["application/gxf"],"stk":["application/hyperstudio"],"ink":["application/inkml+xml"],"inkml":["application/inkml+xml"],"ipfix":["application/ipfix"],"jar":["application/java-archive"],"ser":["application/java-serialized-object"],"class":["application/java-vm"],"json":["application/json"],"jsonml":["application/jsonml+json"],"lostxml":["application/lost+xml"],"hqx":["application/mac-binhex40"],"cpt":["application/mac-compactpro","image/x-corelphotopaint"],"mads":["application/mads+xml"],"mrc":["application/marc"],"mrcx":["application/marcxml+xml"],"ma":["application/mathematica"],"nb":["application/mathematica","application/vnd.wolfram.mathematica"],"mb":["application/mathematica"],"mathml":["application/mathml+xml"],"mbox":["application/mbox"],"mscml":["application/mediaservercontrol+xml"],"metalink":["application/metalink+xml"],"meta4":["application/metalink4+xml"],"mets":["application/mets+xml"],"mods":["application/mods+xml"],"m21":["application/mp21"],"mp21":["application/mp21"],"mp4s":["application/mp4"],"doc":["application/msword"],"dot":["application/msword","text/vnd.graphviz"],"mxf":["application/mxf"],"bin":["application/octet-stream"],"dms":["application/octet-stream","text/vnd.dmclientscript"],"lrf":["application/octet-stream"],"mar":["application/octet-stream"],"so":["application/octet-stream"],"dist":["application/octet-stream","application/vnd.apple.installer+xml"],"distz":["application/octet-stream","application/vnd.apple.installer+xml"],"pkg":["application/octet-stream","application/vnd.apple.installer+xml"],"bpk":["application/octet-stream"],"dump":["application/octet-stream"],"elc":["application/octet-stream"],"deploy":["application/octet-stream"],"oda":["application/oda"],"opf":["application/oebps-package+xml"],"ogx":["application/ogg"],"omdoc":["application/omdoc+xml"],"onetoc":["application/onenote"],"onetoc2":["application/onenote"],"onetmp":["application/onenote"],"onepkg":["application/onenote"],"oxps":["application/oxps"],"xer":["application/patch-ops-error+xml","application/xcap-error+xml"],"pdf":["application/pdf"],"pgp":["application/pgp-encrypted"],"asc":["application/pgp-keys","application/pgp-signature"],"sig":["application/pgp-signature"],"prf":["application/pics-rules"],"p10":["application/pkcs10"],"p7m":["application/pkcs7-mime"],"p7c":["application/pkcs7-mime"],"p7s":["application/pkcs7-signature"],"p8":["application/pkcs8"],"ac":["application/pkix-attr-cert"],"cer":["application/pkix-cert"],"crl":["application/pkix-crl"],"pkipath":["application/pkix-pkipath"],"pki":["application/pkixcmp"],"pls":["application/pls+xml","audio/x-scpls"],"ai":["application/postscript"],"eps":["application/postscript"],"ps":["application/postscript"],"cww":["application/prs.cww"],"pskcxml":["application/pskc+xml"],"rdf":["application/rdf+xml"],"rif":["application/reginfo+xml"],"rnc":["application/relax-ng-compact-syntax"],"rl":["application/resource-lists+xml"],"rld":["application/resource-lists-diff+xml"],"rs":["application/rls-services+xml"],"gbr":["application/rpki-ghostbusters"],"mft":["application/rpki-manifest"],"roa":["application/rpki-roa"],"rsd":["application/rsd+xml"],"rss":["application/rss+xml","application/x-rss+xml"],"rtf":["application/rtf"],"sbml":["application/sbml+xml"],"scq":["application/scvp-cv-request"],"scs":["application/scvp-cv-response"],"spq":["application/scvp-vp-request"],"spp":["application/scvp-vp-response"],"sdp":["application/sdp"],"setpay":["application/set-payment-initiation"],"setreg":["application/set-registration-initiation"],"shf":["application/shf+xml"],"smi":["application/smil+xml"],"smil":["application/smil+xml"],"rq":["application/sparql-query"],"srx":["application/sparql-results+xml"],"gram":["application/srgs"],"grxml":["application/srgs+xml"],"sru":["application/sru+xml"],"ssdl":["application/ssdl+xml"],"ssml":["application/ssml+xml"],"tei":["application/tei+xml"],"teicorpus":["application/tei+xml"],"tfi":["application/thraud+xml"],"tsd":["application/timestamped-data"],"plb":["application/vnd.3gpp.pic-bw-large"],"psb":["application/vnd.3gpp.pic-bw-small"],"pvb":["application/vnd.3gpp.pic-bw-var"],"tcap":["application/vnd.3gpp2.tcap"],"pwn":["application/vnd.3m.post-it-notes"],"aso":["application/vnd.accpac.simply.aso","chemical/x-ncbi-asn1-binary"],"imp":["application/vnd.accpac.simply.imp"],"acu":["application/vnd.acucobol"],"atc":["application/vnd.acucorp"],"acutc":["application/vnd.acucorp"],"air":["application/vnd.adobe.air-application-installer-package+zip"],"fcdt":["application/vnd.adobe.formscentral.fcdt"],"fxp":["application/vnd.adobe.fxp"],"fxpl":["application/vnd.adobe.fxp"],"xdp":["application/vnd.adobe.xdp+xml"],"xfdf":["application/vnd.adobe.xfdf","application/xfdf"],"ahead":["application/vnd.ahead.space"],"azf":["application/vnd.airzip.filesecure.azf"],"azs":["application/vnd.airzip.filesecure.azs"],"azw":["application/vnd.amazon.ebook"],"acc":["application/vnd.americandynamics.acc"],"ami":["application/vnd.amiga.ami"],"apk":["application/vnd.android.package-archive"],"cii":["application/vnd.anser-web-certificate-issue-initiation"],"fti":["application/vnd.anser-web-funds-transfer-initiation"],"atx":["application/vnd.antix.game-component","audio/atrac-x"],"mpkg":["application/vnd.apple.installer+xml"],"m3u8":["application/vnd.apple.mpegurl"],"swi":["application/vnd.aristanetworks.swi"],"iota":["application/vnd.astraea-software.iota"],"aep":["application/vnd.audiograph"],"mpm":["application/vnd.blueice.multipass"],"bmi":["application/vnd.bmi"],"rep":["application/vnd.businessobjects"],"cdxml":["application/vnd.chemdraw+xml"],"mmd":["application/vnd.chipnuts.karaoke-mmd"],"cdy":["application/vnd.cinderella"],"cla":["application/vnd.claymore"],"rp9":["application/vnd.cloanto.rp9"],"c4g":["application/vnd.clonk.c4group"],"c4d":["application/vnd.clonk.c4group"],"c4f":["application/vnd.clonk.c4group"],"c4p":["application/vnd.clonk.c4group"],"c4u":["application/vnd.clonk.c4group"],"c11amc":["application/vnd.cluetrust.cartomobile-config"],"c11amz":["application/vnd.cluetrust.cartomobile-config-pkg"],"csp":["application/vnd.commonspace"],"cdbcmsg":["application/vnd.contact.cmsg"],"cmc":["application/vnd.cosmocaller"],"clkx":["application/vnd.crick.clicker"],"clkk":["application/vnd.crick.clicker.keyboard"],"clkp":["application/vnd.crick.clicker.palette"],"clkt":["application/vnd.crick.clicker.template"],"clkw":["application/vnd.crick.clicker.wordbank"],"wbs":["application/vnd.criticaltools.wbs+xml"],"pml":["application/vnd.ctc-posml"],"ppd":["application/vnd.cups-ppd"],"car":["application/vnd.curl.car","application/vnd.ipld.car"],"pcurl":["application/vnd.curl.pcurl"],"dart":["application/vnd.dart"],"rdz":["application/vnd.data-vision.rdz"],"uvf":["application/vnd.dece.data"],"uvvf":["application/vnd.dece.data"],"uvd":["application/vnd.dece.data"],"uvvd":["application/vnd.dece.data"],"uvt":["application/vnd.dece.ttml+xml"],"uvvt":["application/vnd.dece.ttml+xml"],"uvx":["application/vnd.dece.unspecified"],"uvvx":["application/vnd.dece.unspecified"],"uvz":["application/vnd.dece.zip"],"uvvz":["application/vnd.dece.zip"],"fe_launch":["application/vnd.denovo.fcselayout-link"],"dna":["application/vnd.dna"],"mlp":["application/vnd.dolby.mlp","audio/vnd.dolby.mlp"],"dpg":["application/vnd.dpgraph"],"dfac":["application/vnd.dreamfactory"],"kpxx":["application/vnd.ds-keypoint"],"ait":["application/vnd.dvb.ait"],"svc":["application/vnd.dvb.service"],"geo":["application/vnd.dynageo"],"mag":["application/vnd.ecowin.chart"],"nml":["application/vnd.enliven"],"esf":["application/vnd.epson.esf"],"msf":["application/vnd.epson.msf"],"qam":["application/vnd.epson.quickanime"],"slt":["application/vnd.epson.salt"],"ssf":["application/vnd.epson.ssf"],"es3":["application/vnd.eszigno3+xml"],"et3":["application/vnd.eszigno3+xml"],"ez2":["application/vnd.ezpix-album"],"ez3":["application/vnd.ezpix-package"],"fdf":["application/fdf","application/vnd.fdf"],"mseed":["application/vnd.fdsn.mseed"],"seed":["application/vnd.fdsn.seed"],"dataless":["application/vnd.fdsn.seed"],"gph":["application/vnd.flographit"],"ftc":["application/vnd.fluxtime.clip"],"fm":["application/vnd.framemaker","application/x-maker"],"frame":["application/vnd.framemaker","application/x-maker"],"maker":["application/vnd.framemaker","application/x-maker"],"book":["application/vnd.framemaker","application/x-maker"],"fnc":["application/vnd.frogans.fnc"],"ltf":["application/vnd.frogans.ltf"],"fsc":["application/vnd.fsc.weblaunch"],"oas":["application/vnd.fujitsu.oasys"],"oa2":["application/vnd.fujitsu.oasys2"],"oa3":["application/vnd.fujitsu.oasys3"],"fg5":["application/vnd.fujitsu.oasysgp"],"bh2":["application/vnd.fujitsu.oasysprs"],"ddd":["application/vnd.fujixerox.ddd"],"xdw":["application/vnd.fujixerox.docuworks"],"xbd":["application/vnd.fujixerox.docuworks.binder"],"fzs":["application/vnd.fuzzysheet"],"txd":["application/vnd.genomatix.tuxedo"],"ggb":["application/vnd.geogebra.file"],"ggt":["application/vnd.geogebra.tool"],"gex":["application/vnd.geometry-explorer"],"gre":["application/vnd.geometry-explorer"],"gxt":["application/vnd.geonext"],"g2w":["application/vnd.geoplan"],"g3w":["application/vnd.geospace"],"gmx":["application/vnd.gmx"],"kml":["application/vnd.google-earth.kml+xml"],"kmz":["application/vnd.google-earth.kmz"],"gqf":["application/vnd.grafeq"],"gqs":["application/vnd.grafeq"],"gac":["application/vnd.groove-account"],"ghf":["application/vnd.groove-help"],"gim":["application/vnd.groove-identity-message"],"grv":["application/vnd.groove-injector"],"gtm":["application/vnd.groove-tool-message"],"tpl":["application/vnd.groove-tool-template"],"vcg":["application/vnd.groove-vcard"],"hal":["application/vnd.hal+xml"],"zmm":["application/vnd.handheld-entertainment+xml"],"hbci":["application/vnd.hbci"],"les":["application/vnd.hhe.lesson-player"],"hpgl":["application/vnd.hp-hpgl"],"hpid":["application/vnd.hp-hpid"],"hps":["application/vnd.hp-hps"],"jlt":["application/vnd.hp-jlyt"],"pcl":["application/vnd.hp-pcl"],"pclxl":["application/vnd.hp-pclxl"],"sfd-hdstx":["application/vnd.hydrostatix.sof-data"],"mpy":["application/vnd.ibm.minipay"],"afp":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"listafp":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"list3820":["application/vnd.afpc.modca","application/vnd.ibm.modcap"],"irm":["application/vnd.ibm.rights-management"],"sc":["application/vnd.ibm.secure-container"],"icc":["application/vnd.iccprofile"],"icm":["application/vnd.iccprofile"],"igl":["application/vnd.igloader"],"ivp":["application/vnd.immervision-ivp"],"ivu":["application/vnd.immervision-ivu"],"igm":["application/vnd.insors.igm"],"xpw":["application/vnd.intercon.formnet"],"xpx":["application/vnd.intercon.formnet"],"i2g":["application/vnd.intergeo"],"qbo":["application/vnd.intu.qbo"],"qfx":["application/vnd.intu.qfx"],"rcprofile":["application/vnd.ipunplugged.rcprofile"],"irp":["application/vnd.irepository.package+xml"],"xpr":["application/vnd.is-xpr"],"fcs":["application/vnd.isac.fcs"],"jam":["application/vnd.jam"],"rms":["application/vnd.jcp.javame.midlet-rms"],"jisp":["application/vnd.jisp"],"joda":["application/vnd.joost.joda-archive"],"ktz":["application/vnd.kahootz"],"ktr":["application/vnd.kahootz"],"karbon":["application/vnd.kde.karbon"],"chrt":["application/vnd.kde.kchart"],"kfo":["application/vnd.kde.kformula"],"flw":["application/vnd.kde.kivio"],"kon":["application/vnd.kde.kontour"],"kpr":["application/vnd.kde.kpresenter"],"kpt":["application/vnd.kde.kpresenter"],"ksp":["application/vnd.kde.kspread"],"kwd":["application/vnd.kde.kword"],"kwt":["application/vnd.kde.kword"],"htke":["application/vnd.kenameaapp"],"kia":["application/vnd.kidspiration"],"kne":["application/vnd.kinar"],"knp":["application/vnd.kinar"],"skp":["application/vnd.koan"],"skd":["application/vnd.koan"],"skt":["application/vnd.koan"],"skm":["application/vnd.koan"],"sse":["application/vnd.kodak-descriptor"],"lasxml":["application/vnd.las.las+xml"],"lbd":["application/vnd.llamagraphics.life-balance.desktop"],"lbe":["application/vnd.llamagraphics.life-balance.exchange+xml"],"apr":["application/vnd.lotus-approach"],"pre":["application/vnd.lotus-freelance"],"nsf":["application/vnd.lotus-notes"],"org":["application/vnd.lotus-organizer"],"scm":["application/vnd.lotus-screencam"],"lwp":["application/vnd.lotus-wordpro"],"portpkg":["application/vnd.macports.portpkg"],"mcd":["application/vnd.mcd"],"mc1":["application/vnd.medcalcdata"],"cdkey":["application/vnd.mediastation.cdkey"],"mwf":["application/vnd.mfer"],"mfm":["application/vnd.mfmp"],"flo":["application/vnd.micrografx.flo"],"igx":["application/vnd.micrografx.igx"],"mif":["application/vnd.mif"],"daf":["application/vnd.mobius.daf"],"dis":["application/vnd.mobius.dis"],"mbk":["application/vnd.mobius.mbk"],"mqy":["application/vnd.mobius.mqy"],"msl":["application/vnd.mobius.msl"],"plc":["application/vnd.mobius.plc"],"txf":["application/vnd.mobius.txf"],"mpn":["application/vnd.mophun.application"],"mpc":["application/vnd.mophun.certificate","chemical/x-mopac-input"],"xul":["application/vnd.mozilla.xul+xml"],"cil":["application/vnd.ms-artgalry"],"cab":["application/vnd.ms-cab-compressed"],"xls":["application/vnd.ms-excel"],"xlm":["application/vnd.ms-excel"],"xla":["application/vnd.ms-excel"],"xlc":["application/vnd.ms-excel"],"xlt":["application/vnd.ms-excel"],"xlw":["application/vnd.ms-excel"],"xlam":["application/vnd.ms-excel.addin.macroenabled.12"],"xlsb":["application/vnd.ms-excel.sheet.binary.macroenabled.12"],"xlsm":["application/vnd.ms-excel.sheet.macroenabled.12"],"xltm":["application/vnd.ms-excel.template.macroenabled.12"],"eot":["application/vnd.ms-fontobject"],"chm":["application/vnd.ms-htmlhelp","chemical/x-chemdraw"],"ims":["application/vnd.ms-ims"],"lrm":["application/vnd.ms-lrm"],"thmx":["application/vnd.ms-officetheme"],"cat":["application/vnd.ms-pki.seccat"],"stl":["application/vnd.ms-pki.stl","model/stl"],"ppt":["application/vnd.ms-powerpoint"],"pps":["application/vnd.ms-powerpoint"],"pot":["application/vnd.ms-powerpoint","text/plain"],"ppam":["application/vnd.ms-powerpoint.addin.macroenabled.12"],"pptm":["application/vnd.ms-powerpoint.presentation.macroenabled.12"],"sldm":["application/vnd.ms-powerpoint.slide.macroenabled.12"],"ppsm":["application/vnd.ms-powerpoint.slideshow.macroenabled.12"],"potm":["application/vnd.ms-powerpoint.template.macroenabled.12"],"mpp":["application/vnd.ms-project"],"mpt":["application/vnd.ms-project"],"docm":["application/vnd.ms-word.document.macroenabled.12"],"dotm":["application/vnd.ms-word.template.macroenabled.12"],"wps":["application/vnd.ms-works"],"wks":["application/vnd.ms-works"],"wcm":["application/vnd.ms-works"],"wdb":["application/vnd.ms-works"],"wpl":["application/vnd.ms-wpl"],"xps":["application/vnd.ms-xpsdocument"],"mseq":["application/vnd.mseq"],"mus":["application/vnd.musician"],"msty":["application/vnd.muvee.style"],"taglet":["application/vnd.mynfc"],"nlu":["application/vnd.neurolanguage.nlu"],"ntf":["application/vnd.lotus-notes","application/vnd.nitf"],"nitf":["application/vnd.nitf"],"nnd":["application/vnd.noblenet-directory"],"nns":["application/vnd.noblenet-sealer"],"nnw":["application/vnd.noblenet-web"],"ngdat":["application/vnd.nokia.n-gage.data"],"n-gage":["application/vnd.nokia.n-gage.symbian.install"],"rpst":["application/vnd.nokia.radio-preset"],"rpss":["application/vnd.nokia.radio-presets"],"edm":["application/vnd.novadigm.edm"],"edx":["application/vnd.novadigm.edx"],"ext":["application/vnd.novadigm.ext"],"odc":["application/vnd.oasis.opendocument.chart"],"otc":["application/vnd.oasis.opendocument.chart-template"],"odb":["application/vnd.oasis.opendocument.base","application/vnd.oasis.opendocument.database"],"odf":["application/vnd.oasis.opendocument.formula"],"odft":["application/vnd.oasis.opendocument.formula-template"],"odg":["application/vnd.oasis.opendocument.graphics"],"otg":["application/vnd.oasis.opendocument.graphics-template"],"odi":["application/vnd.oasis.opendocument.image"],"oti":["application/vnd.oasis.opendocument.image-template"],"odp":["application/vnd.oasis.opendocument.presentation"],"otp":["application/vnd.oasis.opendocument.presentation-template"],"ods":["application/vnd.oasis.opendocument.spreadsheet"],"ots":["application/vnd.oasis.opendocument.spreadsheet-template"],"odt":["application/vnd.oasis.opendocument.text"],"odm":["application/vnd.oasis.opendocument.text-master"],"ott":["application/vnd.oasis.opendocument.text-template"],"oth":["application/vnd.oasis.opendocument.text-web"],"xo":["application/vnd.olpc-sugar"],"dd2":["application/vnd.oma.dd2+xml"],"oxt":["application/vnd.openofficeorg.extension"],"pptx":["application/vnd.openxmlformats-officedocument.presentationml.presentation"],"sldx":["application/vnd.openxmlformats-officedocument.presentationml.slide"],"ppsx":["application/vnd.openxmlformats-officedocument.presentationml.slideshow"],"potx":["application/vnd.openxmlformats-officedocument.presentationml.template"],"xlsx":["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],"xltx":["application/vnd.openxmlformats-officedocument.spreadsheetml.template"],"docx":["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],"dotx":["application/vnd.openxmlformats-officedocument.wordprocessingml.template"],"mgp":["application/vnd.osgeo.mapguide.package"],"dp":["application/vnd.osgi.dp"],"esa":["application/vnd.osgi.subsystem"],"pdb":["application/vnd.palm","application/x-pilot","chemical/x-pdb"],"pqa":["application/vnd.palm"],"oprc":["application/vnd.palm"],"paw":["application/vnd.pawaafile"],"str":["application/vnd.pg.format"],"ei6":["application/vnd.pg.osasli"],"efif":["application/vnd.picsel"],"wg":["application/vnd.pmi.widget"],"plf":["application/vnd.pocketlearn"],"pbd":["application/vnd.powerbuilder6"],"box":["application/vnd.previewsystems.box"],"mgz":["application/vnd.proteus.magazine"],"qps":["application/vnd.publishare-delta-tree"],"ptid":["application/vnd.pvi.ptid1"],"qxd":["application/vnd.quark.quarkxpress"],"qxt":["application/vnd.quark.quarkxpress"],"qwd":["application/vnd.quark.quarkxpress"],"qwt":["application/vnd.quark.quarkxpress"],"qxl":["application/vnd.quark.quarkxpress"],"qxb":["application/vnd.quark.quarkxpress"],"bed":["application/vnd.realvnc.bed"],"mxl":["application/vnd.recordare.musicxml"],"musicxml":["application/vnd.recordare.musicxml+xml"],"cryptonote":["application/vnd.rig.cryptonote"],"cod":["application/vnd.rim.cod"],"rm":["application/vnd.rn-realmedia","audio/x-pn-realaudio"],"rmvb":["application/vnd.rn-realmedia-vbr"],"link66":["application/vnd.route66.link66+xml"],"st":["application/vnd.sailingtracker.track"],"see":["application/vnd.seemail"],"sema":["application/vnd.sema"],"semd":["application/vnd.semd"],"semf":["application/vnd.semf"],"ifm":["application/vnd.shana.informed.formdata"],"itp":["application/vnd.shana.informed.formtemplate"],"iif":["application/vnd.shana.informed.interchange"],"ipk":["application/vnd.shana.informed.package"],"twd":["application/vnd.simtech-mindmapper"],"twds":["application/vnd.simtech-mindmapper"],"mmf":["application/vnd.smaf"],"teacher":["application/vnd.smart.teacher"],"sdkm":["application/vnd.solent.sdkm+xml"],"sdkd":["application/vnd.solent.sdkm+xml"],"dxp":["application/vnd.spotfire.dxp"],"sfs":["application/vnd.spotfire.sfs"],"sdc":["application/vnd.stardivision.calc"],"sda":["application/vnd.stardivision.draw"],"sdd":["application/vnd.stardivision.impress"],"smf":["application/vnd.stardivision.math"],"sdw":["application/vnd.stardivision.writer"],"vor":["application/vnd.stardivision.writer"],"sgl":["application/vnd.stardivision.writer-global"],"smzip":["application/vnd.stepmania.package"],"sm":["application/vnd.stepmania.stepchart"],"sxc":["application/vnd.sun.xml.calc"],"stc":["application/vnd.sun.xml.calc.template"],"sxd":["application/vnd.sun.xml.draw"],"std":["application/vnd.sun.xml.draw.template"],"sxi":["application/vnd.sun.xml.impress"],"sti":["application/vnd.sun.xml.impress.template"],"sxm":["application/vnd.sun.xml.math"],"sxw":["application/vnd.sun.xml.writer"],"sxg":["application/vnd.sun.xml.writer.global"],"stw":["application/vnd.sun.xml.writer.template"],"sus":["application/vnd.sus-calendar"],"susp":["application/vnd.sus-calendar"],"svd":["application/vnd.svd"],"sis":["application/vnd.symbian.install"],"sisx":["application/vnd.symbian.install"],"xsm":["application/vnd.syncml+xml"],"bdm":["application/vnd.syncml.dm+wbxml"],"xdm":["application/vnd.syncml.dm+xml"],"tao":["application/vnd.tao.intent-module-archive"],"pcap":["application/vnd.tcpdump.pcap"],"cap":["application/vnd.tcpdump.pcap"],"dmp":["application/vnd.tcpdump.pcap"],"tmo":["application/vnd.tmobile-livetv"],"tpt":["application/vnd.trid.tpt"],"mxs":["application/vnd.triscape.mxs"],"tra":["application/vnd.trueapp"],"ufd":["application/vnd.ufdl"],"ufdl":["application/vnd.ufdl"],"utz":["application/vnd.uiq.theme"],"umj":["application/vnd.umajin"],"unityweb":["application/vnd.unity"],"uoml":["application/vnd.uoml+xml"],"vcx":["application/vnd.vcx"],"vsd":["application/vnd.visio"],"vst":["application/vnd.visio"],"vss":["application/vnd.visio"],"vsw":["application/vnd.visio"],"vis":["application/vnd.visionary"],"vsf":["application/vnd.vsf"],"wbxml":["application/vnd.wap.wbxml"],"wmlc":["application/vnd.wap.wmlc"],"wmlsc":["application/vnd.wap.wmlscriptc"],"wtb":["application/vnd.webturbo"],"nbp":["application/vnd.wolfram.player"],"wpd":["application/vnd.wordperfect"],"wqd":["application/vnd.wqd"],"stf":["application/vnd.wt.stf"],"xar":["application/vnd.xara"],"xfdl":["application/vnd.xfdl"],"hvd":["application/vnd.yamaha.hv-dic"],"hvs":["application/vnd.yamaha.hv-script"],"hvp":["application/vnd.yamaha.hv-voice"],"osf":["application/vnd.yamaha.openscoreformat"],"osfpvg":["application/vnd.yamaha.openscoreformat.osfpvg+xml"],"saf":["application/vnd.yamaha.smaf-audio"],"spf":["application/vnd.yamaha.smaf-phrase"],"cmp":["application/vnd.yellowriver-custom-menu"],"zir":["application/vnd.zul"],"zirz":["application/vnd.zul"],"zaz":["application/vnd.zzazz.deck+xml"],"vxml":["application/voicexml+xml"],"wgt":["application/widget"],"hlp":["application/winhlp"],"wsdl":["application/wsdl+xml"],"wspolicy":["application/wspolicy+xml"],"7z":["application/x-7z-compressed"],"abw":["application/x-abiword"],"ace":["application/x-ace-compressed"],"dmg":["application/octet-stream","application/x-apple-diskimage"],"aab":["application/x-authorware-bin"],"x32":["application/x-authorware-bin"],"u32":["application/x-authorware-bin"],"vox":["application/x-authorware-bin"],"aam":["application/x-authorware-map"],"aas":["application/x-authorware-seg"],"bcpio":["application/x-bcpio"],"torrent":["application/x-bittorrent"],"blb":["application/x-blorb"],"blorb":["application/x-blorb"],"bz":["application/x-bzip"],"bz2":["application/x-bzip2"],"boz":["application/x-bzip2"],"cbr":["application/vnd.comicbook-rar","application/x-cbr"],"cba":["application/x-cbr"],"cbt":["application/x-cbr"],"cbz":["application/vnd.comicbook+zip","application/x-cbr"],"cb7":["application/x-cbr"],"vcd":["application/x-cdlink"],"cfs":["application/x-cfs-compressed"],"chat":["application/x-chat"],"pgn":["application/vnd.chess-pgn","application/x-chess-pgn"],"nsc":["application/x-conference"],"cpio":["application/x-cpio"],"csh":["application/x-csh","text/x-csh"],"deb":["application/octet-stream","application/vnd.debian.binary-package","application/x-debian-package"],"udeb":["application/vnd.debian.binary-package","application/x-debian-package"],"dgc":["application/x-dgc-compressed"],"dir":["application/x-director"],"dcr":["application/x-director"],"dxr":["application/x-director"],"cst":["application/vnd.commonspace","application/x-director"],"cct":["application/x-director"],"cxt":["application/x-director"],"w3d":["application/x-director"],"fgd":["application/x-director"],"swa":["application/x-director"],"wad":["application/x-doom"],"ncx":["application/x-dtbncx+xml"],"dtb":["application/x-dtbook+xml"],"res":["application/x-dtbresource+xml"],"dvi":["application/x-dvi"],"evy":["application/x-envoy"],"eva":["application/x-eva"],"bdf":["application/x-font-bdf"],"gsf":["application/x-font","application/x-font-ghostscript"],"psf":["application/x-font-linux-psf"],"pcf":["application/x-font-pcf"],"snf":["application/x-font-snf"],"pfa":["application/x-font","application/x-font-type1"],"pfb":["application/x-font","application/x-font-type1"],"pfm":["application/x-font-type1"],"afm":["application/x-font-type1"],"arc":["application/x-freearc"],"spl":["application/futuresplash","application/x-futuresplash"],"gca":["application/x-gca-compressed"],"ulx":["application/x-glulx"],"gnumeric":["application/x-gnumeric"],"gramps":["application/x-gramps-xml"],"gtar":["application/x-gtar"],"hdf":["application/x-hdf"],"install":["application/x-install-instructions"],"iso":["application/octet-stream","application/x-iso9660-image"],"jnlp":["application/x-java-jnlp-file"],"latex":["application/x-latex"],"lzh":["application/x-lzh","application/x-lzh-compressed"],"lha":["application/x-lha","application/x-lzh-compressed"],"mie":["application/x-mie"],"prc":["application/x-mobipocket-ebook","application/x-pilot","model/prc"],"mobi":["application/x-mobipocket-ebook"],"application":["application/x-ms-application"],"lnk":["application/x-ms-shortcut"],"wmd":["application/x-ms-wmd"],"wmz":["application/x-ms-wmz","application/x-msmetafile"],"xbap":["application/x-ms-xbap"],"mdb":["application/msaccess","application/x-msaccess"],"obd":["application/x-msbinder"],"crd":["application/x-mscardfile"],"clp":["application/x-msclip"],"exe":["application/octet-stream","application/x-msdos-program","application/x-msdownload"],"dll":["application/octet-stream","application/x-msdos-program","application/x-msdownload"],"com":["application/x-msdos-program","application/x-msdownload"],"bat":["application/x-msdos-program","application/x-msdownload"],"msi":["application/octet-stream","application/x-msdownload","application/x-msi"],"mvb":["application/x-msmediaview","chemical/x-mopac-vib"],"m13":["application/x-msmediaview"],"m14":["application/x-msmediaview"],"wmf":["application/x-msmetafile","image/wmf"],"emf":["application/x-msmetafile","image/emf"],"emz":["application/x-msmetafile"],"mny":["application/x-msmoney"],"pub":["application/vnd.exstream-package","application/x-mspublisher"],"scd":["application/vnd.scribus","application/x-msschedule"],"trm":["application/x-msterminal"],"wri":["application/x-mswrite"],"nc":["application/x-netcdf"],"cdf":["application/x-cdf","application/x-netcdf"],"nzb":["application/x-nzb"],"p12":["application/pkcs12","application/x-pkcs12"],"pfx":["application/pkcs12","application/x-pkcs12"],"p7b":["application/x-pkcs7-certificates"],"spc":["application/x-pkcs7-certificates","chemical/x-galactic-spc"],"p7r":["application/x-pkcs7-certreqresp"],"rar":["application/vnd.rar","application/x-rar-compressed"],"ris":["application/x-research-info-systems"],"sh":["application/x-sh","text/x-sh"],"shar":["application/x-shar"],"swf":["application/vnd.adobe.flash.movie","application/x-shockwave-flash"],"xap":["application/x-silverlight-app"],"sql":["application/sql","application/x-sql"],"sit":["application/x-stuffit"],"sitx":["application/x-stuffit","application/x-stuffitx"],"srt":["application/x-subrip","text/plain"],"sv4cpio":["application/x-sv4cpio"],"sv4crc":["application/x-sv4crc"],"t3":["application/x-t3vm-image"],"gam":["application/x-tads","chemical/x-gamess-input"],"tar":["application/x-tar"],"tcl":["application/x-tcl","text/x-tcl"],"tex":["application/x-tex","text/x-tex"],"tfm":["application/x-tex-tfm"],"texinfo":["application/x-texinfo"],"texi":["application/x-texinfo"],"obj":["application/x-tgif","model/obj"],"ustar":["application/x-ustar"],"src":["application/x-wais-source"],"der":["application/x-x509-ca-cert"],"crt":["application/x-x509-ca-cert"],"fig":["application/x-xfig"],"xlf":["application/x-xliff+xml","application/xliff+xml"],"xpi":["application/x-xpinstall"],"xz":["application/x-xz"],"z1":["application/x-zmachine"],"z2":["application/x-zmachine"],"z3":["application/x-zmachine"],"z4":["application/x-zmachine"],"z5":["application/x-zmachine"],"z6":["application/x-zmachine"],"z7":["application/x-zmachine"],"z8":["application/x-zmachine"],"xaml":["application/xaml+xml"],"xdf":["application/xcap-diff+xml"],"xenc":["application/xenc+xml"],"xhtml":["application/xhtml+xml"],"xht":["application/xhtml+xml"],"xml":["application/xml","text/xml"],"xsl":["application/xml","application/xslt+xml"],"dtd":["application/xml-dtd"],"xop":["application/xop+xml"],"xpl":["application/xproc+xml"],"xslt":["application/xslt+xml"],"xspf":["application/xspf+xml"],"mxml":["application/xv+xml"],"xhvml":["application/xv+xml"],"xvml":["application/xv+xml"],"xvm":["application/xv+xml"],"yang":["application/yang"],"yin":["application/yin+xml"],"zip":["application/zip"],"adp":["audio/adpcm"],"au":["audio/basic"],"snd":["audio/basic"],"mid":["audio/midi","audio/sp-midi"],"midi":["audio/midi"],"kar":["audio/midi"],"rmi":["audio/midi"],"m4a":["audio/mp4","audio/x-m4a"],"mp4a":["audio/mp4"],"mpga":["audio/mpeg"],"mp2":["audio/mpeg"],"mp2a":["audio/mpeg"],"mp3":["audio/mpeg"],"m2a":["audio/mpeg"],"m3a":["audio/mpeg"],"oga":["audio/ogg"],"ogg":["audio/ogg"],"spx":["audio/ogg"],"opus":["audio/ogg"],"s3m":["audio/s3m"],"sil":["audio/silk"],"uva":["audio/vnd.dece.audio"],"uvva":["audio/vnd.dece.audio"],"eol":["audio/vnd.digital-winds"],"dra":["audio/vnd.dra"],"dts":["audio/vnd.dts"],"dtshd":["audio/vnd.dts.hd"],"lvp":["audio/vnd.lucent.voice"],"pya":["audio/vnd.ms-playready.media.pya"],"ecelp4800":["audio/vnd.nuera.ecelp4800"],"ecelp7470":["audio/vnd.nuera.ecelp7470"],"ecelp9600":["audio/vnd.nuera.ecelp9600"],"rip":["audio/vnd.rip"],"weba":["audio/webm"],"aac":["audio/aac","audio/x-aac"],"aif":["audio/x-aiff"],"aiff":["audio/x-aiff"],"aifc":["audio/x-aiff"],"caf":["audio/x-caf"],"flac":["audio/flac","audio/x-flac"],"mka":["audio/x-matroska"],"m3u":["audio/mpegurl","audio/x-mpegurl"],"wax":["audio/x-ms-wax"],"wma":["audio/x-ms-wma"],"ram":["audio/x-pn-realaudio"],"ra":["audio/x-pn-realaudio","audio/x-realaudio"],"rmp":["audio/x-pn-realaudio-plugin"],"wav":["audio/x-wav"],"xm":["audio/xm"],"cdx":["chemical/x-cdx"],"cif":["application/vnd.multiad.creator.cif","chemical/x-cif"],"cmdf":["chemical/x-cmdf"],"cml":["application/cellml+xml","chemical/x-cml"],"csml":["chemical/x-csml"],"xyz":["chemical/x-xyz"],"ttc":["font/collection"],"otf":["font/otf"],"ttf":["font/ttf"],"woff":["font/woff"],"woff2":["font/woff2"],"bmp":["image/bmp","image/x-ms-bmp"],"cgm":["image/cgm"],"g3":["image/g3fax"],"gif":["image/gif"],"ief":["image/ief"],"jpeg":["image/jpeg"],"jpg":["image/jpeg"],"jpe":["image/jpeg"],"ktx":["image/ktx"],"png":["image/png"],"btif":["image/prs.btif"],"sgi":["image/sgi","image/vnd.sealedmedia.softseal.gif"],"svg":["image/svg+xml"],"svgz":["image/svg+xml"],"tiff":["image/tiff"],"tif":["image/tiff"],"psd":["image/vnd.adobe.photoshop"],"uvi":["image/vnd.dece.graphic"],"uvvi":["image/vnd.dece.graphic"],"uvg":["image/vnd.dece.graphic"],"uvvg":["image/vnd.dece.graphic"],"djvu":["image/vnd.djvu"],"djv":["image/vnd.djvu"],"sub":["image/vnd.dvb.subtitle","text/vnd.dvb.subtitle"],"dwg":["image/vnd.dwg"],"dxf":["image/vnd.dxf"],"fbs":["image/vnd.fastbidsheet"],"fpx":["image/vnd.fpx"],"fst":["image/vnd.fst"],"mmr":["image/vnd.fujixerox.edmics-mmr"],"rlc":["image/vnd.fujixerox.edmics-rlc"],"mdi":["image/vnd.ms-modi"],"wdp":["image/vnd.ms-photo"],"npx":["image/vnd.net-fpx"],"wbmp":["image/vnd.wap.wbmp"],"xif":["image/vnd.xiff"],"webp":["image/webp"],"3ds":["image/x-3ds"],"ras":["image/x-cmu-raster"],"cmx":["image/x-cmx"],"fh":["image/x-freehand"],"fhc":["image/x-freehand"],"fh4":["image/x-freehand"],"fh5":["image/x-freehand"],"fh7":["image/x-freehand"],"ico":["image/vnd.microsoft.icon","image/x-icon"],"sid":["audio/prs.sid","image/x-mrsid-image"],"pcx":["image/vnd.zbrush.pcx","image/x-pcx"],"pic":["image/x-pict"],"pct":["image/x-pict"],"pnm":["image/x-portable-anymap"],"pbm":["image/x-portable-bitmap"],"pgm":["image/x-portable-graymap"],"ppm":["image/x-portable-pixmap"],"rgb":["image/x-rgb"],"tga":["image/x-tga"],"xbm":["image/x-xbitmap"],"xpm":["image/x-xpixmap"],"xwd":["image/x-xwindowdump"],"eml":["message/rfc822"],"mime":["message/rfc822"],"igs":["model/iges"],"iges":["model/iges"],"msh":["model/mesh"],"mesh":["model/mesh"],"silo":["model/mesh"],"dae":["model/vnd.collada+xml"],"dwf":["model/vnd.dwf"],"gdl":["model/vnd.gdl"],"gtw":["model/vnd.gtw"],"mts":["model/vnd.mts","video/mp2t"],"vtu":["model/vnd.vtu"],"wrl":["model/vrml"],"vrml":["model/vrml"],"x3db":["model/x3d+binary","model/x3d+fastinfoset"],"x3dbz":["model/x3d+binary"],"x3dv":["model/x3d+vrml","model/x3d-vrml"],"x3dvz":["model/x3d+vrml","model/x3d-vrml"],"x3d":["model/x3d+xml"],"x3dz":["model/x3d+xml"],"appcache":["text/cache-manifest"],"ics":["text/calendar"],"ifb":["text/calendar"],"css":["text/css"],"csv":["text/csv"],"html":["text/html"],"htm":["text/html"],"js":["application/javascript","text/javascript"],"mjs":["text/javascript"],"n3":["text/n3"],"txt":["text/plain"],"text":["text/plain"],"conf":["text/plain"],"def":["text/plain"],"list":["text/plain"],"log":["text/plain"],"in":["text/plain"],"dsc":["text/prs.lines.tag"],"rtx":["text/richtext"],"sgml":["text/sgml"],"sgm":["text/sgml"],"tsv":["text/tab-separated-values"],"t":["text/troff"],"tr":["text/troff"],"roff":["text/troff"],"man":["application/x-troff-man","text/troff"],"me":["application/x-troff-me","text/troff"],"ms":["application/x-troff-ms","text/troff"],"ttl":["text/turtle"],"uri":["text/uri-list"],"uris":["text/uri-list"],"urls":["text/uri-list"],"vcard":["text/vcard"],"curl":["text/vnd.curl"],"dcurl":["text/vnd.curl.dcurl"],"mcurl":["text/vnd.curl.mcurl"],"scurl":["text/vnd.curl.scurl"],"fly":["text/vnd.fly"],"flx":["text/vnd.fmi.flexstor"],"gv":["text/vnd.graphviz"],"3dml":["text/vnd.in3d.3dml"],"spot":["text/vnd.in3d.spot"],"jad":["text/vnd.sun.j2me.app-descriptor"],"wml":["text/vnd.wap.wml"],"wmls":["text/vnd.wap.wmlscript"],"s":["text/x-asm"],"asm":["text/x-asm"],"c":["text/x-c","text/x-csrc"],"cc":["text/x-c","text/x-c++src"],"cxx":["text/x-c","text/x-c++src"],"cpp":["text/x-c","text/x-c++src"],"h":["text/x-c","text/x-chdr"],"hh":["text/x-c","text/x-c++hdr"],"dic":["text/x-c"],"f":["text/x-fortran"],"for":["text/x-fortran"],"f77":["text/x-fortran"],"f90":["text/x-fortran"],"java":["text/x-java","text/x-java-source"],"nfo":["text/x-nfo"],"opml":["text/x-opml"],"p":["text/x-pascal"],"pas":["text/x-pascal"],"etx":["text/x-setext"],"sfv":["text/x-sfv"],"uu":["text/x-uuencode"],"vcs":["text/x-vcalendar"],"vcf":["text/vcard","text/x-vcard"],"3gp":["video/3gpp"],"3g2":["video/3gpp2"],"h261":["video/h261"],"h263":["video/h263"],"h264":["video/h264"],"jpgv":["video/jpeg"],"jpm":["image/jpm","video/jpm"],"jpgm":["image/jpm","video/jpm"],"mj2":["video/mj2"],"mjp2":["video/mj2"],"mp4":["video/mp4"],"mp4v":["video/mp4"],"mpg4":["video/mp4"],"mpeg":["video/mpeg"],"mpg":["video/mpeg"],"mpe":["video/mpeg"],"m1v":["video/mpeg"],"m2v":["video/mpeg"],"ogv":["video/ogg"],"qt":["video/quicktime"],"mov":["video/quicktime"],"uvh":["video/vnd.dece.hd"],"uvvh":["video/vnd.dece.hd"],"uvm":["video/vnd.dece.mobile"],"uvvm":["video/vnd.dece.mobile"],"uvp":["video/vnd.dece.pd"],"uvvp":["video/vnd.dece.pd"],"uvs":["video/vnd.dece.sd"],"uvvs":["video/vnd.dece.sd"],"uvv":["video/vnd.dece.video"],"uvvv":["video/vnd.dece.video"],"dvb":["video/vnd.dvb.file"],"fvt":["video/vnd.fvt"],"mxu":["video/vnd.mpegurl"],"m4u":["video/vnd.mpegurl"],"pyv":["video/vnd.ms-playready.media.pyv"],"uvu":["video/vnd.dece.mp4","video/vnd.uvvu.mp4"],"uvvu":["video/vnd.dece.mp4","video/vnd.uvvu.mp4"],"viv":["video/vnd.vivo"],"webm":["video/webm"],"f4v":["video/x-f4v"],"fli":["video/fli","video/x-fli"],"flv":["video/x-flv"],"m4v":["video/mp4","video/x-m4v"],"mkv":["video/x-matroska"],"mk3d":["video/x-matroska"],"mks":["video/x-matroska"],"mng":["video/x-mng"],"asf":["application/vnd.ms-asf","video/x-ms-asf"],"asx":["video/x-ms-asf"],"vob":["video/x-ms-vob"],"wm":["video/x-ms-wm"],"wmv":["video/x-ms-wmv"],"wmx":["video/x-ms-wmx"],"wvx":["video/x-ms-wvx"],"avi":["video/x-msvideo"],"movie":["video/x-sgi-movie"],"smv":["audio/smv","video/x-smv"],"ice":["x-conference/x-cooltalk"],"a2l":["application/a2l"],"aml":["application/aml"],"anx":["application/annodex"],"atf":["application/atf"],"atfx":["application/atfx"],"atomdeleted":["application/atomdeleted+xml"],"atomsrv":["application/atomserv+xml"],"dwd":["application/atsc-dwd+xml"],"held":["application/atsc-held+xml"],"rsat":["application/atsc-rsat+xml"],"atxml":["application/atxml"],"apxml":["application/auth-policy+xml"],"amlx":["application/automationml-amlx+zip"],"xdd":["application/bacnet-xdd+zip"],"lin":["application/bbolin"],"xcs":["application/calendar+xml"],"cbor":["application/cbor"],"c3ex":["application/cccex"],"ccmp":["application/ccmp+xml"],"cdfx":["application/cdfx+xml"],"cea":["application/cea"],"cellml":["application/cellml+xml"],"1clr":["application/clr"],"clue":["application/clue_info+xml"],"cmsc":["application/cms"],"cpl":["application/cpl+xml"],"csrattrs":["application/csrattrs"],"cwl":["application/cwl"],"mpd":["application/dash+xml"],"mpdd":["application/dashdelta"],"dcd":["application/dcd"],"dcm":["application/dicom"],"dii":["application/dii"],"dit":["application/dit"],"xmls":["application/dskpp+xml"],"tsp":["application/dsptype"],"dvc":["application/dvcs"],"efi":["application/efi"],"emotionml":["application/emotionml+xml"],"exp":["application/express"],"finf":["application/fastinfoset"],"fdt":["application/fdt+xml"],"geojson":["application/geo+json"],"gpkg":["application/geopackage+sqlite3"],"glbin":["application/gltf-buffer"],"glbuf":["application/gltf-buffer"],"gz":["application/gzip"],"hta":["application/hta"],"its":["application/its+xml"],"jrd":["application/jrd+json"],"json-patch":["application/json-patch+json"],"jsonld":["application/ld+json"],"lgr":["application/lgr+xml"],"wlnk":["application/link-format"],"lostsyncxml":["application/lostsync+xml"],"lpf":["application/lpf+zip"],"lxf":["application/lxf"],"m3g":["application/m3g"],"webmanifest":["application/manifest+json"],"mml":["application/mathml+xml","text/mathml"],"mf4":["application/mf4"],"maei":["application/mmt-aei+xml"],"musd":["application/mmt-usd+xml"],"nq":["application/n-quads"],"nt":["application/n-triples"],"orq":["application/ocsp-request"],"ors":["application/ocsp-response"],"msu":["application/octet-stream"],"msp":["application/octet-stream"],"odx":["application/odx"],"one":["application/onenote"],"p21":["application/p21"],"stpnc":["application/p21"],"ifc":["application/p21"],"relo":["application/p2p-overlay+xml"],"pdx":["application/pdx"],"pem":["application/pem-certificate-chain","application/x-x509-ca-cert"],"key":["application/pgp-keys"],"p7z":["application/pkcs7-mime"],"p8e":["application/pkcs8-encrypted"],"epsi":["application/postscript"],"epsf":["application/postscript"],"eps2":["application/postscript"],"eps3":["application/postscript"],"provx":["application/provenance+xml"],"cw":["application/prs.cww"],"hpub":["application/prs.hpub+zip"],"rnd":["application/prs.nprend"],"rct":["application/prs.nprend"],"rdf-crypt":["application/prs.rdf-xml-crypt"],"xsf":["application/prs.xsf+xml"],"rfcxml":["application/rfc+xml"],"rapd":["application/route-apd+xml"],"sls":["application/route-s-tsid+xml"],"rusd":["application/route-usd+xml"],"sarif":["application/sarif+json"],"sarif-external-properties":["application/sarif-external-properties+json"],"scim":["application/scim+json"],"senmlc":["application/senml+cbor"],"senml":["application/senml+json"],"senmlx":["application/senml+xml"],"senml-etchc":["application/senml-etch+cbor"],"senml-etchj":["application/senml-etch+json"],"senmle":["application/senml-exi"],"sensmlc":["application/sensml+cbor"],"sensml":["application/sensml+json"],"sensmlx":["application/sensml+xml"],"sensmle":["application/sensml-exi"],"soc":["application/sgml-open-catalog"],"siv":["application/sieve"],"sieve":["application/sieve"],"cl":["application/simple-filter+xml"],"sml":["application/smil+xml"],"stix":["application/stix+json"],"coswid":["application/swid+cbor"],"swidtag":["application/swid+xml"],"tau":["application/tamp-apex-update"],"auc":["application/tamp-apex-update-confirm"],"tcu":["application/tamp-community-update"],"cuc":["application/tamp-community-update-confirm"],"ter":["application/tamp-error"],"tsa":["application/tamp-sequence-adjust"],"sac":["application/tamp-sequence-adjust-confirm"],"tur":["application/tamp-update"],"tuc":["application/tamp-update-confirm"],"jsontd":["application/td+json"],"odd":["application/tei+xml"],"tsq":["application/timestamp-query"],"tsr":["application/timestamp-reply"],"jsontm":["application/tm+json"],"trig":["application/trig"],"ttml":["application/ttml+xml"],"gsheet":["application/urc-grpsheet+xml"],"rsheet":["application/urc-ressheet+xml"],"td":["application/urc-targetdesc+xml"],"uis":["application/urc-uisocketdesc+xml"],"1km":["application/vnd.1000minds.decision-model+xml"],"sms":["application/vnd.3gpp2.sms"],"imgcal":["application/vnd.3lightssoftware.imagescal"],"pseg3820":["application/vnd.afpc.modca"],"ovl":["application/vnd.afpc.modca-overlay"],"psg":["application/vnd.afpc.modca-pagesegment"],"age":["application/vnd.age"],"azw3":["application/vnd.amazon.mobi8-ebook"],"ota":["application/vnd.android.ota"],"apkg":["application/vnd.anki"],"arrow":["application/vnd.apache.arrow.file"],"arrows":["application/vnd.apache.arrow.stream"],"apexlang":["application/vnd.apexlang"],"apex":["application/vnd.apexlang"],"keynote":["application/vnd.apple.keynote"],"numbers":["application/vnd.apple.numbers"],"pages":["application/vnd.apple.pages"],"artisan":["application/vnd.artisan+json"],"package":["application/vnd.autopackage"],"bmml":["application/vnd.balsamiq.bmml+xml"],"bmpr":["application/vnd.balsamiq.bmpr"],"ac2":["application/vnd.banana-accounting"],"lhzd":["application/vnd.belightsoft.lhzd+zip"],"lhzl":["application/vnd.belightsoft.lhzl+zip"],"ep":["application/vnd.bluetooth.ep.oob"],"le":["application/vnd.bluetooth.le.oob"],"tlclient":["application/vnd.cendio.thinlinc.clientconf"],"csl":["application/vnd.citationstyles.style+xml"],"coffee":["application/vnd.coffeescript"],"xodt":["application/vnd.collabio.xodocuments.document"],"xott":["application/vnd.collabio.xodocuments.document-template"],"xodp":["application/vnd.collabio.xodocuments.presentation"],"xotp":["application/vnd.collabio.xodocuments.presentation-template"],"xods":["application/vnd.collabio.xodocuments.spreadsheet"],"xots":["application/vnd.collabio.xodocuments.spreadsheet-template"],"icf":["application/vnd.commerce-battelle"],"icd":["application/vnd.commerce-battelle"],"ic0":["application/vnd.commerce-battelle"],"ic1":["application/vnd.commerce-battelle"],"ic2":["application/vnd.commerce-battelle"],"ic3":["application/vnd.commerce-battelle"],"ic4":["application/vnd.commerce-battelle"],"ic5":["application/vnd.commerce-battelle"],"ic6":["application/vnd.commerce-battelle"],"ic7":["application/vnd.commerce-battelle"],"ic8":["application/vnd.commerce-battelle"],"ign":["application/vnd.coreos.ignition+json"],"ignition":["application/vnd.coreos.ignition+json"],"ssvc":["application/vnd.crypto-shade-file"],"c9r":["application/vnd.cryptomator.encrypted"],"c9s":["application/vnd.cryptomator.encrypted"],"cryptomator":["application/vnd.cryptomator.vault"],"dl":["application/vnd.datalog"],"dbf":["application/vnd.dbf"],"ddeb":["application/vnd.debian.binary-package"],"dsm":["application/vnd.desmume.movie"],"docjson":["application/vnd.document+json"],"scld":["application/vnd.doremir.scorecloud-binary-document"],"mwc":["application/vnd.dpgraph"],"dpgraph":["application/vnd.dpgraph"],"fla":["application/vnd.dtg.local.flash"],"dzr":["application/vnd.dzr"],"eln":["application/vnd.eln+zip"],"qcall":["application/vnd.ericsson.quickcall"],"qca":["application/vnd.ericsson.quickcall"],"espass":["application/vnd.espass-espass+zip"],"asice":["application/vnd.etsi.asic-e+zip"],"sce":["application/vnd.etsi.asic-e+zip","application/x-scilab"],"asics":["application/vnd.etsi.asic-s+zip"],"tst":["application/vnd.etsi.timestamp-token"],"carjson":["application/vnd.eu.kasparian.car+json"],"ecigprofile":["application/vnd.evolv.ecig.profile"],"ecig":["application/vnd.evolv.ecig.settings"],"ecigtheme":["application/vnd.evolv.ecig.theme"],"mpw":["application/vnd.exstream-empower+zip"],"gdz":["application/vnd.familysearch.gedcom+zip"],"dim":["application/vnd.fastcopy-disk-image"],"msd":["application/vnd.fdsn.mseed"],"flb":["application/vnd.ficlab.flb+zip"],"zfc":["application/vnd.filmit.zfc"],"sfd":["application/vnd.font-fontforge-sfd"],"xct":["application/vnd.fujixerox.docuworks.container"],"genozip":["application/vnd.genozip"],"grd":["application/vnd.gentics.grd+json"],"ebuild":["application/vnd.gentoo.ebuild"],"eclass":["application/vnd.gentoo.eclass"],"xpak":["application/vnd.gentoo.xpak"],"ggs":["application/vnd.geogebra.slides"],"hbc":["application/vnd.hbci"],"kom":["application/vnd.hbci"],"upa":["application/vnd.hbci"],"pkd":["application/vnd.hbci"],"bpd":["application/vnd.hbci"],"hdt":["application/vnd.hdt"],"hpi":["application/vnd.hp-hpid"],"hsl":["application/vnd.hsl"],"emm":["application/vnd.ibm.electronic-media"],"imf":["application/vnd.imagemeter.folder+zip"],"imi":["application/vnd.imagemeter.image+zip"],"imscc":["application/vnd.ims.imsccv1p1"],"sdf":["application/vnd.kinar","chemical/x-mdl-sdfile"],"las":["application/vnd.las"],"lasjson":["application/vnd.las.las+json"],"lcs":["application/vnd.logipipe.circuit+zip"],"lca":["application/vnd.logipipe.circuit+zip"],"loom":["application/vnd.loom"],"wk4":["application/vnd.lotus-1-2-3"],"wk3":["application/vnd.lotus-1-2-3"],"wk1":["application/vnd.lotus-1-2-3"],"vew":["application/vnd.lotus-approach"],"prz":["application/vnd.lotus-freelance"],"ndl":["application/vnd.lotus-notes"],"ns4":["application/vnd.lotus-notes"],"ns3":["application/vnd.lotus-notes"],"ns2":["application/vnd.lotus-notes"],"nsh":["application/vnd.lotus-notes"],"nsg":["application/vnd.lotus-notes"],"or3":["application/vnd.lotus-organizer"],"or2":["application/vnd.lotus-organizer"],"sam":["application/vnd.lotus-wordpro"],"mvt":["application/vnd.mapbox-vector-tile"],"mdc":["application/vnd.marlin.drm.mdcf"],"3tz":["application/vnd.maxar.archive.3tz+zip"],"mmdb":["application/vnd.maxmind.maxmind-db"],"mdl":["application/vnd.mdl"],"mbsdf":["application/vnd.mdl-mbsdf"],"rxt":["application/vnd.medicalholodeck.recordxr"],"modl":["application/vnd.modl"],"3mf":["application/vnd.ms-3mfdocument"],"tnef":["application/vnd.ms-tnef"],"tnf":["application/vnd.ms-tnef"],"msa":["application/vnd.msa-disk-image"],"crtr":["application/vnd.multiad.creator"],"nebul":["application/vnd.nebumind.line"],"line":["application/vnd.nebumind.line"],"entity":["application/vnd.nervana"],"request":["application/vnd.nervana"],"bkm":["application/vnd.nervana"],"kcm":["application/vnd.nervana"],"nimn":["application/vnd.nimn"],"nds":["application/vnd.nintendo.nitro.rom"],"sfc":["application/vnd.nintendo.snes.rom"],"smc":["application/vnd.nintendo.snes.rom"],"otm":["application/vnd.oasis.opendocument.text-master-template"],"tam":["application/vnd.onepager"],"tamp":["application/vnd.onepagertamp"],"tamx":["application/vnd.onepagertamx"],"tat":["application/vnd.onepagertat"],"tatp":["application/vnd.onepagertatp"],"tatx":["application/vnd.onepagertatx"],"obgx":["application/vnd.openblox.game+xml"],"obg":["application/vnd.openblox.game-binary"],"oeb":["application/vnd.openeye.oeb"],"osm":["application/vnd.openstreetmap.data+xml"],"ndc":["application/vnd.osa.netdeploy"],"oxlicg":["application/vnd.oxli.countgraph"],"plp":["application/vnd.panoply"],"dive":["application/vnd.patentdive"],"pil":["application/vnd.piaccess.application-licence"],"preminet":["application/vnd.preminet"],"vbox":["application/vnd.previewsystems.box"],"psfs":["application/vnd.psfs"],"bar":["application/vnd.qualcomm.brew-app-res"],"quox":["application/vnd.quobject-quoxdocument"],"quiz":["application/vnd.quobject-quoxdocument"],"tree":["application/vnd.rainstor.data"],"rlm":["application/vnd.resilient.logic"],"reload":["application/vnd.resilient.logic"],"sar":["application/vnd.sar"],"sla":["application/vnd.scribus"],"slaz":["application/vnd.scribus"],"s3df":["application/vnd.sealed.3df"],"scsf":["application/vnd.sealed.csf"],"sdoc":["application/vnd.sealed.doc"],"sdo":["application/vnd.sealed.doc"],"s1w":["application/vnd.sealed.doc"],"seml":["application/vnd.sealed.eml"],"sem":["application/vnd.sealed.eml"],"smht":["application/vnd.sealed.mht"],"smh":["application/vnd.sealed.mht"],"sppt":["application/vnd.sealed.ppt"],"s1p":["application/vnd.sealed.ppt"],"stif":["application/vnd.sealed.tiff"],"sxls":["application/vnd.sealed.xls"],"sxl":["application/vnd.sealed.xls"],"s1e":["application/vnd.sealed.xls"],"stml":["application/vnd.sealedmedia.softseal.html"],"s1h":["application/vnd.sealedmedia.softseal.html"],"spdf":["application/vnd.sealedmedia.softseal.pdf"],"spd":["application/vnd.sealedmedia.softseal.pdf"],"s1a":["application/vnd.sealedmedia.softseal.pdf"],"ssv":["application/vnd.shade-save-file"],"shp":["application/vnd.shp","application/x-qgis"],"shx":["application/vnd.shx","application/x-qgis"],"sr":["application/vnd.sigrok.session"],"notebook":["application/vnd.smart.notebook"],"sipa":["application/vnd.smintio.portals.archive"],"ptrom":["application/vnd.snesdev-page-table"],"pt":["application/vnd.snesdev-page-table"],"fo":["application/vnd.software602.filler.form+xml"],"zfo":["application/vnd.software602.filler.form-xml-zip"],"sqlite":["application/vnd.sqlite3"],"sqlite3":["application/vnd.sqlite3"],"sds":["application/vnd.stardivision.chart"],"wadl":["application/vnd.sun.wadl+xml"],"ml2":["application/vnd.sybyl.mol2"],"mol2":["application/vnd.sybyl.mol2"],"sy2":["application/vnd.sybyl.mol2"],"scl":["application/vnd.sycle+xml"],"ddf":["application/vnd.syncml.dmddf+xml"],"qvd":["application/vnd.theqvd"],"ppttc":["application/vnd.think-cell.ppttc+json"],"vfr":["application/vnd.tml"],"viaframe":["application/vnd.tml"],"frm":["application/vnd.ufdl","application/x-maker"],"uo":["application/vnd.uoml+xml"],"urim":["application/vnd.uri-map"],"urimap":["application/vnd.uri-map"],"vmt":["application/vnd.valve.source.material"],"mxi":["application/vnd.vd-study"],"study-inter":["application/vnd.vd-study"],"model-inter":["application/vnd.vd-study"],"vwx":["application/vnd.vectorworks"],"aion":["application/vnd.veritone.aion+json"],"vtnstd":["application/vnd.veritone.aion+json"],"istc":["application/vnd.veryant.thin"],"isws":["application/vnd.veryant.thin"],"ves":["application/vnd.ves.encrypted"],"vsc":["application/vnd.vidsoft.vidconference"],"sic":["application/vnd.wap.sic"],"slc":["application/vnd.wap.slc"],"wafl":["application/vnd.wasmflow.wafl"],"p2p":["application/vnd.wfa.p2p"],"wsc":["application/vnd.wfa.wsc"],"wmc":["application/vnd.wmc"],"m":["application/vnd.wolfram.mathematica.package"],"wv":["application/vnd.wv.csp+wbxml"],"xfd":["application/vnd.xfdl"],"cpkg":["application/vnd.xmpie.cpkg"],"dpkg":["application/vnd.xmpie.dpkg"],"ppkg":["application/vnd.xmpie.ppkg"],"xlim":["application/vnd.xmpie.xlim"],"yme":["application/vnd.yaoweme"],"vcj":["application/voucher-cms+json"],"wasm":["application/wasm"],"wif":["application/watcherinfo+xml"],"wk":["application/x-123"],"cda":["application/x-cdf"],"mph":["application/x-comsol"],"mm":["application/x-freemind"],"gan":["application/x-ganttproject"],"sgf":["application/x-go-sgf"],"gcf":["application/x-graphing-calculator"],"tgz":["application/x-gtar-compressed"],"taz":["application/x-gtar-compressed"],"hwp":["application/x-hwp"],"ica":["application/x-ica"],"info":["application/x-info"],"ins":["application/x-internet-signup"],"isp":["application/x-internet-signup"],"iii":["application/x-iphone"],"jmz":["application/x-jmol"],"kil":["application/x-killustrator"],"lyx":["application/x-lyx"],"lzx":["application/x-lzx"],"fb":["application/x-maker"],"fbdoc":["application/x-maker"],"pac":["application/x-ns-proxy-autoconfig"],"nwc":["application/x-nwc"],"o":["application/x-object"],"oza":["application/x-oz-application"],"pyc":["application/x-python-code"],"pyo":["application/x-python-code"],"qgs":["application/x-qgis"],"qtl":["application/x-quicktimeplayer"],"rdp":["application/x-rdp"],"rpm":["application/x-redhat-package-manager"],"rb":["application/x-ruby"],"sci":["application/x-scilab"],"xcos":["application/x-scilab-xcos"],"scr":["application/x-silverlight"],"gf":["application/x-tex-gf"],"pk":["application/x-tex-pk"],"bak":["application/x-trash"],"old":["application/x-trash"],"sik":["application/x-trash"],"wz":["application/x-wingz"],"xav":["application/xcap-att+xml"],"xca":["application/xcap-caps+xml"],"xel":["application/xcap-el+xml"],"xns":["application/xcap-ns+xml"],"xhtm":["application/xhtml+xml"],"mod":["application/xml-dtd"],"ent":["application/xml-external-parsed-entity"],"zst":["application/zstd"],"adts":["audio/aac"],"ass":["audio/aac"],"ac3":["audio/ac3"],"amr":["audio/amr","audio/amr"],"awb":["audio/amr-wb","audio/amr-wb"],"axa":["audio/annodex"],"acn":["audio/asc"],"aal":["audio/atrac-advanced-lossless"],"at3":["audio/atrac3"],"aa3":["audio/atrac3"],"omg":["audio/atrac3"],"csd":["audio/csound"],"orc":["audio/csound"],"sco":["audio/csound"],"dls":["audio/dls"],"evc":["audio/evrc"],"qcp":["audio/evrc-qcp","audio/evrc-qcp"],"evb":["audio/evrcb"],"enw":["audio/evrcnw"],"evw":["audio/evrcwb"],"lbc":["audio/ilbc"],"l16":["audio/l16"],"mhas":["audio/mhas"],"mxmf":["audio/mobile-xmf"],"mpega":["audio/mpeg"],"mp1":["audio/mpeg"],"psid":["audio/prs.sid"],"sofa":["audio/sofa"],"loas":["audio/usac"],"xhe":["audio/usac"],"koz":["audio/vnd.audiokoz"],"plj":["audio/vnd.everad.plj"],"vbk":["audio/vnd.nortel.vbk"],"multitrack":["audio/vnd.presonus.multitrack"],"smp3":["audio/vnd.sealedmedia.softseal.mpeg"],"smp":["audio/vnd.sealedmedia.softseal.mpeg"],"s1m":["audio/vnd.sealedmedia.softseal.mpeg"],"gsm":["audio/x-gsm","model/vnd.gdl"],"sd2":["audio/x-sd2"],"alc":["chemical/x-alchemy"],"cac":["chemical/x-cache"],"cache":["chemical/x-cache"],"csf":["chemical/x-cache-csf"],"cbin":["chemical/x-cactvs-binary"],"cascii":["chemical/x-cactvs-binary"],"ctab":["chemical/x-cactvs-binary"],"c3d":["chemical/x-chem3d"],"cpa":["chemical/x-compass"],"bsd":["chemical/x-crossfire"],"csm":["chemical/x-csml"],"ctx":["chemical/x-ctx"],"cxf":["chemical/x-cxf"],"cef":["chemical/x-cxf"],"emb":["chemical/x-embl-dl-nucleotide"],"embl":["chemical/x-embl-dl-nucleotide"],"inp":["chemical/x-gamess-input"],"gamin":["chemical/x-gamess-input"],"fch":["chemical/x-gaussian-checkpoint"],"fchk":["chemical/x-gaussian-checkpoint"],"cub":["chemical/x-gaussian-cube"],"gau":["chemical/x-gaussian-input"],"gjc":["chemical/x-gaussian-input"],"gjf":["chemical/x-gaussian-input"],"gal":["chemical/x-gaussian-log"],"gcg":["chemical/x-gcg8-sequence"],"gen":["chemical/x-genbank"],"hin":["chemical/x-hin"],"istr":["chemical/x-isostar"],"ist":["chemical/x-isostar"],"jdx":["chemical/x-jcamp-dx"],"dx":["chemical/x-jcamp-dx"],"kin":["chemical/x-kinemage"],"mcm":["chemical/x-macmolecule"],"mmod":["chemical/x-macromodel-input"],"mol":["chemical/x-mdl-molfile"],"rd":["chemical/x-mdl-rdfile"],"rxn":["chemical/x-mdl-rxnfile"],"sd":["chemical/x-mdl-sdfile"],"tgf":["chemical/x-mdl-tgf"],"mcif":["chemical/x-mmcif"],"b":["chemical/x-molconn-z"],"gpt":["chemical/x-mopac-graph"],"mop":["chemical/x-mopac-input"],"mopcrt":["chemical/x-mopac-input"],"zmt":["chemical/x-mopac-input"],"moo":["chemical/x-mopac-out"],"asn":["chemical/x-ncbi-asn1","chemical/x-ncbi-asn1-spec"],"prt":["chemical/x-ncbi-asn1-ascii"],"val":["chemical/x-ncbi-asn1-binary"],"ros":["chemical/x-rosdal"],"sw":["chemical/x-swissprot"],"vms":["chemical/x-vamas-iso14976"],"vmd":["chemical/x-vmd"],"xtel":["chemical/x-xtel"],"exr":["image/aces"],"apng":["image/apng"],"avci":["image/avci"],"avcs":["image/avcs"],"avif":["image/avif"],"hif":["image/avif"],"drle":["image/dicom-rle"],"dpx":["image/dpx"],"fits":["image/fits"],"fit":["image/fits"],"fts":["image/fits"],"heic":["image/heic"],"heics":["image/heic-sequence"],"heif":["image/heif"],"heifs":["image/heif-sequence"],"hej2":["image/hej2k"],"hsj2":["image/hsj2"],"jls":["image/jls"],"jp2":["image/jp2"],"jpg2":["image/jp2"],"jfif":["image/jpeg"],"jph":["image/jph"],"jhc":["image/jphc"],"jphc":["image/jphc"],"jpx":["image/jpx"],"jpf":["image/jpx"],"jxl":["image/jxl"],"jxr":["image/jxr"],"jxra":["image/jxra"],"jxrs":["image/jxrs"],"jxs":["image/jxs"],"jxsc":["image/jxsc"],"jxsi":["image/jxsi"],"jxss":["image/jxss"],"ktx2":["image/ktx2"],"btf":["image/prs.btif"],"pti":["image/prs.pti"],"tfx":["image/tiff-fx"],"azv":["image/vnd.airzip.accelerator.azv"],"pgb":["image/vnd.globalgraphics.pgb","image/vnd.globalgraphics.pgb"],"b16":["image/vnd.pco.b16"],"hdr":["image/vnd.radiance"],"rgbe":["image/vnd.radiance"],"xyze":["image/vnd.radiance"],"spng":["image/vnd.sealed.png"],"spn":["image/vnd.sealed.png"],"s1n":["image/vnd.sealed.png"],"sgif":["image/vnd.sealedmedia.softseal.gif"],"s1g":["image/vnd.sealedmedia.softseal.gif"],"sjpg":["image/vnd.sealedmedia.softseal.jpg"],"sjp":["image/vnd.sealedmedia.softseal.jpg"],"s1j":["image/vnd.sealedmedia.softseal.jpg"],"tap":["image/vnd.tencent.tap"],"vtf":["image/vnd.valve.source.texture"],"cr2":["image/x-canon-cr2"],"crw":["image/x-canon-crw"],"cdr":["image/x-coreldraw"],"pat":["image/x-coreldrawpattern"],"cdt":["image/x-coreldrawtemplate"],"erf":["image/x-epson-erf"],"art":["image/x-jg","message/rfc822"],"jng":["image/x-jng"],"nef":["image/x-nikon-nef"],"orf":["image/x-olympus-orf"],"xcf":["image/x-xcf"],"u8msg":["message/global"],"u8dsn":["message/global-delivery-status"],"u8mdn":["message/global-disposition-notification"],"u8hdr":["message/global-headers"],"mail":["message/rfc822"],"gltf":["model/gltf+json"],"glb":["model/gltf-binary"],"jt":["model/jt"],"mtl":["model/mtl"],"stp":["model/step"],"step":["model/step"],"stpx":["model/step+xml"],"stpz":["model/step+zip"],"stpxz":["model/step-xml+zip"],"u3d":["model/u3d"],"cld":["model/vnd.cld"],"win":["model/vnd.gdl"],"dor":["model/vnd.gdl"],"lmp":["model/vnd.gdl"],"rsm":["model/vnd.gdl"],"msm":["application/octet-stream","model/vnd.gdl"],"ism":["model/vnd.gdl"],"moml":["model/vnd.moml+xml"],"ogex":["model/vnd.opengex"],"x_b":["model/vnd.parasolid.transmit.binary"],"xmt_bin":["model/vnd.parasolid.transmit.binary"],"x_t":["model/vnd.parasolid.transmit.text"],"xmt_txt":["model/vnd.parasolid.transmit.text"],"pyox":["model/vnd.pytha.pyox"],"vds":["model/vnd.sap.vds"],"usda":["model/vnd.usda"],"usdz":["model/vnd.usdz+zip"],"bsp":["model/vnd.valve.source.compiled-map"],"vrm":["model/vrml"],"bmed":["multipart/vnd.bint.med-plus"],"vpm":["multipart/voice-message"],"manifest":["text/cache-manifest"],"cql":["text/cql"],"csvs":["text/csv-schema"],"soa":["text/dns"],"zone":["text/dns"],"gff3":["text/gff3"],"shtml":["text/html"],"es":["text/javascript"],"cnd":["text/jcr-cnd"],"md":["text/markdown"],"markdown":["text/markdown"],"miz":["text/mizar"],"brf":["text/plain"],"provn":["text/provenance-notation"],"rst":["text/prs.fallenstein.rst"],"tag":["text/prs.lines.tag"],"shaclc":["text/shaclc"],"shc":["text/shaclc"],"shex":["text/shex"],"spdx":["text/spdx"],"tm":["text/texmacs"],"a":["text/vnd.a"],"abc":["text/vnd.abc"],"ascii":["text/vnd.ascii-art"],"copyright":["text/vnd.debian.copyright"],"jtd":["text/vnd.esmertec.theme-descriptor"],"vfk":["text/vnd.exchangeable"],"ged":["text/vnd.familysearch.gedcom"],"flt":["text/vnd.ficlab.flt"],"hans":["text/vnd.hans"],"hgl":["text/vnd.hgl"],"3dm":["text/vnd.in3d.3dml"],"spo":["text/vnd.in3d.spot"],"mpf":["text/vnd.ms-mediapackage"],"ccc":["text/vnd.net2phone.commcenter.command"],"mc2":["text/vnd.senx.warpscript"],"sos":["text/vnd.sosi"],"ts":["text/vnd.trolltech.linguist","video/mp2t"],"si":["text/vnd.wap.si"],"sl":["text/vnd.wap.sl"],"vtt":["text/vtt"],"wgsl":["text/wgsl"],"bib":["text/x-bibtex"],"boo":["text/x-boo"],"h++":["text/x-c++hdr"],"hpp":["text/x-c++hdr"],"hxx":["text/x-c++hdr"],"c++":["text/x-c++src"],"htc":["text/x-component"],"diff":["text/x-diff"],"patch":["text/x-diff"],"d":["text/x-dsrc"],"hs":["text/x-haskell"],"ly":["text/x-lilypond"],"lhs":["text/x-literate-haskell"],"moc":["text/x-moc"],"gcd":["text/x-pcs-gcd"],"pl":["application/x-perl","text/x-perl"],"pm":["application/x-perl","text/x-perl"],"py":["text/x-python"],"scala":["text/x-scala"],"tk":["application/x-tcl","text/x-tcl"],"ltx":["text/x-tex"],"sty":["text/x-tex"],"cls":["text/x-tex"],"axv":["video/annodex"],"dif":["video/dv"],"dv":["video/dv"],"gl":["video/gl"],"m4s":["video/iso.segment"],"nim":["video/vnd.nokia.interleaved-multimedia"],"bik":["video/vnd.radgamettools.bink"],"bk2":["video/vnd.radgamettools.bink"],"smk":["video/vnd.radgamettools.smacker"],"smpg":["video/vnd.sealed.mpeg1"],"s11":["video/vnd.sealed.mpeg1"],"s14":["video/vnd.sealed.mpeg4"],"sswf":["video/vnd.sealed.swf"],"ssw":["video/vnd.sealed.swf"],"smov":["video/vnd.sealedmedia.softseal.mov"],"smo":["video/vnd.sealedmedia.softseal.mov"],"s1q":["video/vnd.sealedmedia.softseal.mov"],"yt":["video/vnd.youtube.yt"],"lsf":["video/x-la-asf"],"lsx":["video/x-la-asf"],"mpv":["video/x-matroska"],"war":["application/java-archive"],"ear":["application/java-archive"],"cco":["application/x-cocoa"],"jardiff":["application/x-java-archive-diff"],"run":["application/x-makeself"],"sea":["application/x-sea"],"img":["application/octet-stream"],"3gpp":["video/3gpp"],"ob":["application/vnd.1ob"],"ipns-record":["application/vnd.ipfs.ipns-record"],"yaml":["application/yaml"],"yml":["application/yaml"],"j2c":["image/j2c"],"j2k":["image/j2c"],"bary":["model/vnd.bary"],"m2t":["video/mp2t"],"m2ts":["video/mp2t"]},"versions":{"apache":"\"2f97217608ca106c84af172d0cdd9b63176325c42c2c022a62fd0698b4011ed9\"","debian":"\"616d4701e0b83f8abd4c19628062f35c\"","nginx":"\"93c6df1b623b8401a2fe94f4904f3a1aef9d370f06586596ed17df4901d2eaab\""}} \ No newline at end of file From 9b9310f7d7ba8537f4249eea6f9ffd1c96bf4a76 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 19 Jun 2024 10:56:22 -0300 Subject: [PATCH 3/5] fix!: standardize update interface --- README.md | 2 +- src/MediaTypes.d.ts | 35 ++++++++++++----------------------- src/MediaTypes.js | 30 +++++++++++------------------- test/MediaTypes.spec.js | 16 ++++++++-------- 4 files changed, 32 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 0cec52c..0e058b7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MediaTypes [![CodeQL](https://github.com/JadsonLucena/MediaTypes.js/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/JadsonLucena/MediaTypes.js/actions/workflows/github-code-scanning/codeql) [![Test](https://github.com/JadsonLucena/MediaTypes.js/actions/workflows/test.yml/badge.svg)](https://github.com/JadsonLucena/MediaTypes.js/actions/workflows/test.yml) -[![Coverage Status](https://coveralls.io/repos/github/JadsonLucena/MediaTypes.js/badge.svg)](https://coveralls.io/github/JadsonLucena/MediaTypes.js) +[![Coverage](https://coveralls.io/repos/github/JadsonLucena/MediaTypes.js/badge.svg)](https://coveralls.io/github/JadsonLucena/MediaTypes.js) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org) diff --git a/src/MediaTypes.d.ts b/src/MediaTypes.d.ts index 5757c9e..0318c7f 100644 --- a/src/MediaTypes.d.ts +++ b/src/MediaTypes.d.ts @@ -9,29 +9,25 @@ type Versions = { declare module '@jadsonlucena/mediatypes' { /** - * @classdesc This is a comprehensive compilation of media types that is periodically updated through the following projects: Apache, NGINX and Debian + * @classdesc This is a comprehensive compilation of media types that may be periodically updated + * + * @emits MediaTypes#update + * @emits MediaTypes#error */ export default class MediaTypes { /** * Create a MediaType class * @param {number} [updateInterval=86400000] - Periodic database update in milliseconds. if less than zero, will be disabled - * - * @fires MediaTypes#update - * @fires MediaTypes#error + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay * * @throws {TypeError} Invalid updateInterval - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay */ constructor (updateInterval?: number) /** * @default '86400000' * - * @fires MediaTypes#update - * @fires MediaTypes#error - * * @throws {TypeError} Invalid updateInterval * * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay @@ -47,21 +43,18 @@ declare module '@jadsonlucena/mediatypes' { * @method * @param {boolean} [force=false] - Force update even if no version changes * - * @fires MediaTypes#update - * - * @return {Promise>} List of all extensions with their media types + * @return {Promise>} List of all extensions with their media types */ - update(force?: boolean): Promise> + update(force?: boolean): Promise> /** * @param {string} path - File path + * @see https://nodejs.org/api/path.html#pathparsepath * * @throws {TypeError} Invalid path * @throws {SyntaxError} Invalid extension * * @return {MIMEType[]} - * - * @see https://nodejs.org/api/path.html#pathparsepath */ get(path: string): MIMEType[] @@ -69,10 +62,8 @@ declare module '@jadsonlucena/mediatypes' { * @param {string} extension - File extension * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} * - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType * * @return {boolean} */ @@ -82,10 +73,8 @@ declare module '@jadsonlucena/mediatypes' { * @param {string} extension - File extension * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} * - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType * * @return {boolean} */ diff --git a/src/MediaTypes.js b/src/MediaTypes.js index 84a827c..1d297b7 100644 --- a/src/MediaTypes.js +++ b/src/MediaTypes.js @@ -13,6 +13,9 @@ function removeDuplicates (array) { * @class * @classdesc This is a comprehensive compilation of media types that may be periodically updated * + * @emits MediaTypes#update + * @emits MediaTypes#error + * * @typedef {Object} Versions * @property {string} Versions.apache * @property {string} Versions.debian @@ -34,9 +37,6 @@ class MediaTypes { * @param {number} [updateInterval=86400000] - Periodic database update in milliseconds. if less than zero, will be disabled * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay * - * @fires MediaTypes#update - * @fires MediaTypes#error - * * @throws {TypeError} Invalid updateInterval */ constructor (updateInterval = 86400000) { @@ -131,9 +131,7 @@ class MediaTypes { * @method * @param {boolean} [force=false] - Force update even if no version changes * - * @fires MediaTypes#update - * - * @return {Promise>} List of all extensions with their media types + * @return {Promise>} List of all extensions with their media types */ update (force = false) { return Promise.allSettled([ @@ -222,7 +220,7 @@ class MediaTypes { } if (!Object.keys(list).length) { - return null + return {} } fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ @@ -252,12 +250,10 @@ class MediaTypes { /** * @type {number} [updateInterval=86400000] - * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay - * - * @fires MediaTypes#update - * @fires MediaTypes#error * * @throws {TypeError} Invalid updateInterval + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay */ set updateInterval (updateInterval = 86400000) { if ( @@ -340,10 +336,8 @@ class MediaTypes { * @param {string} extension - File extension * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} * - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType * * @return {boolean} */ @@ -382,10 +376,8 @@ class MediaTypes { * @param {string} extension - File extension * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} * - * @throws {TypeError} Invalid extension - * @throws {SyntaxError} Invalid extension - * @throws {TypeError} Invalid mediaType - * @throws {SyntaxError} Invalid mediaType + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType * * @return {boolean} */ diff --git a/test/MediaTypes.spec.js b/test/MediaTypes.spec.js index a3ec26e..4536caa 100644 --- a/test/MediaTypes.spec.js +++ b/test/MediaTypes.spec.js @@ -335,7 +335,7 @@ describe('Methods', () => { expect(mediaType.delete(extension, contentType)).toBeTruthy() - await expect(mediaType.update()).resolves.toBeNull() + await expect(mediaType.update()).resolves.toStrictEqual({}) await expect(mediaType.update(true).then(res => { return Object.keys(res) @@ -361,7 +361,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that one wants to try to update the list of media types at some point and there was an error processing the media types or the file extension', () => { @@ -381,7 +381,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that the update method was called and the request returns an invalid data type', () => { @@ -398,7 +398,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that the update method was called and the request does not have an etag header', () => { @@ -414,7 +414,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that the update method was called and the request returns an error', () => { @@ -431,7 +431,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that the update method was called and the fetch function throws an exception', () => { @@ -443,7 +443,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) test('Given that the update method was called and the fetch function is rejected', () => { @@ -455,7 +455,7 @@ describe('Fetch', () => { const mediaType = new MediaTypes(-1) - return expect(mediaType.update()).resolves.toBeNull() + return expect(mediaType.update()).resolves.toStrictEqual({}) }) }) From bded2a1defd51cf01f3e25df81315ce4b34e8f3d Mon Sep 17 00:00:00 2001 From: = Date: Sun, 14 Jul 2024 16:01:51 -0300 Subject: [PATCH 4/5] feat: throw aggregate error --- package-lock.json | 7190 +++++++++++++++++++++++++++++++++++++++ src/MediaTypes.d.ts | 2 + src/MediaTypes.js | 898 ++--- test/MediaTypes.spec.js | 1424 ++++---- 4 files changed, 8363 insertions(+), 1151 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..28837b0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7190 @@ +{ + "name": "@jadsonlucena/mediatypes", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@jadsonlucena/mediatypes", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@commitlint/cli": "latest", + "@commitlint/config-conventional": "latest", + "eslint": "latest", + "eslint-config-standard": "latest", + "eslint-plugin-jest": "latest", + "jest": "latest" + }, + "engines": { + "node": ">=18" + } + }, + "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/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/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/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", + "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.6", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", + "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/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/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "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-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "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-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "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-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@commitlint/cli": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.3.tgz", + "integrity": "sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==", + "dev": true, + "dependencies": { + "@commitlint/format": "^18.4.3", + "@commitlint/lint": "^18.4.3", + "@commitlint/load": "^18.4.3", + "@commitlint/read": "^18.4.3", + "@commitlint/types": "^18.4.3", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", + "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.3.tgz", + "integrity": "sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^18.4.3", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.3.tgz", + "integrity": "sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^18.4.3", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.3.tgz", + "integrity": "sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.3.tgz", + "integrity": "sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^18.4.3", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.3.tgz", + "integrity": "sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^18.4.3", + "semver": "7.5.4" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.3.tgz", + "integrity": "sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^18.4.3", + "@commitlint/parse": "^18.4.3", + "@commitlint/rules": "^18.4.3", + "@commitlint/types": "^18.4.3" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.3.tgz", + "integrity": "sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^18.4.3", + "@commitlint/execute-rule": "^18.4.3", + "@commitlint/resolve-extends": "^18.4.3", + "@commitlint/types": "^18.4.3", + "@types/node": "^18.11.9", + "chalk": "^4.1.0", + "cosmiconfig": "^8.3.6", + "cosmiconfig-typescript-loader": "^5.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/message": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.3.tgz", + "integrity": "sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.3.tgz", + "integrity": "sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^18.4.3", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.3.tgz", + "integrity": "sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^18.4.3", + "@commitlint/types": "^18.4.3", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.3.tgz", + "integrity": "sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^18.4.3", + "@commitlint/types": "^18.4.3", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.3.tgz", + "integrity": "sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^18.4.3", + "@commitlint/message": "^18.4.3", + "@commitlint/to-lines": "^18.4.3", + "@commitlint/types": "^18.4.3", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.3.tgz", + "integrity": "sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.3.tgz", + "integrity": "sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.3.tgz", + "integrity": "sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v18" + } + }, + "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.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "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, + "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/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": 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/@eslint/eslintrc/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/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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, + "dependencies": { + "p-limit": "^2.2.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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "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 + }, + "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, + "peer": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", + "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "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, + "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/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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, + "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/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "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/utils/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, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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/@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, + "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/@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/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": 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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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": "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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "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.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "peer": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/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/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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": "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/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "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, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "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" + } + ] + }, + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "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/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/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "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/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", + "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", + "dev": true, + "dependencies": { + "jiti": "^1.19.1" + }, + "engines": { + "node": ">=v16" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=8.2", + "typescript": ">=4" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "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/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "peer": 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/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.611", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.611.tgz", + "integrity": "sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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 + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "peer": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "peer": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@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-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "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" + } + ], + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "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, + "peer": 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, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "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, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "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, + "peer": 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, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/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, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "27.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", + "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.4.0.tgz", + "integrity": "sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "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-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/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": 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/eslint/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/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, + "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/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/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/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/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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/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-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.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "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/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/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/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "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==", + "dev": true, + "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.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "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, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "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-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/git-raw-commits/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "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": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "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/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "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/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "peer": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/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/hosted-git-info/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/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/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "peer": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "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.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "peer": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/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/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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 + }, + "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/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "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/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "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/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.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "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.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/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/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "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/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "peer": true, + "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, + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "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/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/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/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, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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/pkg-dir/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "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/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/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/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/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, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "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/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "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, + "peer": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/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/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/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "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-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/semver/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/semver/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/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "peer": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "peer": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/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/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "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/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-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/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-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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/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-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/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, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/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, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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/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, + "engines": { + "node": ">=4" + } + }, + "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/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "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/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "peer": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "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" + } + } + } +} diff --git a/src/MediaTypes.d.ts b/src/MediaTypes.d.ts index 0318c7f..5917e26 100644 --- a/src/MediaTypes.d.ts +++ b/src/MediaTypes.d.ts @@ -64,6 +64,7 @@ declare module '@jadsonlucena/mediatypes' { * * @throws {TypeError|SyntaxError} Invalid extension * @throws {TypeError|SyntaxError} Invalid mediaType + * @throws {AggregateError} Invalid arguments * * @return {boolean} */ @@ -75,6 +76,7 @@ declare module '@jadsonlucena/mediatypes' { * * @throws {TypeError|SyntaxError} Invalid extension * @throws {TypeError|SyntaxError} Invalid mediaType + * @throws {AggregateError} Invalid arguments * * @return {boolean} */ diff --git a/src/MediaTypes.js b/src/MediaTypes.js index 1d297b7..36c7da1 100644 --- a/src/MediaTypes.js +++ b/src/MediaTypes.js @@ -1,440 +1,458 @@ -'use strict' - -const fs = require('node:fs') -const { parse, join } = require('node:path') -const { EventEmitter } = require('node:events') -const { MIMEType } = require('node:util') - -function removeDuplicates (array) { - return array.filter((v, i, a) => a.findIndex(t => t.essence === v.essence) === i) -} - -/** - * @class - * @classdesc This is a comprehensive compilation of media types that may be periodically updated - * - * @emits MediaTypes#update - * @emits MediaTypes#error - * - * @typedef {Object} Versions - * @property {string} Versions.apache - * @property {string} Versions.debian - * @property {string} Versions.nginx - */ -class MediaTypes { - #eventEmitter - - #mediaTypes - #versions - #updateInterval - #updateLoop - - #formatExtension = /^[a-z0-9!#$&\-^_+]+$/i - - /** - * Create a MediaType class - * @constructor - * @param {number} [updateInterval=86400000] - Periodic database update in milliseconds. if less than zero, will be disabled - * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay - * - * @throws {TypeError} Invalid updateInterval - */ - constructor (updateInterval = 86400000) { - this.#eventEmitter = new EventEmitter() - - try { - const { mediaTypes, versions } = JSON.parse(fs.readFileSync(join(__dirname, 'DB.json')).toString('utf8')) - - this.#mediaTypes = Object.keys(mediaTypes).reduce((acc, key) => { - acc[key] = mediaTypes[key].map(mediaType => new MIMEType(mediaType)) - - return acc - }, {}) - this.#versions = versions - } catch (err) { - this.#mediaTypes = {} - this.#versions = { - apache: '', - debian: '', - nginx: '' - } - } - - this.updateInterval = updateInterval - } - - #isMediaType (mediaType) { - try { - return new MIMEType(mediaType) - } catch (err) { - return false - } - } - - #updateList (content) { - const list = {} - - for (let extension in content) { - extension = extension.trim().toLowerCase() - - if (extension in this.#mediaTypes) { - content[extension].forEach(mediaType => { - mediaType = new MIMEType(mediaType) - - if (!this.#mediaTypes[extension].some(MT => MT.essence === mediaType.essence)) { - this.#mediaTypes[extension] = this.#mediaTypes[extension].concat(mediaType).sort() - - list[extension] = (list[extension] || []).concat(mediaType) - } - }) - } else { - list[extension] = this.#mediaTypes[extension] = removeDuplicates(content[extension].map(mediaType => new MIMEType(mediaType))) - } - } - - return list - } - - async #load (res) { - return { - version: res.headers.get('etag'), - content: (await res.text()) - .split(/\n+/) - .reduce((curr, line) => { - line = line.trim() - line = line.replace(/(\s*types\s*{\s*|\s*}\s*|\s*;\s*)$/ig, '') // remove non-standard characters coming from nginx when it fits - - if (/^\s*#.*$/.test(line) || line === '') { - return curr - } - - line = line.match(/^(?[^\s]+)\s+(?.*)$/) - - const mediaType = line?.groups?.mediaType - - if (this.#isMediaType(mediaType)) { - line?.groups?.extensions?.split(/\s+/)?.forEach(extension => { - extension = extension?.trim()?.toLowerCase() - - if (this.#formatExtension.test(extension)) { - curr[extension] = (curr[extension] || []).concat(mediaType) - } - }) - } - - return curr - }, {}) - } - } - - /** - * @method - * @param {boolean} [force=false] - Force update even if no version changes - * - * @return {Promise>} List of all extensions with their media types - */ - update (force = false) { - return Promise.allSettled([ - fetch('https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types', { // https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types - method: 'HEAD', - headers: { - 'Accept-Encoding': 'identity' - } - }).then(res => { - if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.apache))) { - return fetch('https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types', { - headers: { - 'Accept-Encoding': 'identity' - } - }) - } - }), - fetch('https://salsa.debian.org/debian/media-types/-/raw/master/mime.types', { // https://salsa.debian.org/debian/media-types/-/blob/master/mime.types - method: 'HEAD', - headers: { - 'Accept-Encoding': 'identity' - } - }).then(res => { - if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.debian))) { - return fetch('https://salsa.debian.org/debian/media-types/-/raw/master/mime.types', { - headers: { - 'Accept-Encoding': 'identity' - } - }) - } - }), - fetch('https://raw.githubusercontent.com/nginx/nginx/master/conf/mime.types', { // https://github.com/nginx/nginx/blob/master/conf/mime.types - method: 'HEAD', - headers: { - 'Accept-Encoding': 'identity' - } - }).then(res => { - if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.nginx))) { - return fetch('https://raw.githubusercontent.com/nginx/nginx/master/conf/mime.types', { - headers: { - 'Accept-Encoding': 'identity' - } - }) - } - }) - ]).then(async results => { - let list = {} - - if (results[0].status === 'fulfilled' && results[0].value) { - const load = await this.#load(results[0].value) - - if (load.version && Object.keys(load.content).length) { - this.#versions.apache = load.version - - list.apache = { - content: this.#updateList(load.content), - version: load.version - } - } - } - - if (results[1].status === 'fulfilled' && results[1].value) { - const load = await this.#load(results[1].value) - - if (load.version && Object.keys(load.content).length) { - this.#versions.debian = load.version - - list.debian = { - content: this.#updateList(load.content), - version: load.version - } - } - } - - if (results[2].status === 'fulfilled' && results[2].value) { - const load = await this.#load(results[2].value) - - if (load.version && Object.keys(load.content).length) { - this.#versions.nginx = load.version - - list.nginx = { - content: this.#updateList(load.content), - version: load.version - } - } - } - - if (!Object.keys(list).length) { - return {} - } - - fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ - mediaTypes: this.#mediaTypes, - versions: this.#versions - })) - - list = Object.keys(list).reduce((acc, cur) => { - Object.keys(list[cur].content).forEach(key => { - acc[key] = removeDuplicates((acc[key] || []).concat(list[cur].content[key])) - }) - - return acc - }, {}) - - /** - * Update event - * - * @event MediaTypes#update - * @type {Object.} - */ - this.#eventEmitter.emit('update', list) - - return list - }) - } - - /** - * @type {number} [updateInterval=86400000] - * - * @throws {TypeError} Invalid updateInterval - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay - */ - set updateInterval (updateInterval = 86400000) { - if ( - typeof updateInterval !== 'number' || - !Number.isFinite(updateInterval) || - Number.isNaN(updateInterval) - ) { - throw new TypeError('Invalid updateInterval') - } - - this.#updateInterval = updateInterval - - clearInterval(this.#updateLoop) - - if (updateInterval >= 0) { - this.#updateLoop = setInterval(async () => { - try { - await this.update() - } catch (err) { - /** - * Error event - * - * @event MediaTypes#error - * @type {Error} - */ - this.#eventEmitter.emit('error', err) - } - }, this.#updateInterval) - } - } - - /** - * @type {number} - */ - get updateInterval () { - return this.#updateInterval - } - - /** - * @return {Versions} - */ - get versions () { - return this.#versions - } - - /** - * @return {Object.} - */ - get list () { - return this.#mediaTypes - } - - /** - * @method - * @param {string} path - File path - * @see https://nodejs.org/api/path.html#pathparsepath - * - * @throws {TypeError} Invalid path - * @throws {SyntaxError} Invalid extension - * - * @return {MIMEType[]} - */ - get (path) { - if (typeof path !== 'string') { - throw new TypeError('Invalid path') - } - - const pathinfo = parse(path) - const extension = pathinfo.ext.replace('.', '').trim().toLowerCase() - - if (!this.#formatExtension.test(extension)) { - throw new SyntaxError('Invalid extension') - } - - return (this.#mediaTypes[extension] || []) - } - - /** - * @method - * @param {string} extension - File extension - * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} - * - * @throws {TypeError|SyntaxError} Invalid extension - * @throws {TypeError|SyntaxError} Invalid mediaType - * - * @return {boolean} - */ - set (extension, mediaType) { - if (typeof extension !== 'string') { - throw new TypeError('Invalid extension') - } else if (!this.#formatExtension.test(extension)) { - throw new SyntaxError('Invalid extension') - } - - if (typeof mediaType !== 'string') { - throw new TypeError('Invalid mediaType') - } else if (!this.#isMediaType(mediaType)) { - throw new SyntaxError('Invalid mediaType') - } - - const content = {} - content[extension] = [].concat(mediaType) - - const list = this.#updateList(content) - - if (!(extension in list)) { - return false - } - - fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ - mediaTypes: this.#mediaTypes, - versions: this.#versions - })) - - return true - } - - /** - * @method - * @param {string} extension - File extension - * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} - * - * @throws {TypeError|SyntaxError} Invalid extension - * @throws {TypeError|SyntaxError} Invalid mediaType - * - * @return {boolean} - */ - delete (extension, mediaType) { - if (typeof extension !== 'string') { - throw new TypeError('Invalid extension') - } else if (!this.#formatExtension.test(extension)) { - throw new SyntaxError('Invalid extension') - } - - extension = extension.trim().toLowerCase() - - if (typeof mediaType !== 'string') { - throw new TypeError('Invalid mediaType') - } else if (!this.#isMediaType(mediaType)) { - throw new SyntaxError('Invalid mediaType') - } - - if (!(extension in this.#mediaTypes)) { - return false - } - - const i = this.#mediaTypes[extension].findIndex(MT => MT.essence === new MIMEType(mediaType).essence) - - if (i < 0) { - return false - } - - this.#mediaTypes[extension].splice(i, 1) - - if (!this.#mediaTypes[extension].length) { - delete this.#mediaTypes[extension] - } - - fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ - mediaTypes: this.#mediaTypes, - versions: this.#versions - })) - - return true - } - - // EventEmitter methods - addListener = (...params) => this.#eventEmitter.addListener(...params) - eventNames = (...params) => this.#eventEmitter.eventNames(...params) - getMaxListeners = (...params) => this.#eventEmitter.getMaxListeners(...params) - listenerCount = (...params) => this.#eventEmitter.listenerCount(...params) - listeners = (...params) => this.#eventEmitter.listeners(...params) - off = (...params) => this.#eventEmitter.off(...params) - on = (...params) => this.#eventEmitter.on(...params) - once = (...params) => this.#eventEmitter.once(...params) - prependListener = (...params) => this.#eventEmitter.prependListener(...params) - prependOnceListener = (...params) => this.#eventEmitter.prependOnceListener(...params) - removeAllListeners = (...params) => this.#eventEmitter.removeAllListeners(...params) - removeListener = (...params) => this.#eventEmitter.removeListener(...params) - setMaxListeners = (...params) => this.#eventEmitter.setMaxListeners(...params) - rawListeners = (...params) => this.#eventEmitter.rawListeners(...params) -} - -module.exports = MediaTypes +'use strict' + +const fs = require('node:fs') +const { parse, join } = require('node:path') +const { EventEmitter } = require('node:events') +const { MIMEType } = require('node:util') + +function removeDuplicates (array) { + return array.filter((v, i, a) => a.findIndex(t => t.essence === v.essence) === i) +} + +/** + * @class + * @classdesc This is a comprehensive compilation of media types that may be periodically updated + * + * @emits MediaTypes#update + * @emits MediaTypes#error + * + * @typedef {Object} Versions + * @property {string} Versions.apache + * @property {string} Versions.debian + * @property {string} Versions.nginx + */ +class MediaTypes { + #eventEmitter + + #mediaTypes + #versions + #updateInterval + #updateLoop + + #formatExtension = /^[a-z0-9!#$&\-^_+]+$/i + + /** + * Create a MediaType class + * @constructor + * @param {number} [updateInterval=86400000] - Periodic database update in milliseconds. if less than zero, will be disabled + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay + * + * @throws {TypeError} Invalid updateInterval + */ + constructor (updateInterval = 86400000) { + this.#eventEmitter = new EventEmitter() + + try { + const { mediaTypes, versions } = JSON.parse(fs.readFileSync(join(__dirname, 'DB.json')).toString('utf8')) + + this.#mediaTypes = Object.keys(mediaTypes).reduce((acc, key) => { + acc[key] = mediaTypes[key].map(mediaType => new MIMEType(mediaType)) + + return acc + }, {}) + this.#versions = versions + } catch (err) { + this.#mediaTypes = {} + this.#versions = { + apache: '', + debian: '', + nginx: '' + } + } + + this.updateInterval = updateInterval + } + + #isMediaType (mediaType) { + try { + return new MIMEType(mediaType) + } catch (err) { + return false + } + } + + #updateList (content) { + const list = {} + + for (let extension in content) { + extension = extension.trim().toLowerCase() + + if (extension in this.#mediaTypes) { + content[extension].forEach(mediaType => { + mediaType = new MIMEType(mediaType) + + if (!this.#mediaTypes[extension].some(MT => MT.essence === mediaType.essence)) { + this.#mediaTypes[extension] = this.#mediaTypes[extension].concat(mediaType).sort() + + list[extension] = (list[extension] || []).concat(mediaType) + } + }) + } else { + list[extension] = this.#mediaTypes[extension] = removeDuplicates(content[extension].map(mediaType => new MIMEType(mediaType))) + } + } + + return list + } + + async #load (res) { + return { + version: res.headers.get('etag'), + content: (await res.text()) + .split(/\n+/) + .reduce((curr, line) => { + line = line.trim() + line = line.replace(/(\s*types\s*{\s*|\s*}\s*|\s*;\s*)$/ig, '') // remove non-standard characters coming from nginx when it fits + + if (/^\s*#.*$/.test(line) || line === '') { + return curr + } + + line = line.match(/^(?[^\s]+)\s+(?.*)$/) + + const mediaType = line?.groups?.mediaType + + if (this.#isMediaType(mediaType)) { + line?.groups?.extensions?.split(/\s+/)?.forEach(extension => { + extension = extension?.trim()?.toLowerCase() + + if (this.#formatExtension.test(extension)) { + curr[extension] = (curr[extension] || []).concat(mediaType) + } + }) + } + + return curr + }, {}) + } + } + + /** + * @method + * @param {boolean} [force=false] - Force update even if no version changes + * + * @return {Promise>} List of all extensions with their media types + */ + update (force = false) { + return Promise.allSettled([ + fetch('https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types', { // https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types + method: 'HEAD', + headers: { + 'Accept-Encoding': 'identity' + } + }).then(res => { + if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.apache))) { + return fetch('https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types', { + headers: { + 'Accept-Encoding': 'identity' + } + }) + } + }), + fetch('https://salsa.debian.org/debian/media-types/-/raw/master/mime.types', { // https://salsa.debian.org/debian/media-types/-/blob/master/mime.types + method: 'HEAD', + headers: { + 'Accept-Encoding': 'identity' + } + }).then(res => { + if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.debian))) { + return fetch('https://salsa.debian.org/debian/media-types/-/raw/master/mime.types', { + headers: { + 'Accept-Encoding': 'identity' + } + }) + } + }), + fetch('https://raw.githubusercontent.com/nginx/nginx/master/conf/mime.types', { // https://github.com/nginx/nginx/blob/master/conf/mime.types + method: 'HEAD', + headers: { + 'Accept-Encoding': 'identity' + } + }).then(res => { + if (res.status === 200 && (Boolean(force) || (res.headers.get('etag') && res.headers.get('etag') !== this.#versions.nginx))) { + return fetch('https://raw.githubusercontent.com/nginx/nginx/master/conf/mime.types', { + headers: { + 'Accept-Encoding': 'identity' + } + }) + } + }) + ]).then(async results => { + let list = {} + + if (results[0].status === 'fulfilled' && results[0].value) { + const load = await this.#load(results[0].value) + + if (load.version && Object.keys(load.content).length) { + this.#versions.apache = load.version + + list.apache = { + content: this.#updateList(load.content), + version: load.version + } + } + } + + if (results[1].status === 'fulfilled' && results[1].value) { + const load = await this.#load(results[1].value) + + if (load.version && Object.keys(load.content).length) { + this.#versions.debian = load.version + + list.debian = { + content: this.#updateList(load.content), + version: load.version + } + } + } + + if (results[2].status === 'fulfilled' && results[2].value) { + const load = await this.#load(results[2].value) + + if (load.version && Object.keys(load.content).length) { + this.#versions.nginx = load.version + + list.nginx = { + content: this.#updateList(load.content), + version: load.version + } + } + } + + if (!Object.keys(list).length) { + return {} + } + + fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ + mediaTypes: this.#mediaTypes, + versions: this.#versions + })) + + list = Object.keys(list).reduce((acc, cur) => { + Object.keys(list[cur].content).forEach(key => { + acc[key] = removeDuplicates((acc[key] || []).concat(list[cur].content[key])) + }) + + return acc + }, {}) + + /** + * Update event + * + * @event MediaTypes#update + * @type {Object.} + */ + this.#eventEmitter.emit('update', list) + + return list + }) + } + + /** + * @type {number} [updateInterval=86400000] + * + * @throws {TypeError} Invalid updateInterval + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/setInterval#delay + */ + set updateInterval (updateInterval = 86400000) { + if ( + typeof updateInterval !== 'number' || + !Number.isFinite(updateInterval) || + Number.isNaN(updateInterval) + ) { + throw new TypeError('Invalid updateInterval') + } + + this.#updateInterval = updateInterval + + clearInterval(this.#updateLoop) + + if (updateInterval >= 0) { + this.#updateLoop = setInterval(async () => { + try { + await this.update() + } catch (err) { + /** + * Error event + * + * @event MediaTypes#error + * @type {Error} + */ + this.#eventEmitter.emit('error', err) + } + }, this.#updateInterval) + } + } + + /** + * @type {number} + */ + get updateInterval () { + return this.#updateInterval + } + + /** + * @return {Versions} + */ + get versions () { + return this.#versions + } + + /** + * @return {Object.} + */ + get list () { + return this.#mediaTypes + } + + /** + * @method + * @param {string} path - File path + * @see https://nodejs.org/api/path.html#pathparsepath + * + * @throws {TypeError} Invalid path + * @throws {SyntaxError} Invalid extension + * + * @return {MIMEType[]} + */ + get (path) { + if (typeof path !== 'string') { + throw new TypeError('Invalid path') + } + + const pathinfo = parse(path) + const extension = pathinfo.ext.replace('.', '').trim().toLowerCase() + + if (!this.#formatExtension.test(extension)) { + throw new SyntaxError('Invalid extension') + } + + return (this.#mediaTypes[extension] || []) + } + + /** + * @method + * @param {string} extension - File extension + * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} + * + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType + * @throws {AggregateError} Invalid arguments + * + * @return {boolean} + */ + set (extension, mediaType) { + const errors = [] + + if (typeof extension !== 'string') { + errors.push(new TypeError('Invalid extension')) + } else if (!this.#formatExtension.test(extension)) { + errors.push(new SyntaxError('Invalid extension')) + } + + if (typeof mediaType !== 'string') { + errors.push(new TypeError('Invalid mediaType')) + } else if (!this.#isMediaType(mediaType)) { + errors.push(new SyntaxError('Invalid mediaType')) + } + + if (errors.length > 1) { + throw new AggregateError(errors, 'Invalid arguments') + } else if (errors.length === 1) { + throw errors.pop() + } + + const content = {} + content[extension] = [].concat(mediaType) + + const list = this.#updateList(content) + + if (!(extension in list)) { + return false + } + + fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ + mediaTypes: this.#mediaTypes, + versions: this.#versions + })) + + return true + } + + /** + * @method + * @param {string} extension - File extension + * @param {string} mediaType - {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type IANA media types} + * + * @throws {TypeError|SyntaxError} Invalid extension + * @throws {TypeError|SyntaxError} Invalid mediaType + * @throws {AggregateError} Invalid arguments + * + * @return {boolean} + */ + delete (extension, mediaType) { + const errors = [] + + if (typeof extension !== 'string') { + errors.push(new TypeError('Invalid extension')) + } else if (!this.#formatExtension.test(extension)) { + errors.push(new SyntaxError('Invalid extension')) + } + + if (typeof mediaType !== 'string') { + errors.push(new TypeError('Invalid mediaType')) + } else if (!this.#isMediaType(mediaType)) { + errors.push(new SyntaxError('Invalid mediaType')) + } + + if (errors.length > 1) { + throw new AggregateError(errors, 'Invalid arguments') + } else if (errors.length === 1) { + throw errors.pop() + } + + extension = extension.trim().toLowerCase() + + if (!(extension in this.#mediaTypes)) { + return false + } + + const i = this.#mediaTypes[extension].findIndex(MT => MT.essence === new MIMEType(mediaType).essence) + + if (i < 0) { + return false + } + + this.#mediaTypes[extension].splice(i, 1) + + if (!this.#mediaTypes[extension].length) { + delete this.#mediaTypes[extension] + } + + fs.writeFileSync(join(__dirname, 'DB.json'), JSON.stringify({ + mediaTypes: this.#mediaTypes, + versions: this.#versions + })) + + return true + } + + // EventEmitter methods + addListener = (...params) => this.#eventEmitter.addListener(...params) + eventNames = (...params) => this.#eventEmitter.eventNames(...params) + getMaxListeners = (...params) => this.#eventEmitter.getMaxListeners(...params) + listenerCount = (...params) => this.#eventEmitter.listenerCount(...params) + listeners = (...params) => this.#eventEmitter.listeners(...params) + off = (...params) => this.#eventEmitter.off(...params) + on = (...params) => this.#eventEmitter.on(...params) + once = (...params) => this.#eventEmitter.once(...params) + prependListener = (...params) => this.#eventEmitter.prependListener(...params) + prependOnceListener = (...params) => this.#eventEmitter.prependOnceListener(...params) + removeAllListeners = (...params) => this.#eventEmitter.removeAllListeners(...params) + removeListener = (...params) => this.#eventEmitter.removeListener(...params) + setMaxListeners = (...params) => this.#eventEmitter.setMaxListeners(...params) + rawListeners = (...params) => this.#eventEmitter.rawListeners(...params) +} + +module.exports = MediaTypes diff --git a/test/MediaTypes.spec.js b/test/MediaTypes.spec.js index 4536caa..8760e8b 100644 --- a/test/MediaTypes.spec.js +++ b/test/MediaTypes.spec.js @@ -1,711 +1,713 @@ -'use strict' - -const fs = require('node:fs') -const { EventEmitter, errorMonitor } = require('node:events') -const { MIMEType } = require('node:util') - -jest.useFakeTimers() -jest.spyOn(global, 'setInterval') - -jest.mock('fs') -jest.spyOn(fs, 'readFileSync') -jest.spyOn(fs, 'writeFileSync') - -jest.spyOn(global, 'fetch') - -beforeEach(() => { - fs.writeFileSync.mockImplementation(() => true) - fs.readFileSync.mockImplementation(() => JSON.stringify({ - mediaTypes: { - txt: ['text/plain'] - }, - versions: { - apache: 'apache_v0', - debian: 'debian_v0', - nginx: 'nginx_v0' - } - })) - - fetch.mockImplementation((resource, options) => { - try { - if (typeof resource !== 'string') { - options = resource - resource = resource.url - } - - options.method = options.method || 'GET' - - let body = '' - const status = 200 - let etag = '' - - if (resource.includes('apache')) { - if (options.method.toUpperCase() === 'GET') { - body = ` - audio/mpeg mpga mp2 mp2a mp3 m2a m3a - image/jpeg jpeg jpg jpe - text/plain txt text conf def list log in - video/mp4 mp4 mp4v mpg4 - ` - } - - etag = 'apache_v1' - } else if (resource.includes('debian')) { - if (options.method.toUpperCase() === 'GET') { - body = ` - audio/mpeg mpga mpega mp1 mp2 mp3 - image/jpeg jpeg jpg jpe jfif - text/plain txt text pot brf srt - video/mp4 mp4 mpg4 m4v - ` - } - - etag = 'debian_v1' - } else if (resource.includes('nginx')) { - if (options.method.toUpperCase() === 'GET') { - body = ` - types { - audio/mpeg mp3; - image/jpeg jpeg jpg; - text/plain txt; - video/mp4 mp4; - } - ` - } - - etag = 'nginx_v1' - } - - return Promise.resolve(new Response(body, { - status, - headers: { - etag - } - })) - } catch (err) { - console.error('fetch mock error', err) - } - }) -}) - -afterEach(() => { - setInterval.mockClear() - fetch.mockClear() - fs.writeFileSync.mockClear() - fs.readFileSync.mockClear() -}) - -const MediaTypes = require('../src/MediaTypes.js') - -describe('Constructor', () => { - test('Given that one wants to instantiate the module with an invalid updateInterval argument', () => { - ['', 'xyz', false, null, NaN, Infinity, {}, []].forEach(updateInterval => { - expect(() => new MediaTypes(updateInterval)).toThrow(new TypeError('Invalid updateInterval')) - - const mediaType = new MediaTypes() - - expect(() => { - mediaType.updateInterval = updateInterval - }).toThrow(new TypeError('Invalid updateInterval')) - }) - }) - - test('Given that one wants to enable the automatic periodic update', () => { - setInterval.mockImplementationOnce(jest.fn()); - - [0, Number.MAX_SAFE_INTEGER].forEach(updateInterval => { - expect(() => new MediaTypes(updateInterval)).not.toThrowError() - }) - - expect(setInterval).toHaveBeenCalledTimes(2) - }) - - test('Given you do not want to enable the automatic periodic update', () => { - [Number.MIN_SAFE_INTEGER, -1].forEach(updateInterval => { - expect(() => new MediaTypes(updateInterval)).not.toThrowError() - }) - - expect(setInterval).toHaveBeenCalledTimes(0) - }) -}) - -describe('Attributes', () => { - test('Given that we want to check the default values of module attributes', () => { - const mediaType = new MediaTypes() - - expect(mediaType.list).toMatchObject({ - txt: [new MIMEType('text/plain')] - }) - - expect(mediaType.versions).toMatchObject({ - apache: 'apache_v0', - debian: 'debian_v0', - nginx: 'nginx_v0' - }) - - expect(mediaType.updateInterval).toBe(86400000) - - expect(setInterval).toHaveBeenCalledTimes(1) - expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 86400000) - }) - - test('Given that we want to check the default values of module attributes when the DB.json file is invalid', () => { - fs.readFileSync.mockReturnValueOnce('') - - const mediaType = new MediaTypes(-1) - - expect(mediaType.list).toMatchObject({}) - - expect(mediaType.versions).toMatchObject({ - apache: '', - debian: '', - nginx: '' - }) - }) - - test('Given that we want to update the period of automatic update attempts at runtime', () => { - const mediaType = new MediaTypes(-1) - - expect(setInterval).toHaveBeenCalledTimes(0) - - mediaType.updateInterval = 1000 - - expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 1000) - - mediaType.updateInterval = undefined - - expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 86400000) - - mediaType.updateInterval = -1 - - expect(setInterval).toHaveBeenCalledTimes(2) - }) -}) - -describe('Methods', () => { - describe('get', () => { - test('Given that one wants to get the possible media types from the file by passing an invalid path argument', () => { - const mediaType = new MediaTypes(-1); - - [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { - expect(() => mediaType.get(path)).toThrow(new TypeError('Invalid path')) - }); - - ['fileName', 'fileName.', '.txt', ''].forEach(path => { - expect(() => mediaType.get(path)).toThrow(new SyntaxError('Invalid extension')) - }) - }) - - test('Given that one wants to get the possible media types from the file', () => { - const mediaType = new MediaTypes(-1); - - ['path/to/fileName.txt', 'fileName.txt'].forEach(path => { - expect(mediaType.get(path)).toContainEqual(new MIMEType('text/plain')) - }) - }) - }) - - describe('set', () => { - test('Given that one wants to set a new media type in the module list by passing an invalid path argument', () => { - const mediaType = new MediaTypes(-1); - - [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { - expect(() => mediaType.set(path, 'application/x-test')).toThrow(new TypeError('Invalid extension')) - }); - - ['fileName.', '.txt', ''].forEach(path => { - expect(() => mediaType.set(path, 'application/x-test')).toThrow(new SyntaxError('Invalid extension')) - }) - }) - - test('Given that one wants to set a new media type in the module list by passing an invalid mediaTypes argument', () => { - const mediaType = new MediaTypes(-1); - - [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(mediaTypes => { - expect(() => mediaType.set('test', mediaTypes)).toThrow(new TypeError('Invalid mediaType')) - }); - - ['application', 'application/', '/x-test', ''].forEach(mediaTypes => { - expect(() => mediaType.set('test', mediaTypes)).toThrow(new SyntaxError('Invalid mediaType')) - }) - }) - - test('Given that one wants to set a new media type in the module list', () => { - const mediaType = new MediaTypes(-1) - - const extension = 'test' - const contentType = ['application/x-test', 'application/octet-stream'] - - expect(mediaType.set(extension, `${contentType[0]};key=value`)).toBeTruthy() - expect(mediaType.set(extension, contentType[0])).toBeFalsy() - expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(`${contentType[0]};key=value`)) - - expect(mediaType.set(extension, contentType[1])).toBeTruthy() - expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType[1])) - }) - - test('Given that one wants to set an already existing media type into the module list', () => { - const mediaType = new MediaTypes(-1) - - expect(mediaType.set('txt', 'text/plain')).toBeFalsy() - expect(mediaType.set('txt', 'text/plain;key=value')).toBeFalsy() - }) - }) - - describe('delete', () => { - test('Given that one wants to delete a new media type in the module list by passing an invalid path argument', () => { - const mediaType = new MediaTypes(-1); - - [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { - expect(() => mediaType.delete(path, 'application/x-test')).toThrow(new TypeError('Invalid extension')) - }); - - ['fileName.', '.txt', ''].forEach(path => { - expect(() => mediaType.delete(path, 'application/x-test')).toThrow(new SyntaxError('Invalid extension')) - }) - }) - - test('Given that one wants to delete a new media type in the module list by passing an invalid mediaTypes argument', () => { - const mediaType = new MediaTypes(-1); - - [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(mediaTypes => { - expect(() => mediaType.delete('test', mediaTypes)).toThrow(new TypeError('Invalid mediaType')) - }); - - ['application', 'application/', '/x-test', ''].forEach(mediaTypes => { - expect(() => mediaType.delete('test', mediaTypes)).toThrow(new SyntaxError('Invalid mediaType')) - }) - }) - - test('Given that one wants to delete an existing media type in the module list', () => { - const mediaType = new MediaTypes(-1) - - const extension = 'txt' - const contentType = 'text/plain' - - expect(mediaType.delete(extension, contentType)).toBeTruthy() - expect(extension in mediaType.list).toBeFalsy() - expect(mediaType.get(`fileName.${extension}`)).not.toContainEqual(new MIMEType(contentType)) - }) - - test('Given that one wants to delete a media type that does not exist in the module list', () => { - const mediaType = new MediaTypes(-1) - - expect(mediaType.delete('txt', 'application/octet-stream')).toBeFalsy() - expect(mediaType.delete('test', 'text/plain')).toBeFalsy() - }) - - test('Given that you want to exclude one of the existing media types in the list of modules', () => { - const mediaType = new MediaTypes(-1) - - const extension = 'txt' - - expect(mediaType.set(extension, 'application/octet-stream')).toBeTruthy() - expect(mediaType.delete(extension, 'text/plain')).toBeTruthy() - expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType('application/octet-stream')) - }) - }) - - describe('update', () => { - test('Given that one wants to try to update the list of media types at some point', async () => { - expect.assertions(3) - - const mediaType = new MediaTypes(-1) - - const extension = 'jpg' - const contentType = 'image/jpeg' - - expect(mediaType.get(`fileName.${extension}`)).toHaveLength(0) - - await expect(mediaType.update().then(res => { - return Object.keys(res) - })).resolves.toContain(extension) - expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType)) - }) - - test('Given that one wants to try to force update the list of media types at some point', async () => { - expect.assertions(4) - - const mediaType = new MediaTypes(-1) - - const extension = 'jpg' - const contentType = 'image/jpeg' - - await mediaType.update() - - expect(mediaType.delete(extension, contentType)).toBeTruthy() - - await expect(mediaType.update()).resolves.toStrictEqual({}) - - await expect(mediaType.update(true).then(res => { - return Object.keys(res) - })).resolves.toContain(extension) - - expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType)) - }) - }) -}) - -describe('Fetch', () => { - test('Given that one wants to try to update the list of media types at some point and there was an error processing the data', () => { - expect.assertions(1) - - for (let i = 0; i < 6; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Response('invalid data', { - status: 200, - headers: { - etag: 'v3' - } - }))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that one wants to try to update the list of media types at some point and there was an error processing the media types or the file extension', () => { - expect.assertions(1) - - for (let i = 0; i < 6; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Response(` - audio/mpeg %@? - video/%@? mp4 - `, { - status: 200, - headers: { - etag: 'v2' - } - }))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that the update method was called and the request returns an invalid data type', () => { - expect.assertions(1) - - for (let i = 0; i < 6; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Response(null, { - status: 200, - headers: { - etag: 'v3' - } - }))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that the update method was called and the request does not have an etag header', () => { - expect.assertions(1) - - for (let i = 0; i < 3; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Response(` - video/mp4 mp4 mp4v mpg4 - `, { - status: 200 - }))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that the update method was called and the request returns an error', () => { - expect.assertions(1) - - for (let i = 0; i < 3; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Response('', { - status: 500, - headers: { - etag: 'v3' - } - }))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that the update method was called and the fetch function throws an exception', () => { - expect.assertions(1) - - for (let i = 0; i < 3; i++) { - fetch.mockReturnValueOnce(Promise.resolve(new Error('Auto-Update Exception'))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) - - test('Given that the update method was called and the fetch function is rejected', () => { - expect.assertions(1) - - for (let i = 0; i < 3; i++) { - fetch.mockReturnValueOnce(Promise.reject(new Error('Update Exception'))) - } - - const mediaType = new MediaTypes(-1) - - return expect(mediaType.update()).resolves.toStrictEqual({}) - }) -}) - -describe('Listeners', () => { - test('Given that automatic periodic updating is enabled, the time for verification has come and there are media types to update', () => { - expect.assertions(1) - - const mediaType = new MediaTypes(100) - - return expect(new Promise((resolve, reject) => { - try { - mediaType.on('update', resolve) - - jest.advanceTimersByTime(mediaType.updateInterval) - } catch (err) { - reject(err) - } - })).resolves.toMatchObject(expect.any(Object)) - }) - - test('Given that automatic periodic updating is disabled and that one wants to try to update the list of media types at some point', async () => { - expect.assertions(1) - - const mediaType = new MediaTypes(-1) - - return expect(new Promise((resolve, reject) => { - try { - mediaType.on('update', resolve) - } catch (err) { - reject(err) - } - })).resolves.toMatchObject(await mediaType.update()) - }) - - test('Given that auto-update was triggered and there was an exception during the update', () => { - expect.assertions(2) - - fs.writeFileSync.mockImplementationOnce(() => { - throw new Error('Auto-Update Exception') - }) - - const mediaType = new MediaTypes(1000) - - return Promise.all([expect(new Promise((resolve, reject) => { - try { - mediaType.on(errorMonitor, resolve) - } catch (err) { - reject(err) - } - })).resolves.toThrow(new Error('Auto-Update Exception')), - expect(new Promise((resolve, reject) => { - try { - mediaType.on('error', resolve) - - jest.advanceTimersByTime(mediaType.updateInterval) - } catch (err) { - reject(err) - } - })).resolves.toThrow(new Error('Auto-Update Exception'))]) - }) -}) - -describe('EventEmitter', () => { - // https://nodejs.org/api/events.html#capture-rejections-of-promises - test('Given that one wants to EventEmitter to capture rejections of promises', async () => { - expect.assertions(1) - - EventEmitter.captureRejections = true - - const mediaType = new MediaTypes(-1) - - const error = new Error('kaboom') - - return expect(new Promise((resolve, reject) => { - try { - mediaType.on('error', resolve) - mediaType.on('update', async () => { - throw error - }) - - mediaType.update() - } catch (err) { - reject(err) - } - })).resolves.toThrow(error) - }) - - // https://nodejs.org/api/events.html#emittersetmaxlistenersn - test('Given that one wants to limit the number of listeners', () => { - const mediaType = new MediaTypes(-1) - - expect(mediaType.getMaxListeners()).toBe(10) - - mediaType.setMaxListeners(1) - - expect(mediaType.getMaxListeners()).toBe(1) - - mediaType.setMaxListeners(Number.MAX_SAFE_INTEGER) - - expect(mediaType.getMaxListeners()).toBe(Number.MAX_SAFE_INTEGER) - - mediaType.setMaxListeners(0) - - expect(mediaType.getMaxListeners()).toBe(0) - - mediaType.setMaxListeners(Infinity) - - expect(mediaType.getMaxListeners()).toBe(Infinity) - }) - - test('Given that one wants to add listeners using the "on" method', async () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.on('update', mockFunc) - mediaType.on('error', mockFunc) // https://nodejs.org/api/events.html#error-events - - expect(mediaType.eventNames()).toContain('update') - expect(mediaType.eventNames()).toContain('error') - expect(mediaType.listenerCount('update')).toBe(1) - expect(mediaType.listenerCount('error')).toBe(1) - expect(mediaType.listeners('update')).toContain(mockFunc) - expect(mediaType.listeners('error')).toContain(mockFunc) - expect(mediaType.rawListeners('update')).toContain(mockFunc) - expect(mediaType.rawListeners('error')).toContain(mockFunc) - }) - - test('Given that one wants to add listeners using the "once" method', async () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.on('update', mockFunc) - mediaType.once('update', mockFunc) - - expect(mediaType.listenerCount('update')).toBe(2) - - await mediaType.update() - - expect(mockFunc.mock.calls.length).toBe(2) - expect(mediaType.listenerCount('update')).toBe(1) - }) - - test('Given that one wants to add listeners using the "addListener" method', async () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.addListener('update', mockFunc) - - expect(mediaType.listenerCount('update')).toBe(1) - }) - - test('Given that one wants to add listeners using the "prependListener" method', async () => { - const mediaType = new MediaTypes(-1) - - const mockFunc1 = jest.fn() - const mockFunc2 = jest.fn() - const mockFunc3 = jest.fn() - - mediaType.on('update', mockFunc1) - mediaType.addListener('update', mockFunc2) - mediaType.prependListener('update', mockFunc3) - - expect(mediaType.listeners('update')).toEqual([mockFunc3, mockFunc1, mockFunc2]) - }) - - test('Given that one wants to add listeners using the "prependOnceListener" method', async () => { - const mediaType = new MediaTypes(-1) - - const mockFunc1 = jest.fn() - const mockFunc2 = jest.fn() - const mockFunc3 = jest.fn() - const mockFunc4 = jest.fn() - - mediaType.on('update', mockFunc1) - mediaType.addListener('update', mockFunc2) - mediaType.prependListener('update', mockFunc3) - mediaType.prependOnceListener('update', mockFunc4) - - expect(mediaType.listeners('update')).toEqual([mockFunc4, mockFunc3, mockFunc1, mockFunc2]) - - await mediaType.update(true) - - expect(mockFunc4).toHaveBeenCalled() - expect(mediaType.listeners('update')).toEqual([mockFunc3, mockFunc1, mockFunc2]) - }) - - test('Given that one wants to remove listeners using the "off" method', () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.on('update', mockFunc) - - expect(mediaType.rawListeners('update')).toContain(mockFunc) - - mediaType.off('update', mockFunc) - - expect(mediaType.rawListeners('update')).not.toContain(mockFunc) - }) - - test('Given that one wants to remove listeners using the "removeListener" method', () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.on('error', mockFunc) - - expect(mediaType.eventNames()).toContain('error') - - mediaType.removeListener('error', mockFunc) - - expect(mediaType.eventNames()).not.toContain('error') - }) - - test('Given that one wants to remove listeners using the "removeAllListeners" method', () => { - const mediaType = new MediaTypes(-1) - - const mockFunc = jest.fn() - - mediaType.on('update', mockFunc) - mediaType.addListener('update', mockFunc) - mediaType.on('error', mockFunc) - mediaType.addListener('error', mockFunc) - - expect(mediaType.listenerCount('update')).toBe(2) - expect(mediaType.listenerCount('error')).toBe(2) - - mediaType.removeAllListeners('update') - - expect(mediaType.listenerCount('update')).toBe(0) - expect(mediaType.listenerCount('error')).toBe(2) - - mediaType.removeAllListeners('error') - - expect(mediaType.listenerCount('error')).toBe(0) - - mediaType.on('update', mockFunc) - mediaType.addListener('update', mockFunc) - mediaType.on('error', mockFunc) - mediaType.addListener('error', mockFunc) - - expect(mediaType.listenerCount('update')).toBe(2) - expect(mediaType.listenerCount('error')).toBe(2) - - mediaType.removeAllListeners() - - expect(mediaType.listenerCount('update')).toBe(0) - expect(mediaType.listenerCount('error')).toBe(0) - }) -}) +'use strict' + +const fs = require('node:fs') +const { EventEmitter, errorMonitor } = require('node:events') +const { MIMEType } = require('node:util') + +jest.useFakeTimers() +jest.spyOn(global, 'setInterval') + +jest.mock('fs') +jest.spyOn(fs, 'readFileSync') +jest.spyOn(fs, 'writeFileSync') + +jest.spyOn(global, 'fetch') + +beforeEach(() => { + fs.writeFileSync.mockImplementation(() => true) + fs.readFileSync.mockImplementation(() => JSON.stringify({ + mediaTypes: { + txt: ['text/plain'] + }, + versions: { + apache: 'apache_v0', + debian: 'debian_v0', + nginx: 'nginx_v0' + } + })) + + fetch.mockImplementation((resource, options) => { + try { + if (typeof resource !== 'string') { + options = resource + resource = resource.url + } + + options.method = options.method || 'GET' + + let body = '' + const status = 200 + let etag = '' + + if (resource.includes('apache')) { + if (options.method.toUpperCase() === 'GET') { + body = ` + audio/mpeg mpga mp2 mp2a mp3 m2a m3a + image/jpeg jpeg jpg jpe + text/plain txt text conf def list log in + video/mp4 mp4 mp4v mpg4 + ` + } + + etag = 'apache_v1' + } else if (resource.includes('debian')) { + if (options.method.toUpperCase() === 'GET') { + body = ` + audio/mpeg mpga mpega mp1 mp2 mp3 + image/jpeg jpeg jpg jpe jfif + text/plain txt text pot brf srt + video/mp4 mp4 mpg4 m4v + ` + } + + etag = 'debian_v1' + } else if (resource.includes('nginx')) { + if (options.method.toUpperCase() === 'GET') { + body = ` + types { + audio/mpeg mp3; + image/jpeg jpeg jpg; + text/plain txt; + video/mp4 mp4; + } + ` + } + + etag = 'nginx_v1' + } + + return Promise.resolve(new Response(body, { + status, + headers: { + etag + } + })) + } catch (err) { + console.error('fetch mock error', err) + } + }) +}) + +afterEach(() => { + setInterval.mockClear() + fetch.mockClear() + fs.writeFileSync.mockClear() + fs.readFileSync.mockClear() +}) + +const MediaTypes = require('../src/MediaTypes.js') + +describe('Constructor', () => { + test('Given that one wants to instantiate the module with an invalid updateInterval argument', () => { + ['', 'xyz', false, null, NaN, Infinity, {}, []].forEach(updateInterval => { + expect(() => new MediaTypes(updateInterval)).toThrow(new TypeError('Invalid updateInterval')) + + const mediaType = new MediaTypes() + + expect(() => { + mediaType.updateInterval = updateInterval + }).toThrow(new TypeError('Invalid updateInterval')) + }) + }) + + test('Given that one wants to enable the automatic periodic update', () => { + setInterval.mockImplementationOnce(jest.fn()); + + [0, Number.MAX_SAFE_INTEGER].forEach(updateInterval => { + expect(() => new MediaTypes(updateInterval)).not.toThrowError() + }) + + expect(setInterval).toHaveBeenCalledTimes(2) + }) + + test('Given you do not want to enable the automatic periodic update', () => { + [Number.MIN_SAFE_INTEGER, -1].forEach(updateInterval => { + expect(() => new MediaTypes(updateInterval)).not.toThrowError() + }) + + expect(setInterval).toHaveBeenCalledTimes(0) + }) +}) + +describe('Attributes', () => { + test('Given that we want to check the default values of module attributes', () => { + const mediaType = new MediaTypes() + + expect(mediaType.list).toMatchObject({ + txt: [new MIMEType('text/plain')] + }) + + expect(mediaType.versions).toMatchObject({ + apache: 'apache_v0', + debian: 'debian_v0', + nginx: 'nginx_v0' + }) + + expect(mediaType.updateInterval).toBe(86400000) + + expect(setInterval).toHaveBeenCalledTimes(1) + expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 86400000) + }) + + test('Given that we want to check the default values of module attributes when the DB.json file is invalid', () => { + fs.readFileSync.mockReturnValueOnce('') + + const mediaType = new MediaTypes(-1) + + expect(mediaType.list).toMatchObject({}) + + expect(mediaType.versions).toMatchObject({ + apache: '', + debian: '', + nginx: '' + }) + }) + + test('Given that we want to update the period of automatic update attempts at runtime', () => { + const mediaType = new MediaTypes(-1) + + expect(setInterval).toHaveBeenCalledTimes(0) + + mediaType.updateInterval = 1000 + + expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 1000) + + mediaType.updateInterval = undefined + + expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 86400000) + + mediaType.updateInterval = -1 + + expect(setInterval).toHaveBeenCalledTimes(2) + }) +}) + +describe('Methods', () => { + describe('get', () => { + test('Given that one wants to get the possible media types from the file by passing an invalid path argument', () => { + const mediaType = new MediaTypes(-1); + + [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { + expect(() => mediaType.get(path)).toThrow(new TypeError('Invalid path')) + }); + + ['fileName', 'fileName.', '.txt', ''].forEach(path => { + expect(() => mediaType.get(path)).toThrow(new SyntaxError('Invalid extension')) + }) + }) + + test('Given that one wants to get the possible media types from the file', () => { + const mediaType = new MediaTypes(-1); + + ['path/to/fileName.txt', 'fileName.txt'].forEach(path => { + expect(mediaType.get(path)).toContainEqual(new MIMEType('text/plain')) + }) + }) + }) + + describe('set', () => { + test('Given that one wants to set a new media type in the list by passing invalid arguments', () => { + const mediaType = new MediaTypes(-1); + + [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { + expect(() => mediaType.set(path, 'application/x-test')).toThrow(new TypeError('Invalid extension')) + }); + + ['fileName.', '.txt', ''].forEach(path => { + expect(() => mediaType.set(path, 'application/x-test')).toThrow(new SyntaxError('Invalid extension')) + }); + + [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(mediaTypes => { + expect(() => mediaType.set('test', mediaTypes)).toThrow(new TypeError('Invalid mediaType')) + }); + + ['application', 'application/', '/x-test', ''].forEach(mediaTypes => { + expect(() => mediaType.set('test', mediaTypes)).toThrow(new SyntaxError('Invalid mediaType')) + }) + + expect(() => mediaType.set(undefined, undefined)).toThrowError(new AggregateError([ + 'Invalid extension', + 'Invalid mediaType' + ], 'Invalid arguments')) + }) + + test('Given that one wants to set a new media type in the module list', () => { + const mediaType = new MediaTypes(-1) + + const extension = 'test' + const contentType = ['application/x-test', 'application/octet-stream'] + + expect(mediaType.set(extension, `${contentType[0]};key=value`)).toBeTruthy() + expect(mediaType.set(extension, contentType[0])).toBeFalsy() + expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(`${contentType[0]};key=value`)) + + expect(mediaType.set(extension, contentType[1])).toBeTruthy() + expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType[1])) + }) + + test('Given that one wants to set an already existing media type into the module list', () => { + const mediaType = new MediaTypes(-1) + + expect(mediaType.set('txt', 'text/plain')).toBeFalsy() + expect(mediaType.set('txt', 'text/plain;key=value')).toBeFalsy() + }) + }) + + describe('delete', () => { + test('Given that one wants to delete a media type by passing an invalid arguments', () => { + const mediaType = new MediaTypes(-1); + + [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(path => { + expect(() => mediaType.delete(path, 'application/x-test')).toThrow(new TypeError('Invalid extension')) + }); + + ['fileName.', '.txt', ''].forEach(path => { + expect(() => mediaType.delete(path, 'application/x-test')).toThrow(new SyntaxError('Invalid extension')) + }); + + [-1, 0, 1, false, null, NaN, Infinity, {}, []].forEach(mediaTypes => { + expect(() => mediaType.delete('test', mediaTypes)).toThrow(new TypeError('Invalid mediaType')) + }); + + ['application', 'application/', '/x-test', ''].forEach(mediaTypes => { + expect(() => mediaType.delete('test', mediaTypes)).toThrow(new SyntaxError('Invalid mediaType')) + }) + + expect(() => mediaType.delete(undefined, undefined)).toThrowError(new AggregateError([ + 'Invalid extension', + 'Invalid mediaType' + ], 'Invalid arguments')) + }) + + test('Given that one wants to delete an existing media type in the module list', () => { + const mediaType = new MediaTypes(-1) + + const extension = 'txt' + const contentType = 'text/plain' + + expect(mediaType.delete(extension, contentType)).toBeTruthy() + expect(extension in mediaType.list).toBeFalsy() + expect(mediaType.get(`fileName.${extension}`)).not.toContainEqual(new MIMEType(contentType)) + }) + + test('Given that one wants to delete a media type that does not exist in the module list', () => { + const mediaType = new MediaTypes(-1) + + expect(mediaType.delete('txt', 'application/octet-stream')).toBeFalsy() + expect(mediaType.delete('test', 'text/plain')).toBeFalsy() + }) + + test('Given that you want to exclude one of the existing media types in the list of modules', () => { + const mediaType = new MediaTypes(-1) + + const extension = 'txt' + + expect(mediaType.set(extension, 'application/octet-stream')).toBeTruthy() + expect(mediaType.delete(extension, 'text/plain')).toBeTruthy() + expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType('application/octet-stream')) + }) + }) + + describe('update', () => { + test('Given that one wants to try to update the list of media types at some point', async () => { + expect.assertions(3) + + const mediaType = new MediaTypes(-1) + + const extension = 'jpg' + const contentType = 'image/jpeg' + + expect(mediaType.get(`fileName.${extension}`)).toHaveLength(0) + + await expect(mediaType.update().then(res => { + return Object.keys(res) + })).resolves.toContain(extension) + expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType)) + }) + + test('Given that one wants to try to force update the list of media types at some point', async () => { + expect.assertions(4) + + const mediaType = new MediaTypes(-1) + + const extension = 'jpg' + const contentType = 'image/jpeg' + + await mediaType.update() + + expect(mediaType.delete(extension, contentType)).toBeTruthy() + + await expect(mediaType.update()).resolves.toStrictEqual({}) + + await expect(mediaType.update(true).then(res => { + return Object.keys(res) + })).resolves.toContain(extension) + + expect(mediaType.get(`fileName.${extension}`)).toContainEqual(new MIMEType(contentType)) + }) + }) +}) + +describe('Fetch', () => { + test('Given that one wants to try to update the list of media types at some point and there was an error processing the data', () => { + expect.assertions(1) + + for (let i = 0; i < 6; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Response('invalid data', { + status: 200, + headers: { + etag: 'v3' + } + }))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that one wants to try to update the list of media types at some point and there was an error processing the media types or the file extension', () => { + expect.assertions(1) + + for (let i = 0; i < 6; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Response(` + audio/mpeg %@? + video/%@? mp4 + `, { + status: 200, + headers: { + etag: 'v2' + } + }))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that the update method was called and the request returns an invalid data type', () => { + expect.assertions(1) + + for (let i = 0; i < 6; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Response(null, { + status: 200, + headers: { + etag: 'v3' + } + }))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that the update method was called and the request does not have an etag header', () => { + expect.assertions(1) + + for (let i = 0; i < 3; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Response(` + video/mp4 mp4 mp4v mpg4 + `, { + status: 200 + }))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that the update method was called and the request returns an error', () => { + expect.assertions(1) + + for (let i = 0; i < 3; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Response('', { + status: 500, + headers: { + etag: 'v3' + } + }))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that the update method was called and the fetch function throws an exception', () => { + expect.assertions(1) + + for (let i = 0; i < 3; i++) { + fetch.mockReturnValueOnce(Promise.resolve(new Error('Auto-Update Exception'))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) + + test('Given that the update method was called and the fetch function is rejected', () => { + expect.assertions(1) + + for (let i = 0; i < 3; i++) { + fetch.mockReturnValueOnce(Promise.reject(new Error('Update Exception'))) + } + + const mediaType = new MediaTypes(-1) + + return expect(mediaType.update()).resolves.toStrictEqual({}) + }) +}) + +describe('Listeners', () => { + test('Given that automatic periodic updating is enabled, the time for verification has come and there are media types to update', () => { + expect.assertions(1) + + const mediaType = new MediaTypes(100) + + return expect(new Promise((resolve, reject) => { + try { + mediaType.on('update', resolve) + + jest.advanceTimersByTime(mediaType.updateInterval) + } catch (err) { + reject(err) + } + })).resolves.toMatchObject(expect.any(Object)) + }) + + test('Given that automatic periodic updating is disabled and that one wants to try to update the list of media types at some point', async () => { + expect.assertions(1) + + const mediaType = new MediaTypes(-1) + + return expect(new Promise((resolve, reject) => { + try { + mediaType.on('update', resolve) + } catch (err) { + reject(err) + } + })).resolves.toMatchObject(await mediaType.update()) + }) + + test('Given that auto-update was triggered and there was an exception during the update', () => { + expect.assertions(2) + + fs.writeFileSync.mockImplementationOnce(() => { + throw new Error('Auto-Update Exception') + }) + + const mediaType = new MediaTypes(1000) + + return Promise.all([expect(new Promise((resolve, reject) => { + try { + mediaType.on(errorMonitor, resolve) + } catch (err) { + reject(err) + } + })).resolves.toThrow(new Error('Auto-Update Exception')), + expect(new Promise((resolve, reject) => { + try { + mediaType.on('error', resolve) + + jest.advanceTimersByTime(mediaType.updateInterval) + } catch (err) { + reject(err) + } + })).resolves.toThrow(new Error('Auto-Update Exception'))]) + }) +}) + +describe('EventEmitter', () => { + // https://nodejs.org/api/events.html#capture-rejections-of-promises + test('Given that one wants to EventEmitter to capture rejections of promises', async () => { + expect.assertions(1) + + EventEmitter.captureRejections = true + + const mediaType = new MediaTypes(-1) + + const error = new Error('kaboom') + + return expect(new Promise((resolve, reject) => { + try { + mediaType.on('error', resolve) + mediaType.on('update', async () => { + throw error + }) + + mediaType.update() + } catch (err) { + reject(err) + } + })).resolves.toThrow(error) + }) + + // https://nodejs.org/api/events.html#emittersetmaxlistenersn + test('Given that one wants to limit the number of listeners', () => { + const mediaType = new MediaTypes(-1) + + expect(mediaType.getMaxListeners()).toBe(10) + + mediaType.setMaxListeners(1) + + expect(mediaType.getMaxListeners()).toBe(1) + + mediaType.setMaxListeners(Number.MAX_SAFE_INTEGER) + + expect(mediaType.getMaxListeners()).toBe(Number.MAX_SAFE_INTEGER) + + mediaType.setMaxListeners(0) + + expect(mediaType.getMaxListeners()).toBe(0) + + mediaType.setMaxListeners(Infinity) + + expect(mediaType.getMaxListeners()).toBe(Infinity) + }) + + test('Given that one wants to add listeners using the "on" method', async () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.on('update', mockFunc) + mediaType.on('error', mockFunc) // https://nodejs.org/api/events.html#error-events + + expect(mediaType.eventNames()).toContain('update') + expect(mediaType.eventNames()).toContain('error') + expect(mediaType.listenerCount('update')).toBe(1) + expect(mediaType.listenerCount('error')).toBe(1) + expect(mediaType.listeners('update')).toContain(mockFunc) + expect(mediaType.listeners('error')).toContain(mockFunc) + expect(mediaType.rawListeners('update')).toContain(mockFunc) + expect(mediaType.rawListeners('error')).toContain(mockFunc) + }) + + test('Given that one wants to add listeners using the "once" method', async () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.on('update', mockFunc) + mediaType.once('update', mockFunc) + + expect(mediaType.listenerCount('update')).toBe(2) + + await mediaType.update() + + expect(mockFunc.mock.calls.length).toBe(2) + expect(mediaType.listenerCount('update')).toBe(1) + }) + + test('Given that one wants to add listeners using the "addListener" method', async () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.addListener('update', mockFunc) + + expect(mediaType.listenerCount('update')).toBe(1) + }) + + test('Given that one wants to add listeners using the "prependListener" method', async () => { + const mediaType = new MediaTypes(-1) + + const mockFunc1 = jest.fn() + const mockFunc2 = jest.fn() + const mockFunc3 = jest.fn() + + mediaType.on('update', mockFunc1) + mediaType.addListener('update', mockFunc2) + mediaType.prependListener('update', mockFunc3) + + expect(mediaType.listeners('update')).toEqual([mockFunc3, mockFunc1, mockFunc2]) + }) + + test('Given that one wants to add listeners using the "prependOnceListener" method', async () => { + const mediaType = new MediaTypes(-1) + + const mockFunc1 = jest.fn() + const mockFunc2 = jest.fn() + const mockFunc3 = jest.fn() + const mockFunc4 = jest.fn() + + mediaType.on('update', mockFunc1) + mediaType.addListener('update', mockFunc2) + mediaType.prependListener('update', mockFunc3) + mediaType.prependOnceListener('update', mockFunc4) + + expect(mediaType.listeners('update')).toEqual([mockFunc4, mockFunc3, mockFunc1, mockFunc2]) + + await mediaType.update(true) + + expect(mockFunc4).toHaveBeenCalled() + expect(mediaType.listeners('update')).toEqual([mockFunc3, mockFunc1, mockFunc2]) + }) + + test('Given that one wants to remove listeners using the "off" method', () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.on('update', mockFunc) + + expect(mediaType.rawListeners('update')).toContain(mockFunc) + + mediaType.off('update', mockFunc) + + expect(mediaType.rawListeners('update')).not.toContain(mockFunc) + }) + + test('Given that one wants to remove listeners using the "removeListener" method', () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.on('error', mockFunc) + + expect(mediaType.eventNames()).toContain('error') + + mediaType.removeListener('error', mockFunc) + + expect(mediaType.eventNames()).not.toContain('error') + }) + + test('Given that one wants to remove listeners using the "removeAllListeners" method', () => { + const mediaType = new MediaTypes(-1) + + const mockFunc = jest.fn() + + mediaType.on('update', mockFunc) + mediaType.addListener('update', mockFunc) + mediaType.on('error', mockFunc) + mediaType.addListener('error', mockFunc) + + expect(mediaType.listenerCount('update')).toBe(2) + expect(mediaType.listenerCount('error')).toBe(2) + + mediaType.removeAllListeners('update') + + expect(mediaType.listenerCount('update')).toBe(0) + expect(mediaType.listenerCount('error')).toBe(2) + + mediaType.removeAllListeners('error') + + expect(mediaType.listenerCount('error')).toBe(0) + + mediaType.on('update', mockFunc) + mediaType.addListener('update', mockFunc) + mediaType.on('error', mockFunc) + mediaType.addListener('error', mockFunc) + + expect(mediaType.listenerCount('update')).toBe(2) + expect(mediaType.listenerCount('error')).toBe(2) + + mediaType.removeAllListeners() + + expect(mediaType.listenerCount('update')).toBe(0) + expect(mediaType.listenerCount('error')).toBe(0) + }) +}) From aff2318bd496ffd336983727d454cf285afdb886 Mon Sep 17 00:00:00 2001 From: = Date: Mon, 19 Aug 2024 13:07:14 -0300 Subject: [PATCH 5/5] chore: update to version 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c291404..3149926 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@jadsonlucena/mediatypes", - "version": "1.0.0", + "version": "1.1.0", "description": "This is a comprehensive compilation of media types that is periodically updated through the following projects: Apache, NGINX and Debian", "main": "./src/MediaTypes.js", "engines": {