From 8a47d48bbabe1770f99d8d013006177cd9f6615f Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 15:52:15 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E6=A0=B9=E5=88=86=E7=B1=BB=E4=BD=BF=E7=94=A8Details?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OperationExplorer.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/OperationExplorer.ts b/src/OperationExplorer.ts index cd76fac..c86194a 100644 --- a/src/OperationExplorer.ts +++ b/src/OperationExplorer.ts @@ -1054,11 +1054,19 @@ export class OperationExplorer { if (curTempGroup.children.length > 0) { let category_sel_list: CategoryPickItem[] = curTempGroup.children.map((group) => { - return { - name: group.name, - label: group.dispName || group.name, - description: group.desc || "" - }; + if (curTempGroup.name == '/') { + return { + name: group.name, + label: group.dispName || group.name, + detail: group.desc || group.dispName || "" + }; + } else { + return { + name: group.name, + label: group.dispName || group.name, + description: group.desc || "" + }; + } }).sort((a, b) => { return a.label.localeCompare(b.label); }); if (prevGroupStack.length > 0) { From 959eba8c0b9c78efca059f7dde2b4e3e05833818 Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 16:34:55 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E6=94=AF=E6=8C=81=20VSCODE=5FPORTABLE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Platform.ts | 7 +++++++ src/ResManager.ts | 8 ++++---- src/SettingManager.ts | 5 +++-- src/ToolchainLicenceActivate.ts | 4 ++-- src/extension.ts | 4 ++-- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Platform.ts b/src/Platform.ts index 4268eac..0e04f33 100644 --- a/src/Platform.ts +++ b/src/Platform.ts @@ -341,3 +341,10 @@ export function getWindowsMainVersion(): number | undefined { } } */ + +export function userhome(): string { + if (process.env['VSCODE_PORTABLE']) + return NodePath.join(process.env['VSCODE_PORTABLE'], 'user-data'); + else + return os.homedir(); +} diff --git a/src/ResManager.ts b/src/ResManager.ts index f4432bd..751d0cb 100644 --- a/src/ResManager.ts +++ b/src/ResManager.ts @@ -25,7 +25,7 @@ import { File } from "../lib/node-utility/File"; import { WorkspaceManager } from "./WorkspaceManager"; import { GlobalEvent } from "./GlobalEvents"; -import { exeSuffix, GetLocalCodePage, osType, getArchId } from "./Platform"; +import { exeSuffix, GetLocalCodePage, osType, getArchId, userhome } from "./Platform"; import { ExceptionToMessage } from "./Message"; import * as ChildProcess from 'child_process'; @@ -337,7 +337,7 @@ export class ResManager extends events.EventEmitter { } getEideHomeFolder(): File { - return File.fromArray([os.homedir(), '.eide']); + return File.fromArray([userhome(), '.eide']); } getBuiltInToolsDir(): File { @@ -345,7 +345,7 @@ export class ResManager extends events.EventEmitter { } getEideToolsInstallDir(): string { - return [os.homedir(), '.eide', 'tools'].join(File.sep); + return [userhome(), '.eide', 'tools'].join(File.sep); } GetLogDir(): File { @@ -682,7 +682,7 @@ export class ResManager extends events.EventEmitter { this.dirMap.set(key, dir); } - const eideHome = File.fromArray([os.homedir(), '.eide']); + const eideHome = File.fromArray([userhome(), '.eide']); eideHome.CreateDir(); // create if not existed for (const key in eideBinariesDirs) { const dir = File.fromArray([eideHome.path, eideBinariesDirs[key]]); diff --git a/src/SettingManager.ts b/src/SettingManager.ts index e911efc..3d717c5 100644 --- a/src/SettingManager.ts +++ b/src/SettingManager.ts @@ -32,7 +32,7 @@ import { File } from '../lib/node-utility/File'; import { GlobalEvent } from './GlobalEvents'; import { ExceptionToMessage } from './Message'; import * as Utility from './utility'; -import { find, exeSuffix } from './Platform'; +import { find, exeSuffix, userhome } from './Platform'; import { WorkspaceManager } from './WorkspaceManager'; import { ToolchainName } from './ToolchainManager'; @@ -89,7 +89,8 @@ export class SettingManager { /* add env */ this.eideEnv.set('${eideRoot}', context.extensionPath); - this.eideEnv.set('${userRoot}', os.homedir()); + this.eideEnv.set('${userRoot}', userhome()); + this.eideEnv.set('${userHome}', userhome()); try { this.refreshMDKStatus(); diff --git a/src/ToolchainLicenceActivate.ts b/src/ToolchainLicenceActivate.ts index 7a7fa22..1492f7e 100644 --- a/src/ToolchainLicenceActivate.ts +++ b/src/ToolchainLicenceActivate.ts @@ -63,7 +63,7 @@ function requestAndActivate_COSMIC_STM8(toolchain: IToolchian) { name: '输入用户名(系统的当前账户名)', attrs: { 'singleLine': true }, data: { - value: path.basename(os.homedir()) + value: process.env.USERNAME || 'administrator' } }, 'hostId': { @@ -115,7 +115,7 @@ function requestAndActivate_COSMIC_STM8(toolchain: IToolchian) { name: 'User Name For This PC', attrs: { 'singleLine': true }, data: { - value: path.basename(os.homedir()) + value: process.env.USERNAME || 'administrator' } }, 'hostId': { diff --git a/src/extension.ts b/src/extension.ts index facccec..caf1481 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -755,7 +755,7 @@ function exportEnvToSysPath(context?: vscode.ExtensionContext) { ]; // - const eideToolsFolder = new File(File.normalize(`${os.homedir()}/.eide/tools`)); + const eideToolsFolder = new File(File.normalize(`${platform.userhome()}/.eide/tools`)); if (!eideToolsFolder.IsDir()) { try { new File(eideToolsFolder.path).CreateDir(true); @@ -1369,7 +1369,7 @@ class EideTerminalProvider implements vscode.TerminalProfileProvider { private cwd(allowUseLocActiveFolder?: boolean): string { - let cwd = os.homedir(); + let cwd = platform.userhome(); const workspace = WorkspaceManager.getInstance().getWorkspaceRoot(); if (workspace && workspace.IsDir()) { From 2c3269a33a8ea61bb5a765383b4ca924538f8814 Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 22:05:17 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E4=BC=98=E5=8C=96=20keil=20User=20Comman?= =?UTF-8?q?d=20=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../darwin/unify_builder/arm64/axf2elf.dll | Bin 8704 -> 9728 bytes .../darwin/unify_builder/x86_64/axf2elf.dll | Bin 8704 -> 9728 bytes res/tools/linux/unify_builder/axf2elf.dll | Bin 8704 -> 9728 bytes res/tools/win32/unify_builder/axf2elf.dll | Bin 19456 -> 22528 bytes src/CodeBuilder.ts | 9 ++- src/EIDEProjectExplorer.ts | 20 +++++- src/KeilXmlParser.ts | 61 ++++++++++++++---- 7 files changed, 74 insertions(+), 16 deletions(-) diff --git a/res/tools/darwin/unify_builder/arm64/axf2elf.dll b/res/tools/darwin/unify_builder/arm64/axf2elf.dll index b7d3149d807844ac31c57af69c7612b90dacc8ac..b5464c9dba22763c14ecd2ffdce1a5abfd0d75bb 100644 GIT binary patch literal 9728 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 delta 3892 zcmb7GYiv}<6+Uxc`}FnBz4ku*#;|7bt{t1V!8R}RY622*+(H2v2T`yJTyvMIAz)vJ zD6}*rfNmA3G$O%mMAN7(gh)^Ynh^Dw{AfrORcR=#k=g`;(xi_>NmJ-Ivs>3j6;fBa z-<G!n}Rr#lD+xBl$W}9!6_3Z3OD7T%^K6DLYqIP)k9k}rd4O_74DgdwZ|ga6e2+= z$;JvoI2$MkQEn#J+9o$q-}Iw~yIf2!K_a&wQozj%-Gpvw8ATKg(3(xIB{J&R8o1_u zRrr;{FCPQgdYNs+?Lgf2f_5x!^SLL)9>h35W?S5HzXorI!!ehL+d()EA(+N3#}b^H zu!C@VZp>-0=!C5lPPWKkbK5Bs-kTtlLvZ4NMC+P_9VjvhCqW(zN#S2sB$FVEoO|&< zMcd_E&xf&|G%p)8kR{E_2ZIuGx)y#Tpb z67nZHpB9vX!~YEujz9dOpD46glgwlr*#RENZJ&@J!4riA_dpo8;ALEQsxZBYyRGcD z@H+Pj#>6_O8a~CDx91x~J8GOK*4iAu*yH^R?z?&GR+$~j*I<$zMuu7;Byk%EVo%d<>n!(s6ed3?u18vD%Sz(p@K+RB$9+Av=F0GZk^{2oF0MAyi~j zRz+r-5G#4a?S(t9l-I+Kz|aUo(-l-vaWjtI5LMv(FIN>4@(8lIkH{R!z(_jfJ}Tvk z&`7#+e7>mbi^x&;A_f`0aNFEpNZKlqSCN+#*hbEgn4t$0dRcjTlZxvq0G>^$~2d_?%PdIq}#^ly<@^mTB05%x;nHUBm z;t-9S23`Xr@8PWqJF|roD7+0uUNUn8MebyQa;7eWp`q~(9t8(K z5>9t~7wIPt5yfzYXX2aOz1!{IxfOpEh`LbA2Ux)5o^G0na}Y-{d3n!DER4FK1pOW1 zsUEI9Aqe3tr3W5wLITMl0Q$5b<8Dh10ma`-{94t*XwWL`~-XYMV7bSI2U#*6z#JHiEbT1vCFeTL++I-q213jd!#N+Il5J+r#^{$* z3fkLBH(tt9>4Ijd>zPik6t%_rdKRG3qIMQGv|vNQ^HFFKsx4~UwDqinI;D0Xxli*9 zDy0<#V{*S{vr_uzm{HiCoM8Lj1luX8J&YaM3C|1TY%%&-(Uzk=?9ZQzS{pR{4}rzL zgZ*Yy<6%=3C<>|c7W$CUmsu>P&}N(fqmT6ePric@1A3>?Tc+Mx^d zE-0U2_=zrXwI=XW$fI-)K~KnOAIg-Y^dd1fO3z4~hh(EPRpJx6kl() zI!J$@L-Yx)V*&OF9gtYBMIkRim-WfW{j|^166{%Q(jg>U&1%u%DQX5zk~mFbtHd^7 zGp^V+piR4gm2?C+nZ5~zmkAQbez8m;3ttX~@M`Ag>Pg{}k6nQ_T zcS#!-Z8QFN70qLeBhoA>9VT*xH)A3fK@;CT_jCV)`&dR-+tK|RJ{{k3x>88l-r3gM zJG-}q+E?}U@9ez4sB~`b?d|H%4{Yz-vt)Z;K0n7#@fLp#PxvmM<)7vE`lfaG%yZV= z%>So7&+jU$40rGDb9d*z(7$_||BbRn72$lVe2f27`3gT6cO%W4cRMaMZ^qz16QAP0 z8?W76TwWq+*-vjUtv|r zk{DBz>KYPM4XI)9#88$lYY7H4t1K9_mWmW#5vx+f0G+by+?B Vr#0XAM{2kGFV}XRG3)-S{~Ip9Q8fSn diff --git a/res/tools/darwin/unify_builder/x86_64/axf2elf.dll b/res/tools/darwin/unify_builder/x86_64/axf2elf.dll index fc4ef003354c3553e355a6b5a5e72fc52c9852e5..030f57e3b53cc222f5288d68a65ff3f2283612c3 100644 GIT binary patch literal 9728 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
iC6fzi4&i@x0_kC@RpPyCkwef5;Z2qM`wny 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 T`L;h?yUl;Ow(G1}_c#6DJ!4R$ diff --git a/res/tools/linux/unify_builder/axf2elf.dll b/res/tools/linux/unify_builder/axf2elf.dll index fc4ef003354c3553e355a6b5a5e72fc52c9852e5..030f57e3b53cc222f5288d68a65ff3f2283612c3 100644 GIT binary patch literal 9728 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
iC6fzi4&i@x0_kC@RpPyCkwef5;Z2qM`wny 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 T`L;h?yUl;Ow(G1}_c#6DJ!4R$ diff --git a/res/tools/win32/unify_builder/axf2elf.dll b/res/tools/win32/unify_builder/axf2elf.dll index 010ce54f44f9f7e6a6e4357e77a17f50c560085b..e5ad0a0539f6c3753425d4e22f3a015b379058a7 100644 GIT binary patch literal 22528 zcmeHv30PCt*7iP`2$3NPoG=75Oo|8yDlHBuDA=H&2+mqDLd0kwGzk{!gaf_B6ffY| z8A5HHu5F!J3JcR5;Nq^Z4|JSG<%|X5P2a#R=Z^i883f_vDIM3oR zRNHM8c2lLH%v4ona~kHD4fdKUgQd!lJHEtFX)8CU1_r9)Mb$-lgp}VaC5wN{Xz^OR zL}Cp+Bs~Z*QUhKtN;RYFIa*L!BKS?K)PMG?2L_-1q-6GT-$=3<3rJ8x4Bonr)5V|^ z#4_cC%#0%BdiR!ULXM(dt0M$W|MoAF7l!9mkm@woI#KC28i=|`$1aWo6#E$nnVnj0 za+*+^r2?7_2mp)$bo*r!(wS;ETWw{6uLM3bU6Z>BfrQ*hFGq-xB4c(ZtW-7@%EdHes=Wi8b>-wg)d&9b^>6BM#9NttKgHh zn`bxcPbKAOwZgwdBoRjn(5Hg+pd+ism}q1w$UJBx!~n=<`p1iW8a1ll>mRKN5%_0z zgz*%izYVr)5Cdm7?+E(e9Je&0fL}Mu-x`Ik74ak%vEK!a!XZ3R_vsSqf;_t4GyQNs@!C?RhhG5 z>&%YW5yJyjfvRC9hr?Vs$69BAiYiA|Y>mBYh@)(txzglFskD^YZ4TR9XG)o^a)`-M znYu7N)=+7xvdlF*oRhoTgEE7`r!2qRT;;Sl>u&NXHI4dJWvYY&g>^aA)mBTH$qA2B zP1V)0{RIt9dyT`HUp3eEFZweemi2>ehqS479u!fgmtW?y=C`7>LaM;8UOjlHOyk?_-um9fVpL|IQZ-Pru=Uk=Vr3lC7N zq{YK#)yh}Tr5Qt`IYYn|NlUhFi0rv}`YS727Oy8E<`sc&_-6%w8@MFyrJvi5uiMu; z{qR%wzPGb^?wNq7c75&e6IU{FR)t4>7JqQ!V-JVA7oHAZwBX6A-zpD16<&-439lOZ z=`XFtcdri|ymWun%suD&e(v5GbL5r#S5Ihpr~m52Au)H|dF>6yeJ!>Cl9v9{&pW~v zP5wvKiSHkM{i7eRo?RsUR8P`Mg4Q}ed4AjzuWWo;|GwqD9kxK?JoUi(6W@)U`_+cf zv90fpJ!Q1#>9r*D)BM95zPZ|S{kyiSk4S%OCfS#pCO)$<{(;kl3s%iPF{pmLKe_+u zkM7>|@&3!N%)9&J+asneEF8ULZOb9$ViP&Hr1YV`{ru6M>q9p$7PoiJz38#BUew6>VF*g?Z=F3Z_5v4>#H|& z=dOn3zmPZUScRU(`C-D={P(_I z*0x|?&~K*<<-hFv(S5o2!rz-_9ZFSaNYJPH_oP1S-}29XWl;SGHx{~c*SpQnCtjK) zdv;KL+On0Oyl>dmV<~rTj8wU2w|3g$ou3Y$e8o^2NnY}p=P24=$QpNFOlhRy>7@h9 zHw<{jJYA7#AyXm^9~?M%%y8Fl=1)oW=H)9qzqD?7X~S0;C)YN-GDv-C=@*;It6qL) zQ1xG48Agh(`vttc?56|V`ze+6Nx>vw_Nh~+PwW1+diU<#StPs9#tHk^JdtcT={fP- zwXaiR@pJbd`ATwp_4RM|&HPCf=6dt?;9W7F{u=VF=hyX5oy~aGapQ}-zJK-LkG4v) z|L-p}WzRX%{>X7xL&M<(Q`VHV+<$0nam3GNZu#_g7ujpKzV!E=&mBlFEi3ETkzPBl zzMjmVu=~Q)!nYppJ?VM<*!Cn93Ei~rar=jL4HHwJYJS7a7w>y|WYWe-#;+bc_o#%V zKR2~9WzYEot2ez-de_k3pW3p8OjnWX6|;6nA3b_)a;_|1+B#z6>5Ch0JmleT+kc*rG`mA8(&^Mq%Zc92(>>^kGypi3wzVQ-KLNd#Yo9)4jUNV4<2u@bT+>;hi$$Q zDg{v$E7Ih%W!2Ji;(oDwuSA)>J?MsE^)re@>=A2L4U%McJhVx*a{KAUa=#1LZ?Bs2 z)QlfK%(yM5v1Y@lH+PTvcGvySeldM)@^bTt2O0_oJU{bFz|^mwtN8S@NsA_5>$G{k zoSam9+qdtoaGa=o^!*nC7kBj7v+dP68BbUJL)9{AXXM%Ezx$puf4XYn!OGg;#dB{v zu)4J2#MbcJZ#>H{S@-^8<+}@0`~G#^U+(C$neM}X=5qu#W!Xq!d}L&bG~$*qpIo_h z^v0g|k_hytF`#>BgrAJ~6-(1-WGJustp~GXihujiG4cD#SLW?pqpH8SWFwW6ONe{` zH=D}Tk9=bgy~gcs?^2A8+-k40;ryn>f1A^ZyD~C;+~wz&+`DqzmZBRUb{ri%obJ~| z5|E(F3|g*Tp}e4!DFf7@$B(yR{y*u9GYMxEEqf>7?1>ag8|cNLX?Yy53G_*nN&N`f z1v(97VG4MlY1s}~r6*)N_1{A`pD1H!>?LwQ}KJ@^T6kEP6!N(`% zOv#y?Gbv}{l*uK=(nj9+lya(O33 zCn-8-T-ljcbHUiSx$}2Oxh}hwDzkq*!Z`=*qZb_>J}?h@U4d1&`!u@zg}R6LI}mD5xZ&ka2hys|g7UUsa&<$POx zA=$?c_Ocg)&HLC_R7~3Fn)$XmXXR^>oT1l)|2iF^!2q6R!_D;YUtx)1Z1qdCNez5_ z+vs|~z$Le#xzI%}sC}FUf#c!J;Z%X^T)yjshu_WubA`qY%>}OXee^2M!)Ifd1+LC~ z*XaUR;0)H&-$*<37dm+OrA*5u55I)jKkDJ*S<^`vEN~sc4omrs4Vl#4ro#ID$S#tz z7wZ)2HB6LOK`{bLn=xOM2g>MLPy2XynIQB%T=5BgOO-+>-}SzS|AJZO-|a4NL=^Dw zyIJeWf~LH^`L5$0z6Rm`K9!>6g@UIq_Yi?QrffvezsbwOiO8d{NoKe7m6(vKB1MK8f~gu%%B z8kDO#ojC(Lp}H||mxq5dn+{Hiz|wvY)q+7qRVY_=<~CMt4_@^-mSfJ#K!nzFU6s3F z-~qva(ZwvHXE>C5cr7y#yvhb~(SMjJXJ(Au?Cca>+J+LTkjT6~3N?3$4Hi++3@CyT zDuC7n;Cgs7?c}1;V@2svC|6$Lg4e`C{7Bv|>TFl94A!f^uU9mv{ZxdGRPAH`9d|~Q z^EFENWMDpdEnf!H!(X6H%<>sf`z4}|<39E_P*jIo;2==7Y=*TS{y7?i#)fdH_3$gG z)y9TPbi-<5fuZIQcjk?kAC8F;D4IN#I-=Yu;I(#hF@;#cMt35 z^!1wq$~SeBeC&ass8{`boR(n%rx7K#wDajuo8vl+QEtD0#l8y*XjMIU9{vdH(|wG* zs4bATG&U%GV|-UsdK@JkV}{@>6~GwZ2G_$M1s2BmtSJ2iN;byph$-Czo1*^)mWO`} znEKHVY6Sj^jK3SWsmLR+wlmf?V7PLH9dJ#e!8=*g6xzgsng_}koJ=2E2Z{zK$j5OG z6*yLum|CW_X$)rhq=&x`Qr@g^HPC&>)7i+%To>DWa)+{7@L%h%c{~G=vuDwx!1XOV z1V5)CYg#`Wy#)6;GB{BN@P{Ry+_)ZWWekZVNTxMevO_&Qfw^`(wDLE zg0P1#73?Cbjp!u=wFeqKyd1b0L#2G9E9)#939dfAM-L=UmahrC^Wb5!aUeViOZ2LR z2Ja_k;DNc2q(dZRH5sL zIQj#E;9hvi26{paz>|Vtf$NYs@(qIE#x6l&0+tGb9==fY+7)<#4VhjQo%c#(F-5a> zoIH;+BJe#?swr=akuEklhJ))ZqpNU>hp&fBGY$&j%5DIyx$<7Spb+*R%>VbdRh zk|o~;2sBeWvq}$9?Z*+)$@ETa<;65(lQq7`*l0dk(3oeyEtS#rn}`2|_58rYzXZa2 zvAP9XgspyD23-_JV2ntx=|Y7bJu6WPLVcM~oLA_5I5t`o8txO4F`?h_$1~wzD?okV zDXM6sPv#t2J^Y7088upbho96ZwvUND?-RQW$|v?EDuP?BOzeK2*#7Qf&-la^F|itk zpM(wUM=X>jG%`(Nu?Hc&>3Fbz_?nHbzj^pGf=5DF0+<2?!}D&I+t*$0;y|kDYhc04 zu6{yY#x(ryYyXnTpY_#uvHG*X?9KwQ-pM#m0~=jqm0(N*Ndr59u?h|B8i2;3vF2k} z-p5FfG`d)3-Fc{6a&)b<$|9rd4X9CxY9!s&`e-M905LYwp ziA;PxWl^V%t^(?LG3xh?&K6U{J5F!u9WdSg3^;$7Ej(Zdr9=}hspzshK_3c2fnk=f zn~x9`(ELKaVoWr@a0q+&X;2aTLMQqq9y)%jym!8@=CgHeBxmp3YJIpQB{@4`Ng|>py}f zJhx&3qW-7FUXP>n>ZkXnrFdj>1~Z+7WV@Fp9Delb<~1yyC@cWVJ0bFEn?L99`<{bDTwHC&&Fwa|VM=n*#c z!5;n80uj*9PasqpP59Ih{BaN-4A`Qu=b+P4T$IUD{FuFda{COb2XRvc`Xyq2P}$93 z^u$AXqOej(!5QHF;2>q1nzkRBnSx)46Ioz6_ChJP?br_tHpgs?3Fa>-$kfZS5}Bh%0{qA^az1nh((- z0sV$ThK716;x9``3G2NS`-$v#1y+Z`(HEu?=o57ry~gjC5~K+fRoeQY3C<*=7*c_2 zhO%b--Hb15_I-DG`JJOL|@$r;r2%uCqm=rPKacQ z?@mmGo)DO{VP{Z<^z0X*?U{)ENEOmc6J+n8!|Nri%OEsh7gnX5g%>@4*C8=PFQP<) znjl!S;}7((8V(Z?cDhbsO6g9}cQ+SoKS31-+i##?+J%K_mr5yHtM;y3wZO;1$N8c< z%lEeTrxJdNI44y?+gYNKC29C1OdE$ulaQ&>wkuKumeI1_OJ$5E`2*|NIPco+jdp4+H;D;(J8NLI!hs_8qQ!Jv2Z26!k_ywHR1j_tvV`zmP5dmk3 zGKp}oL4SMq5)F;XXlb&aBylXHk|c=*v^akJo?fcNLXgsArO?z*A+#lqV*>Z|>ha&S z2mLqg0sm!tPf6lv36j~5bYswc)UKCx zNg!cmi4!23SWG+6Gb`!1*G8%XM}VT9F3Th@Z-CTZi2iKtBOE^26*5~1RTBr4qLr{{ z3oP42uzFM3e?Ge+M2}GG-*}2Ytv8vTzXo3^_1uU^=oG7T7yP zwFpbxQoI9&@=I)SaV1VW-h0C-jQ32jlFH#s+@uort`tq7xH~50=b{`If_FwSDRCpM zwmDQ7KUBFX(GsOUqDp?_1`-_0@S4!IipgL;Ah8Kfcf6sA@QXZ5C2Oa$aDlzYL}@}E zk_x4QtdN|SE6BSHf6VQX2NQpER}eo*U#Wt;D2bOTNEyQhhO-!UGkl4ots#DUr7H56 z-+b)C#bguu{wg~!R}qtRzG5g@1_u>nv}`Z59ptF3(S*{^$rk%*Ngu@?a3)GAXQ8wf zlG`AuBFkm-6)JKY!yCEz3I*8=D+&_GQ5?b5A_S}DPx&c`g7r0`RZBjCHZ3WWQ5+`U zBag&H?v+N8TshVGuwuTVCwX1^hP)@Xx;JRxgtx|o9Kc%vPfDYt>8wWI?R8>?(h;{F zL>i+e>mZ#@REV_{OCARUY5^n|cm=U@>3DC`&S}VJvKrvm7=D-GX{3%*kRjY+;4c&u z$0(L@x8c3am7ET?{sNBGZw+@8c|}MIc}LoctW;xfq_t<{n>Yy>Cf0cABb=1PW5=Xz zGo+i*H&d*2DmHUUGF7ZCmTktBcCA<|LM?!75^D?Po4Fvem(}hKZ$tdmq*G`Me?mSA zql;pB>}`u@wHC20?WVR&R$Gad0SY^j+gfza_{WLE8$c3!GAhP10ua4%wyHK$erOiU-LVlIiyt@N?1* z@)_v?odM)|vK1B&fZj*m^?ME+DiZ*iU0DBAX8>6&@5H-_$$lqEJUAbb^W>`HGqlpa zQN-c5fm|jucjzd70-wq!Gx=oJdX?Jt! zj^KVKj{!dhj)_IGg>amMq;vJ~DxG_g;WYU$E}ffzd^Iu67T`O$e2(~y=O%EkNhfhT zkdqGBt>I>3W%!c?SV_^O8aRRB6oxYx&H_%wO5X__LS6*clMjL8$QQuPY`5!^}9->~6>OG|GrO(Vk!O_r+R zbHvK~vYX54>(u7i>7>BoaH6m{rdX;5 z4xsv>+E!j;H4i7F#^>gh=8hkiM@s7OYIJ34{&<0xS6oag%+AtW`X$G(;bq?TQ8ug9 zTt;7dcBI~6t}@##WhAG(oZ$U!b5;3ho4wNH#4FasR9;@1XSdtzR6()1%xqaGa>v&= zt81J$v8kcFT8ncOzPn*o3-QvlsRAED&=K1lra4wK8I4!AyS%7!*idz#Bju07TjYek zO70aXuE7iEsE#yOSgM#G#b#4^fu%}h2~PNUg7>U>3SJsFGpfpbH!H2Q*C{IU z$#)c*oMrQfxz=1{a?T@nn4J^NmDP;4nyV_nDsh_ZPAnFX-n?*{?IwJ9BbZMuw_35l z*!N@1$9yat(H%0;ZmEQk@g+r8lao#Yp{tmh@#ZO2Y^!nR)jG{p^aG7s2a;a}YqshV zvwfij9}lF8!Rt1qz8>be;#wqk*ljh{U2Bu%)s~s7>GYGkO?G?`gh;YsQ7zPW`c*;~ z1K%4^*-{H_WvYBZ%c&|KWi^}ZNO?P?Z1%bmbF~R6W3!K%2euH}ku?@;xfvhyU=Lu0 zpbr^XHV<`d2KG{K1)qZ0>q_TgIhwnex#qd18Y{l^z}Ty82%WiH&}_t4Dp*XU`+kwP z5IVdKYzwg2%@v3Me6?9^b}T`*JqVRzGeiWE$`)f|q$9!T@%@XvoNW%oOt&gJOLDweXYAEx2lb6E3I|Jm#~UnjkIo1jr zcDQ+!KDmkbrZ2VFTv1~++4E|v?Z^z|g0HzNsT>4S=GyTruN*9=Sgr_UNlh6|D&i1J z@jU4kkW?}6SUNCKOb6UXz^j}Nq%6)UK^G3Ha@*YwI*&NR$oM()F=33V%!N@kc02kDG*SR^bp6u43(YA1Y|e$q1`S*+oCchsL`+F#BcsIGcoogXz2%_6uDD~ z3jN;g)+i){L%*`C#wab&LL(*k-iPGi?za$MV&>udyNRHukv_M0K;y_Q`meRqIjF(7 zXgsI~U7i})NXju1`mH0KuQ_6rZk3~vr8?*=X5pWKqyb_G7B6~t&FMcM4X$F)+m1Vy zTfGhAeJ@6Y^*qccsThzm3p!IVFYm6K=DSx*qMf{wWob{3-i zGg+1)DKwWW(M~<8Vv=R2bD5NxuvnR9A+KnD(cG(M(f{-OG~n)m%FZBnA{Pz#29@@jgPb0X ztombi(KaeWO1fLPH5cNbqnzpMgKtu2BK!N{p0`goThuRVH4)lq+f3N!(&?({%C#Zj z(zTI@Osa)!8X`Iv(MZ8qskeRcFt`MtVN*}1AougJ0`lk%^M~&rh|IuoN-3QH5E>1w z1`YEw1mULy@Y=zgHXukM(FRabU~96X(WuP{iU!i=@R~fxKmcV>5bjzeK|u;4rLr;t zjvtXxItVv6K@x=&#)9Mq38z#lh$I?(g^Abg$JtfXfe7cp{$-nssbNAMF+{5x6nr!a5zZj$3^3@ zBhl6`r?w~!Il0nLrVUjpwfS=RQ{O`4BT)cp>(}GUT~1T~2!_S^VLU;a`gZi!)Ne+E z1O?P+Cj}|Dk0@QHc~3P&hCjKWheV;2Dzq6A1)g{YNfprmty+N?z-5q=U{)E;0;lvN zQp|yxI>;e%uo0!5rsUWMmxSO3k|Pr(x+yrq$JublCtll4oM*==$w5xSrW~)ahNq6p zn>Y%WL%4EH7B7jj7UF9SC#nL)!yX9Fdf{y12 z_;q_0OMUSIyriw-k8)|7P>M{kpmJWmP~y*(!q0baTqu6nTxfQh%IR&eFG^m~Z89=V z{>-?nQH0!R{f@gTjoEs8YfEg@boY+9X;B029I!ghKh=HNa8G0Jd$z{kbH4XI$Kvlf zlQ8{i!sD6lj=n#-qkr5z@6-zm+`FUOcFk(rVQYJ>Z}Z`#w$~PHKU~?`xwQ4wWvwTt zetvRM>&d{@Q$ejKt4@7Z+x*3t*5>O8V_u1${&rlz-($WSH{kDmvi_Q2dCXvauJ=#+ z;sf!EKaK78L)?(z}{WBP5K zdTQggJ`r0BTknaD*jL-S_My1N`}8|o-;7n;lVAal!eF;Mzw7Q=--@9O2ojYlN z_^VI6Xy~^;u(jiY!SaTs_>IUphB2{WuQq$)?pf`xHAKb)Yzuck`CxC(t$DTWT5O@= zD%pC6dh5oV+1qx8%br+tY-024Jx0haZ?pz0>OOvdv7&BkAgFz*Zwyt`J-p~+Q}dAn z?Q@!sc#0HtP1ft?<|mUMygRMww90SohnK3;sGQ%SeMh4G4jpK>r(F-ONo%scwJ`13 zJ)vHmSYR{^|UnaI`jE3 zOY>{{jx4q`uRGo{zpi=xjeoTGO*F9pWU8Z*S!0DYm49ZtA}QSv*Ybf2wq!41$X?=2aTQ< z+W-D=uU_}SAjhRp_K9}_Rn40pIk*}8 z4|@&uMKBpFG`kD^8QSa_t!G6F)OnA z;YAlaI82qB!&F69H(7^8R$rU1Pij7l$pJ=-WZL!M&5~(N)(3%~Dcss7J^k>x&C=7q zfBm@ZiJ2chp~(O3*EYXt$E@4N>Z`9US)i{zR{3CXzmkV{oZYYp#ld~=_ov0DYj+Pg z9IQ`pa6Hb7qg5j>pIkoKy@|@62dziAl0_?v~87c77>Y zZ0p?Ew{zqC&ema_t+U$J_HWx<+t!ia)|S-P)}yU$L8m+A)wZPr9>VvpA?_zfr2Q5@ z))ha*(06;DdPb#8F+;v{{Sdj|42A!UALf)aHt&7UT+(=HY>@x##yVth!~=_(fip>+ z#a}%#u6$0u#IPaZi8vyW=c;pM?V&Pmq9If+36#DpX_AnnNPl(fz}B^~>k|e~Z`~31 zI?izUU|CB?_H1j;?B)`~;K6dgF}iU@Z%HPTL6R7pX*p_KyX31|Z*w=ttnZUNwC%7V zxv=@GnB>yt^@%%MA|(c0F|K9gF&H)(GEHKTR7#)K)shXIH0E}DET zh`@(Fa20SJ-~mW1ct-}H1oQv|0W^S6 zKo}qr5DhQ@;sCt?eF4dU{(u313;_M5L0=Z=5r7=PC_oaZs;7&j(zy!eGpokez0k8lT04f2C080SN0LuX@0S$n^02%=;fCm8WfUSTXfPH{h z0IvgVfV%(=Kn>t-KplYo@V}iQC4k9*X@ENcCV&|*53m4G1)wiE*8u7O%K!}k7oZj3 z25bR52iOgG32+!df2UBs3pfq<0PrE;W58L!Il$+DF9BZz&I2w2egOOk_yuqUa1HP~ zfJ2;R06%~V5C~8MLI65I1Rx5~3lIxP03-tX0n(%?Qe1ee@#rQQZwFG0=UWrF;d}re z#}DKK`CvYk*YdaV*?b7E<3o9#AHWCkYQC7Cz~3G!36+M*LW4rpcon*kAIFd73-}^F zj2{$IM4v?s4;RbcDDg~cc(Pcgi)Er%riFwial=E>QrIIXvD60W)MIq&e4RQ%r;gRB zC+gHCI`v4MdX!FmhfbZTQyX>a5jyo~ojO;i&eN%f=+wh?>R~!{mQFobryin(bRzJ9a5{uzD!4t@QL`uaEZ^*`vB%k|5{^vi4X%P;F!4A!s6)32!0uXseiqC>yp zn100x{fZm{mLWyReJrZ!YJ*eD2xfv6r~M_(yF7hp;6k5C^i;gjD=xs zKy-9abToaa^q=4V?g-2l|9_@!^=?ul?KhOYK+MiCgJbyTjcE zccMGZo$1bY8{I|jsqWeCdG2a=t-IcRpS#(;$=&AO;@+WS*iO(y_f`Z%1dx M|Lzd~Z}#s00L_?0od5s; literal 19456 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 dhip`Az4ok diff --git a/src/CodeBuilder.ts b/src/CodeBuilder.ts index 0f06840..d74110d 100644 --- a/src/CodeBuilder.ts +++ b/src/CodeBuilder.ts @@ -1014,8 +1014,11 @@ export class ARMCodeBuilder extends CodeBuilder { const extraCommands: any[] = []; - // convert elf - if (['AC5', 'AC6'].includes(config.toolchain) && settingManager.IsConvertAxf2Elf()) { + // convert axf to elf + // why we need this ? see: https://stackoverflow.com/questions/49508277/warning-loadable-section-my-section-outside-of-elf-segments + if (['AC5', 'AC6'].includes(config.toolchain) && + settingManager.IsConvertAxf2Elf() && + options['linker']['$disableOutputTask'] != true) { const tool_root_folder = toolchain.getToolchainDir().path; const ouput_path = `\${outDir}${File.sep}${config.name}`; @@ -1023,7 +1026,7 @@ export class ARMCodeBuilder extends CodeBuilder { extraCommands.push({ name: 'axf to elf', - command: `axf2elf -d "${tool_root_folder}" -b "${ouput_path}.bin" -i "${ouput_path}.axf" -o "${ouput_path}.elf" > "${axf2elf_log}"` + command: `axf2elf -d "${tool_root_folder}" -i "${ouput_path}.axf" -o "${ouput_path}.elf" > "${axf2elf_log}"` }); } diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index 8839d3b..27ff460 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -29,6 +29,7 @@ import * as NodePath from 'path'; import * as child_process from 'child_process'; import * as os from 'os'; import * as yaml from 'yaml'; +import * as ini from 'ini'; import { File } from '../lib/node-utility/File'; import { ResManager } from './ResManager'; @@ -3047,9 +3048,15 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco const replaceUserTaskTmpVar = (t: any) => { const reKeilPrjDir = baseInfo.rootFolder.ToRelativeLocalPath(keilPrjFile.dir) || keilPrjFile.dir; - t.command = t.command.replace('$', `cd .\\${reKeilPrjDir}`); + if (reKeilPrjDir === '.') + t.command = t.command.replace('$ && ', ''); + else + t.command = t.command.replace('$', `cd .\\${reKeilPrjDir}`); } + // project env + const prjenv: any = {}; + // init all targets for (const keilTarget of targets) { @@ -3130,6 +3137,11 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco } } + // env + if (keilTarget.env && Object.keys(keilTarget.env).length > 0) { + prjenv[`${keilTarget.name}`] = copyObject(keilTarget.env); + } + projectInfo.targets[keilTarget.name] = newTarget; } @@ -3149,6 +3161,12 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco // save all config baseInfo.prjConfig.Save(); + // save env + if (Object.keys(prjenv).length > 0) { + File.fromArray([baseInfo.rootFolder.path, AbstractProject.EIDE_DIR, 'env.ini']) + .Write(ini.stringify(prjenv)); + } + // switch project const selection = await vscode.window.showInformationMessage( view_str$operation$import_done, continue_text, cancel_text); diff --git a/src/KeilXmlParser.ts b/src/KeilXmlParser.ts index c27fbfa..b962918 100644 --- a/src/KeilXmlParser.ts +++ b/src/KeilXmlParser.ts @@ -53,6 +53,7 @@ export interface KeilParserResult { fileGroups: FileGroup[]; compileOption: CompileOption; rte_deps?: KeilRteDependence[]; + env?: { [key: string]: string }; } export interface ICompileOptionsGroup { @@ -667,7 +668,7 @@ class ARMParser extends KeilParser { super(f); } - private getOption(targetOptionObj: any, option: KeilARMOption) { + private getOption(targetOptionObj: any, option: KeilARMOption, env: { [n: string]: string }) { const armAdsObj = targetOptionObj.TargetArmAds; try { @@ -711,16 +712,35 @@ class ARMParser extends KeilParser { if (eideOption.afterBuildTasks == undefined) eideOption.afterBuildTasks = []; - // (%|#|@|\!|\$) + // -------------------------------------------- + // KEIL Key Code: % # @ ! $ + // % File name with extension (PROJECT1.UVPROJ) + // # File name with extension and complete path specification (C:\MYPROJECT\PROJECT1.UVPROJ) + // @ File name without extension or path specification (PROJECT1) + // $ Path name of a file. Path names get extended with a backslash. For example, $P could generate C:\MYPROJECT\. + // ! File name with extension and relative path specification to the current folder (.\SRC\TEST.C) + // -------------------------------------------- + // KEIL File Code: H L K J P + // H: Application HEX file name (PROJECT1.H86). + // L: Linker output file. Typically the executable file used for debugging (PROJECT1). + // K: Absolute root folder of the development toolchain, regardless of the Key Code used. (#K -> D:\Keil\) + // $J: Absolute compiler system include folder. Compiler base folders are listed in the field + // P: Current project file name. + const OUTNAME_KEY = env['KEIL_OUTPUT_NAME'] ? 'KEIL_OUTPUT_NAME' : 'ProjectName'; const replaceMdkEnv = (cmd: string) => cmd + .replace(/%H\b/g, '${KEIL_OUTPUT_NAME}.hex') + .replace(/%L\b/g, '${KEIL_OUTPUT_NAME}.axf') + .replace(/%P\b/g, this._file.name) + .replace(/#H\b/g, '${OutDir}\\${KEIL_OUTPUT_NAME}.hex') + .replace(/#L\b/g, '${OutDir}\\${KEIL_OUTPUT_NAME}.axf') + .replace(/#P\b/g, this._file.path) + .replace(/@(H|L)\b/g, '${KEIL_OUTPUT_NAME}') .replace(/\$(H|L)\b/g, '${OutDir}\\') - .replace(/@(H|L)\b/g, '${ProjectName}') - .replace(/#H\b/g, '${ExecutableName}.hex') - .replace(/%H\b/g, '${ProjectName}.hex') - .replace(/\!H\b/g, '.\\${OutDirBase}\\${ProjectName}.hex') - .replace(/#L\b/g, '${ExecutableName}.axf') - .replace(/%L\b/g, '${ProjectName}.axf') - .replace(/\!L\b/g, '.\\${OutDirBase}\\${ProjectName}.axf'); + .replace(/\$J\b/g, '${ToolchainRoot}\\include\\') + .replace(/\$K\b/g, '${ToolchainRoot}\\') + .replace(/\!H\b/g, '.\\${OutDirBase}\\${KEIL_OUTPUT_NAME}.hex') + .replace(/\!L\b/g, '.\\${OutDirBase}\\${KEIL_OUTPUT_NAME}.axf') + .replace(/\bKEIL_OUTPUT_NAME\b/g, OUTNAME_KEY); // BeforeMake const beforeMake = commonOption.BeforeMake; @@ -741,6 +761,15 @@ class ARMParser extends KeilParser { // AfterMake const afterMake = commonOption.AfterMake; if (afterMake) { + // Copy files to compate Keil User Commands + if (env['KEIL_OUTPUT_NAME']) { + eideOption.afterBuildTasks.push({ + "name": 'Copy linker output for Keil User Commands', + "command": '$ && copy ".\\${OutDirBase}\\${ProjectName}.axf" ".\\${OutDirBase}\\${KEIL_OUTPUT_NAME}.axf"', + "disable": false, + "abortAfterFailed": true + }); + } for (let idx = 1; idx < 3; idx++) { let cmd = afterMake[`UserProg${idx}Name`]; if (cmd) { @@ -752,6 +781,10 @@ class ARMParser extends KeilParser { }); } } + // Make eide Don't output hex/bin + if (eideOption.linker == undefined) + eideOption.linker = {}; + eideOption.linker['$disableOutputTask'] = true; } } @@ -927,9 +960,7 @@ class ARMParser extends KeilParser { const obj = >Object.create(null); obj.name = target.TargetName; - obj.type = this.TYPE_TAG; - obj.device = target.TargetOption.TargetCommonOption.Device; obj.incList = this.SplitPathSeparator( @@ -938,9 +969,15 @@ class ARMParser extends KeilParser { obj.defineList = this.parseMacroString(target.TargetOption.TargetArmAds.Cads.VariousControls.Define); + obj.env = {}; + const keil_out_name = target.TargetOption.TargetCommonOption.OutputName; + if (keil_out_name && keil_out_name != this._file.noSuffixName) { + obj.env['KEIL_OUTPUT_NAME'] = keil_out_name; + } + obj.compileOption = Object.create(null); obj.compileOption.toolchain = target.uAC6 === '1' ? 'AC6' : 'AC5'; - this.getOption(target.TargetOption, obj.compileOption); + this.getOption(target.TargetOption, obj.compileOption, obj.env); const groups = target.Groups; obj.fileGroups = []; From 4c68a6ab6b8a2394e6b817c6087acf7539ec6057 Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 23:07:21 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96sdcc?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=9A=84=E5=A4=84=E7=90=86=E5=99=A8=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/sdcc.verify.json | 44 +++---------------------------------- src/ToolchainManager.ts | 48 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/lang/sdcc.verify.json b/lang/sdcc.verify.json index 12bf0ff..cae57f1 100644 --- a/lang/sdcc.verify.json +++ b/lang/sdcc.verify.json @@ -144,48 +144,10 @@ "device": { "markdownDescription": "Processor Type", "description.zh-cn": "芯片类型", - "type": "string", "default": "mcs51", - "enum": [ - "mcs51", - "ds390", - "ds400", - "hc08", - "s08", - "z80", - "z180", - "r2k", - "r3ka", - "gbz80", - "tlcs90", - "ez80_z80", - "stm8", - "pic14", - "pic16", - "pdk13", - "pdk14", - "pdk15" - ], - "enumDescriptions": [ - "MCS51", - "DS80C390", - "DS80C400", - "HC08", - "S08", - "Z80", - "Z180", - "Rabbit-2K/3K", - "Rabbit-3KA", - "GameBoy-Z80", - "TLCS-90", - "eZ80_Z80", - "STM8", - "PIC-14", - "PIC-16", - "Padauk-13", - "Padauk-14", - "Padauk-15" - ] + "size": "small", + "type": "string", + "auto_complete_ctx": "gcc.compiler.archs" }, "optimize-type": { "type": "string", diff --git a/src/ToolchainManager.ts b/src/ToolchainManager.ts index 5679ef5..10e5ed0 100644 --- a/src/ToolchainManager.ts +++ b/src/ToolchainManager.ts @@ -610,10 +610,58 @@ class SDCC implements IToolchian { "ez80_z80": "z80" }; + private readonly defaultProcessors = [ + "mcs51", + "z80", + "z180", + "stm8" + ]; + newInstance(): IToolchian { return new SDCC(); } + private __lastActivedTargetInfo: ToolchainTargetSupportedInfo | undefined; + getGccCompilerTargetInfo(): ToolchainTargetSupportedInfo | undefined { + + if (this.__lastActivedTargetInfo) + return this.__lastActivedTargetInfo; + + try { + // SDCC : mcs51/z80/z180/r2k/r2ka/r3ka/sm83/tlcs90/ez80_z80/z80n/ds390/pic16/pic14/TININative/ds400\ + // /hc08/s08/stm8/pdk13/pdk14/pdk15/mos6502 4.2.0 #13081 (MINGW64) + const sdccPath = NodePath.join(this.getToolchainDir().path, 'bin', `sdcc${platform.exeSuffix()}`); + const lines = child_process.execFileSync(sdccPath, ['-v']).toString().trim().split(/\r\n|\n/); + + let cpus: string[] = []; + for (const _line of lines) { + const m = /^SDCC\s*:\s*([^\s]+)\s+/.exec(_line.trim()); + if (m && m.length > 1) { + cpus = m[1].trim().split('/'); + break; + } + } + + this.__lastActivedTargetInfo = { + machine: 'sdcc', + archs: cpus, + abis: [], + rv_codeModels: [] + }; + + return this.__lastActivedTargetInfo; + + } catch (error) { + GlobalEvent.emit('msg', ExceptionToMessage(error, 'Hidden')); + return { + machine: 'sdcc', + archs: this.defaultProcessors, + abis: [], + rv_codeModels: [] + }; + } + } + getGccFamilyCompilerPathForCpptools(): string | undefined { //const gcc = File.fromArray([this.getToolchainDir().path, 'bin', `sdcc${platform.exeSuffix()}`]); //return gcc.path; From 9678495e1fb2ddbff46d9b732484062a59c09476 Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 23:07:40 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E7=A6=81=E7=94=A8=20GnuStm8Sdcc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ToolchainManager.ts | 362 ++++++++++++++++++++-------------------- 1 file changed, 181 insertions(+), 181 deletions(-) diff --git a/src/ToolchainManager.ts b/src/ToolchainManager.ts index 10e5ed0..964f965 100644 --- a/src/ToolchainManager.ts +++ b/src/ToolchainManager.ts @@ -887,213 +887,213 @@ class SDCC implements IToolchian { } } -class GnuStm8Sdcc implements IToolchian { +// class GnuStm8Sdcc implements IToolchian { - readonly version = 1; +// readonly version = 1; - readonly settingName: string = 'EIDE.STM8.GNU-SDCC.InstallDirectory'; +// readonly settingName: string = 'EIDE.STM8.GNU-SDCC.InstallDirectory'; - readonly categoryName: string = 'SDCC'; +// readonly categoryName: string = 'SDCC'; - readonly name: ToolchainName = 'GNU_SDCC_STM8'; +// readonly name: ToolchainName = 'GNU_SDCC_STM8'; - readonly modelName: string = 'stm8.gnu-sdcc.model.json'; +// readonly modelName: string = 'stm8.gnu-sdcc.model.json'; - readonly configName: string = 'options.stm8.gnu-sdcc.json'; +// readonly configName: string = 'options.stm8.gnu-sdcc.json'; - readonly verifyFileName: string = 'stm8.gnu-sdcc.verify.json'; +// readonly verifyFileName: string = 'stm8.gnu-sdcc.verify.json'; - readonly elfSuffix = '.elf'; +// readonly elfSuffix = '.elf'; - newInstance(): IToolchian { - return new SDCC(); - } +// newInstance(): IToolchian { +// return new SDCC(); +// } - getGccFamilyCompilerPathForCpptools(): string | undefined { - //const gcc = File.fromArray([this.getToolchainDir().path, 'bin', `sdcc${platform.exeSuffix()}`]); - //return gcc.path; - return undefined; - } +// getGccFamilyCompilerPathForCpptools(): string | undefined { +// //const gcc = File.fromArray([this.getToolchainDir().path, 'bin', `sdcc${platform.exeSuffix()}`]); +// //return gcc.path; +// return undefined; +// } - updateCppIntellisenceCfg(builderOpts: ICompileOptions, cppToolsConfig: CppConfigItem): void { +// updateCppIntellisenceCfg(builderOpts: ICompileOptions, cppToolsConfig: CppConfigItem): void { - cppToolsConfig.cStandard = 'c99'; - cppToolsConfig.cppStandard = 'c++98'; +// cppToolsConfig.cStandard = 'c99'; +// cppToolsConfig.cppStandard = 'c++98'; - if (builderOpts["c/cpp-compiler"]) { - cppToolsConfig.cStandard = builderOpts["c/cpp-compiler"]['language-c'] || 'c99'; - } - } +// if (builderOpts["c/cpp-compiler"]) { +// cppToolsConfig.cStandard = builderOpts["c/cpp-compiler"]['language-c'] || 'c99'; +// } +// } - preHandleOptions(prjInfo: IProjectInfo, options: ICompileOptions): void { +// preHandleOptions(prjInfo: IProjectInfo, options: ICompileOptions): void { - if (options['linker'] == undefined) { - options['linker'] = {}; - } +// if (options['linker'] == undefined) { +// options['linker'] = {}; +// } - // convert output lib commmand - if (options['linker']['output-format'] === 'lib') { - options['linker']['$use'] = 'linker-lib'; - } +// // convert output lib commmand +// if (options['linker']['output-format'] === 'lib') { +// options['linker']['$use'] = 'linker-lib'; +// } - // get code model - let codeModel: string = 'medium'; - if (options["c/cpp-compiler"]) { - const conf = options["c/cpp-compiler"]; - if (conf['misc-controls']) { // get model type - codeModel = this.parseCodeModel(conf['misc-controls']) || codeModel; - } - } +// // get code model +// let codeModel: string = 'medium'; +// if (options["c/cpp-compiler"]) { +// const conf = options["c/cpp-compiler"]; +// if (conf['misc-controls']) { // get model type +// codeModel = this.parseCodeModel(conf['misc-controls']) || codeModel; +// } +// } - /* append def linker params */ - { - const ldFlags: string[] = []; - const libFlags: string[] = []; +// /* append def linker params */ +// { +// const ldFlags: string[] = []; +// const libFlags: string[] = []; - if (options['linker']['misc-controls']) { - ldFlags.push(options['linker']['misc-controls']); - } +// if (options['linker']['misc-controls']) { +// ldFlags.push(options['linker']['misc-controls']); +// } - if (options['linker']['LIB_FLAGS']) { - libFlags.push(options['linker']['LIB_FLAGS']); - } +// if (options['linker']['LIB_FLAGS']) { +// libFlags.push(options['linker']['LIB_FLAGS']); +// } - // append default lib search path - const libDir = File.ToUnixPath(this.getToolchainDir().path + File.sep + `lib-${codeModel}`); - ldFlags.push(`-L"${libDir}"`); +// // append default lib search path +// const libDir = File.ToUnixPath(this.getToolchainDir().path + File.sep + `lib-${codeModel}`); +// ldFlags.push(`-L"${libDir}"`); - // append default system lib - libFlags.push('-lstm8'); +// // append default system lib +// libFlags.push('-lstm8'); - // set flags - options['linker']['misc-controls'] = ldFlags.join(' '); - options['linker']['LIB_FLAGS'] = libFlags.join(' '); - } - } +// // set flags +// options['linker']['misc-controls'] = ldFlags.join(' '); +// options['linker']['LIB_FLAGS'] = libFlags.join(' '); +// } +// } - private parseCodeModel(conf: string): string | undefined { - const mType = /\s*--model-(\w+)\s*/i.exec(conf); - if (mType && mType.length > 1) { - return mType[1]; - } - } - - getInternalDefines(builderCfg: T, builderOpts: ICompileOptions): string[] { - - const mList: string[] = [ - '__SDCC', - `__SDCC_VERSION_MAJOR=3`, - `__SDCC_VERSION_MINOR=9`, - `__SDCC_VERSION_PATCH=3` - ]; - - // code model - let devName: string = 'stm8'; - let codeModel: string = 'medium'; - - // fix device name: stm8 - mList.push(`__SDCC_${devName}`); - - // global config - if (builderOpts["c/cpp-compiler"]) { - - const conf = builderOpts["c/cpp-compiler"]; +// private parseCodeModel(conf: string): string | undefined { +// const mType = /\s*--model-(\w+)\s*/i.exec(conf); +// if (mType && mType.length > 1) { +// return mType[1]; +// } +// } - // get model type - if (conf['misc-controls']) { - codeModel = this.parseCodeModel(conf['misc-controls']) || codeModel; - } - - // is use stack auto - if (conf['stack-auto']) { - mList.push(`__SDCC_STACK_AUTO`); - } +// getInternalDefines(builderCfg: T, builderOpts: ICompileOptions): string[] { - // is use xstack - if (conf['use-external-stack']) { - mList.push(`__SDCC_USE_XSTACK`); - } - - // int long reent - if (conf['int-long-reent']) { - mList.push(`__SDCC_INT_LONG_REENT`); - } - - // float reent - if (conf['float-reent']) { - mList.push(`__SDCC_FLOAT_REENT`); - } - } - - if (codeModel) { // set code model - mList.push(`__SDCC_MODEL_${codeModel.toUpperCase()}`); - } - - return mList; - } - - getCustomDefines(): string[] | undefined { - return undefined; - } - - getToolchainDir(): File { - return SettingManager.GetInstance().getGnuSdccStm8Dir(); - } - - getSystemIncludeList(builderOpts: ICompileOptions): string[] { - - let toolSearchLoc: string = this.getToolchainDir().path; - if (platform.osType() != 'win32') { - toolSearchLoc = `${toolSearchLoc}/share/sdcc`; - } - - const incList: string[] = [File.fromArray([toolSearchLoc, 'include']).path]; - - // get device name include - const devInc = File.fromArray([toolSearchLoc, 'include', 'stm8']); - if (devInc.IsDir()) { - incList.push(devInc.path); - } - - return incList; - } - - getForceIncludeHeaders(): string[] | undefined { - return [ - ResManager.GetInstance().getC51ForceIncludeHeaders().path - ]; - } - - getDefaultIncludeList(): string[] { - return []; - } - - getLibDirs(): string[] { - return []; - } - - getDefaultConfig(): ICompileOptions { - return { - version: this.version, - beforeBuildTasks: [], - afterBuildTasks: [], - global: { - "out-debug-info": false - }, - 'c/cpp-compiler': { - "language-c": "c99", - "optimize-type": "speed", - "one-elf-section-per-function": true, - "one-elf-section-per-data": false - }, - 'asm-compiler': {}, - linker: { - "output-format": "elf", - "remove-unused-sections": true - } - }; - } -} +// const mList: string[] = [ +// '__SDCC', +// `__SDCC_VERSION_MAJOR=3`, +// `__SDCC_VERSION_MINOR=9`, +// `__SDCC_VERSION_PATCH=3` +// ]; + +// // code model +// let devName: string = 'stm8'; +// let codeModel: string = 'medium'; + +// // fix device name: stm8 +// mList.push(`__SDCC_${devName}`); + +// // global config +// if (builderOpts["c/cpp-compiler"]) { + +// const conf = builderOpts["c/cpp-compiler"]; + +// // get model type +// if (conf['misc-controls']) { +// codeModel = this.parseCodeModel(conf['misc-controls']) || codeModel; +// } + +// // is use stack auto +// if (conf['stack-auto']) { +// mList.push(`__SDCC_STACK_AUTO`); +// } + +// // is use xstack +// if (conf['use-external-stack']) { +// mList.push(`__SDCC_USE_XSTACK`); +// } + +// // int long reent +// if (conf['int-long-reent']) { +// mList.push(`__SDCC_INT_LONG_REENT`); +// } + +// // float reent +// if (conf['float-reent']) { +// mList.push(`__SDCC_FLOAT_REENT`); +// } +// } + +// if (codeModel) { // set code model +// mList.push(`__SDCC_MODEL_${codeModel.toUpperCase()}`); +// } + +// return mList; +// } + +// getCustomDefines(): string[] | undefined { +// return undefined; +// } + +// getToolchainDir(): File { +// return SettingManager.GetInstance().getGnuSdccStm8Dir(); +// } + +// getSystemIncludeList(builderOpts: ICompileOptions): string[] { + +// let toolSearchLoc: string = this.getToolchainDir().path; +// if (platform.osType() != 'win32') { +// toolSearchLoc = `${toolSearchLoc}/share/sdcc`; +// } + +// const incList: string[] = [File.fromArray([toolSearchLoc, 'include']).path]; + +// // get device name include +// const devInc = File.fromArray([toolSearchLoc, 'include', 'stm8']); +// if (devInc.IsDir()) { +// incList.push(devInc.path); +// } + +// return incList; +// } + +// getForceIncludeHeaders(): string[] | undefined { +// return [ +// ResManager.GetInstance().getC51ForceIncludeHeaders().path +// ]; +// } + +// getDefaultIncludeList(): string[] { +// return []; +// } + +// getLibDirs(): string[] { +// return []; +// } + +// getDefaultConfig(): ICompileOptions { +// return { +// version: this.version, +// beforeBuildTasks: [], +// afterBuildTasks: [], +// global: { +// "out-debug-info": false +// }, +// 'c/cpp-compiler': { +// "language-c": "c99", +// "optimize-type": "speed", +// "one-elf-section-per-function": true, +// "one-elf-section-per-data": false +// }, +// 'asm-compiler': {}, +// linker: { +// "output-format": "elf", +// "remove-unused-sections": true +// } +// }; +// } +// } class COSMIC_STM8 implements IToolchian { From 43c9fad9354e8e4fdaea82edd5871ff308d89642 Mon Sep 17 00:00:00 2001 From: null Date: Sat, 8 Jun 2024 23:38:32 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=BA=20pyOCD=20?= =?UTF-8?q?=E9=99=84=E5=8A=A0=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/EIDEProjectModules.ts | 9 ++++++++- src/HexUploader.ts | 13 ++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/EIDEProjectModules.ts b/src/EIDEProjectModules.ts index 4343b35..713d0e5 100644 --- a/src/EIDEProjectModules.ts +++ b/src/EIDEProjectModules.ts @@ -2392,6 +2392,8 @@ class PyOCDUploadModel extends UploadConfigModel { return view_str$flasher$baseAddr; case 'config': return view_str$flasher$options; + case 'otherCmds': + return view_str$flasher$other_cmds; default: return super.GetKeyDescription(key); } @@ -2425,6 +2427,8 @@ class PyOCDUploadModel extends UploadConfigModel { return 'Property_16x.svg'; case 'config': return 'ConfigurationEditor_16x.svg'; + case 'otherCmds': + return 'ImmediateWindow_16x.svg'; default: return super.getKeyIcon(key); } @@ -2440,6 +2444,8 @@ class PyOCDUploadModel extends UploadConfigModel { return 'INPUT'; case 'config': return 'EVENT'; + case 'otherCmds': + return 'INPUT'; default: return super.GetKeyType(key); } @@ -2547,7 +2553,8 @@ class PyOCDUploadModel extends UploadConfigModel { targetName: 'cortex_m', baseAddr: '0x08000000', speed: '4M', - config: `${AbstractProject.EIDE_DIR}/pyocd.yaml` + config: `${AbstractProject.EIDE_DIR}/pyocd.yaml`, + otherCmds: '' }; } } diff --git a/src/HexUploader.ts b/src/HexUploader.ts index a578390..c5fb873 100644 --- a/src/HexUploader.ts +++ b/src/HexUploader.ts @@ -862,6 +862,8 @@ export interface PyOCDFlashOptions extends UploadOption { speed?: string; baseAddr?: string; + + otherCmds: string; } class PyOCDUploader extends HexUploader { @@ -928,9 +930,14 @@ class PyOCDUploader extends HexUploader { protected _launch(commands: string[]): void { - const commandLine: string = 'pyocd ' + commands.map((line) => { - return CmdLineHandler.quoteString(line, '"'); - }).join(' '); + let commandLine: string = 'pyocd ' + + commands.map((line) => CmdLineHandler.quoteString(line, '"')).join(' '); + + // add user cmds + const options = this.getUploadOptions(); + if (options.otherCmds) { + commandLine = commandLine.replace(/^pyocd\s+(\w+)/, `pyocd $1 ` + options.otherCmds); + } // run runShellCommand(this.toolType, commandLine); From 6208852bf3eb6916dde7c51a06877287d00a92b1 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 9 Jun 2024 01:16:22 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=81=97=E6=BC=8F?= =?UTF-8?q?=E7=9A=84=20package-lock=20=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - package-lock.json | 4495 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4495 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 3dcc9cf..6eb2c17 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ pack.js test.js *.js.map *.cpuprofile -package-lock.json # private /src/Telemetry diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b6d2c6c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4495 @@ +{ + "name": "eide", + "version": "3.10.10", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/runtime": { + "version": "7.20.7", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@types/braces": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", + "dev": true + }, + "@types/ftp": { + "version": "0.3.33", + "resolved": "https://registry.npmmirror.com/@types/ftp/-/ftp-0.3.33.tgz", + "integrity": "sha512-L7wFlX3t9GsGgNS0oxLt6zbAZZGgsdptMmciL4cdxHmbL3Hz4Lysh8YqAR34eHsJ1uacJITcZBBDl5XpQlxPpQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/iconv-lite": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/@types/iconv-lite/-/iconv-lite-0.0.1.tgz", + "integrity": "sha512-SsRBQxGw7/2/NxYJfBdiUx5a7Ms/voaUhOO9u2y9FTeTNBO1PXohzE4i3JfD8q2Te42HLTn5pyZtDf8j1bPKgQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ini": { + "version": "1.3.31", + "resolved": "https://registry.npmmirror.com/@types/ini/-/ini-1.3.31.tgz", + "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", + "dev": true + }, + "@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, + "requires": { + "@types/braces": "*" + } + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "@types/node-7z": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@types/node-7z/-/node-7z-2.1.4.tgz", + "integrity": "sha512-SayS5Cld62m7wRsKtBJheNBYRTVmKK+wTmW16EmYf2FuRTSGHKPx/p2OqAVjeKSQss9qcCKDGG9yv7D+Pi+iNg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/vscode": { + "version": "1.67.0", + "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.67.0.tgz", + "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", + "dev": true + }, + "@types/x2js": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@types/x2js/-/x2js-3.1.0.tgz", + "integrity": "sha512-AWxcyKIXjJD/JXqrYwS6rOg30gTUpXEu98vr1MHEzAp4gLP6bYuhwVNoY+4d/z+wNYsGd4spX6DnjQCPCSwfJA==", + "dev": true, + "requires": { + "x2js": "*" + } + }, + "@types/xml2js": { + "version": "0.4.11", + "resolved": "https://registry.npmmirror.com/@types/xml2js/-/xml2js-0.4.11.tgz", + "integrity": "sha512-JdigeAKmCyoJUiQljjr7tQG3if9NkqGUgwEUqBvV0N7LM4HyQk7UXCnusRa1lnvXAEYJ8mw8GtZWioagNztOwA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonc": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/jsonc/-/jsonc-2.0.0.tgz", + "integrity": "sha512-B281bLCT2TRMQa+AQUQY5AGcqSOXBOKaYGP4wDzoA/+QswUfN8sODektbPEs9Baq7LGKun5jQbNFpzwGuVYKhw==", + "requires": { + "fast-safe-stringify": "^2.0.6", + "graceful-fs": "^4.1.15", + "mkdirp": "^0.5.1", + "parse-json": "^4.0.0", + "strip-bom": "^4.0.0", + "strip-json-comments": "^3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" + }, + "lodash.defaultto": { + "version": "4.14.0", + "resolved": "https://registry.npmmirror.com/lodash.defaultto/-/lodash.defaultto-4.14.0.tgz", + "integrity": "sha512-G6tizqH6rg4P5j32Wy4Z3ZIip7OfG8YWWlPFzUFGcYStH1Ld0l1tWs6NevEQNEDnO1M3NZYjuHuraaFSN5WqeQ==" + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" + }, + "lodash.negate": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/lodash.negate/-/lodash.negate-3.0.2.tgz", + "integrity": "sha512-JGJYYVslKYC0tRMm/7igfdHulCjoXjoganRNWM8AgS+RXfOvFnPkOveDhPI65F9aAypCX9QEEQoBqWf7Q6uAeA==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mathjs": { + "version": "11.5.0", + "resolved": "https://registry.npmmirror.com/mathjs/-/mathjs-11.5.0.tgz", + "integrity": "sha512-vJ/+SqWtxjW6/aeDRt8xL3TlOVKqwN15BIyTGVqGbIWuiqgY4SxZ0yLuna82YH9CB757iFP7uJ4m3KvVBX7Qcg==", + "requires": { + "@babel/runtime": "^7.20.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^4.2.0", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-7z": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/node-7z/-/node-7z-3.0.0.tgz", + "integrity": "sha512-KIznWSxIkOYO/vOgKQfJEaXd7rgoFYKZbaurainCEdMhYc7V7mRHX+qdf2HgbpQFcdJL/Q6/XOPrDLoBeTfuZA==", + "requires": { + "debug": "^4.3.2", + "lodash.defaultsdeep": "^4.6.1", + "lodash.defaultto": "^4.14.0", + "lodash.flattendeep": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.negate": "^3.0.2", + "normalize-path": "^3.0.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-loader": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ts-loader/-/ts-loader-6.2.2.tgz", + "integrity": "sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmmirror.com/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vscode-cpptools": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/vscode-cpptools/-/vscode-cpptools-5.0.0.tgz", + "integrity": "sha512-TPG6/o9+DisDj2U4AiTOihtfjEzBb/4CErYaB1JIWFMZTQE7zlNTdsgCs+l4xIS2Y34us0RMBIC6On1mBuwxww==" + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "x2js": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/x2js/-/x2js-3.4.1.tgz", + "integrity": "sha512-RCMEmHNsyeyzF5NyGHbmCCZU9N8uMiz9FluAj3CpfVREHpgm3JB9Wr/dEWdPqGHmK3lRd2fm0ccOWtuJ2YUowQ==", + "requires": { + "xmldom": "^0.5.0" + } + }, + "xml-formatter": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/xml-formatter/-/xml-formatter-2.6.1.tgz", + "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", + "requires": { + "xml-parser-xo": "^3.2.0" + } + }, + "xml-parser-xo": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", + "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/xmldom/-/xmldom-0.5.0.tgz", + "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} From 5e79a62a1b823e2c65452028fbfb50b8476f9aa2 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 10 Jun 2024 00:07:49 +0800 Subject: [PATCH 08/21] optimize 'showSimpleConfigUI' --- src/WebPanelManager.ts | 73 ++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/src/WebPanelManager.ts b/src/WebPanelManager.ts index 15a7c8c..8d9a22d 100644 --- a/src/WebPanelManager.ts +++ b/src/WebPanelManager.ts @@ -52,7 +52,9 @@ export class WebPanelManager { return _instance; } - showSimpleConfigUI(cfg: SimpleUIConfig, onSubmit: (newCfg: SimpleUIConfig) => void, onMsg?: (msg: string) => void): Promise { + showSimpleConfigUI(cfg: SimpleUIConfig, + onSubmit: (newCfg: SimpleUIConfig, thisPanel: vscode.WebviewPanel) => void, + onMsg?: (msg: string, thisPanel: vscode.WebviewPanel) => void): vscode.WebviewPanel { const resManager = ResManager.GetInstance(); @@ -69,50 +71,45 @@ export class WebPanelManager { panel.iconPath = vscode.Uri.file(resManager.GetIconByName(cfg.iconName || 'Property_16x.svg').path); - return new Promise((resolve_) => { - - panel.onDidDispose(() => { - resolve_(); - }); + panel.webview.onDidReceiveMessage((_data: any) => { - panel.webview.onDidReceiveMessage((_data: any) => { - - /* it's a message */ - if (typeof _data == 'string') { - switch (_data) { - case 'eide.simple-cfg-ui.launched': /* webview launched */ - panel.webview.postMessage(cfg); - break; - default: - if (onMsg) onMsg(_data); - break; - } + /* it's a message */ + if (typeof _data == 'string') { + switch (_data) { + case 'eide.simple-cfg-ui.launched': /* webview launched */ + panel.webview.postMessage(cfg); + break; + default: + if (onMsg) onMsg(_data, panel); + break; } + } - /* it's obj data */ - else { - try { - onSubmit(_data); - panel.webview.postMessage('eide.simple-cfg-ui.status.done'); - } catch (error) { - GlobalEvent.emit('error', error); - panel.webview.postMessage('eide.simple-cfg-ui.status.fail'); - } + /* it's obj data */ + else { + try { + onSubmit(_data, panel); + panel.webview.postMessage('eide.simple-cfg-ui.status.done'); + } catch (error) { + GlobalEvent.emit('error', error); + panel.webview.postMessage('eide.simple-cfg-ui.status.fail'); } - }); + } + }); - const htmlFolder = File.fromArray([resManager.GetHTMLDir().path, 'simple_config_ui']); - const htmlFile = File.fromArray([htmlFolder.path, 'index.html']); + const htmlFolder = File.fromArray([resManager.GetHTMLDir().path, 'simple_config_ui']); + const htmlFile = File.fromArray([htmlFolder.path, 'index.html']); + + panel.webview.html = htmlFile.Read() + .replace(/"[\w\-\.\/]+?\.(?:css|js)"/ig, (str) => { + const fileName = str.substr(1, str.length - 2); // remove '"' + const absPath = File.normalize(htmlFolder.path + NodePath.sep + fileName); + return `"${panel.webview.asWebviewUri(vscode.Uri.file(absPath)).toString()}"`; + }); - panel.webview.html = htmlFile.Read() - .replace(/"[\w\-\.\/]+?\.(?:css|js)"/ig, (str) => { - const fileName = str.substr(1, str.length - 2); // remove '"' - const absPath = File.normalize(htmlFolder.path + NodePath.sep + fileName); - return `"${panel.webview.asWebviewUri(vscode.Uri.file(absPath)).toString()}"`; - }); + panel.reveal(); - panel.reveal(); - }); + return panel; } showStorageLayoutView(project: AbstractProject): void { From 31cb41d9d21fba295591c7be43bed7dd06a358b2 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 10 Jun 2024 17:59:03 +0800 Subject: [PATCH 09/21] =?UTF-8?q?=E6=8B=86=E5=88=86=E6=9F=90=E4=BA=9B?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E5=87=BD=E6=95=B0=E4=B8=BAAPI=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E7=9A=84=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E5=BC=83=E7=94=A8=E6=97=A7=E7=9A=84=E7=9A=84=20DebugConfigGene?= =?UTF-8?q?rator=20=E5=85=81=E8=AE=B8=20showSimpleConfigUI=20=E5=BC=82?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/node-utility | 2 +- src/DebugConfigGenerator.ts | 7 +- src/EIDEProject.ts | 16 ++-- src/EIDEProjectModules.ts | 137 +++++++------------------------- src/HexUploader.ts | 8 +- src/ProcessBarManager.ts | 56 ------------- src/ToolchainLicenceActivate.ts | 4 +- src/WebPanelManager.ts | 12 +-- src/utility.ts | 80 +++++++++++++++++++ 9 files changed, 136 insertions(+), 186 deletions(-) delete mode 100644 src/ProcessBarManager.ts diff --git a/lib/node-utility b/lib/node-utility index cb1e5e5..fe6f911 160000 --- a/lib/node-utility +++ b/lib/node-utility @@ -1 +1 @@ -Subproject commit cb1e5e59e138f7fe997eb2118d9c2f65f0109d7a +Subproject commit fe6f9119d0dc12998e8facd68ed69e27b3b0c25e diff --git a/src/DebugConfigGenerator.ts b/src/DebugConfigGenerator.ts index feee416..2a3047d 100644 --- a/src/DebugConfigGenerator.ts +++ b/src/DebugConfigGenerator.ts @@ -28,7 +28,7 @@ import { ArmBaseCompileData } from "./EIDEProjectModules"; import { ResManager } from "./ResManager"; import { GlobalEvent } from "./GlobalEvents"; import { newMessage } from "./Message"; -import { HexUploaderType, JLinkOptions, STVPFlasherOptions, ProtocolType, PyOCDFlashOptions, OpenOCDFlashOptions } from "./HexUploader"; +import { HexUploaderType, JLinkOptions, STVPFlasherOptions, JLinkProtocolType, PyOCDFlashOptions, OpenOCDFlashOptions } from "./HexUploader"; import { jsonc } from 'jsonc'; import * as YAML from 'yaml'; @@ -43,6 +43,9 @@ interface LaunchConfig { configurations: Configuration[]; } +/** + * @deprecated +*/ export abstract class IDebugConfigGenerator { protected launchFile: File | undefined; @@ -216,7 +219,7 @@ class CortexDebugConfigProvider extends IDebugConfigProvider { else if ('jlink' == debugConfig.servertype) { const jlinkUploadConf = prjConfig.uploadConfig; - debugConfig.interface = ProtocolType[jlinkUploadConf.proType].toLowerCase(); + debugConfig.interface = JLinkProtocolType[jlinkUploadConf.proType].toLowerCase(); debugConfig.device = jlinkUploadConf.cpuInfo.cpuName; } } diff --git a/src/EIDEProject.ts b/src/EIDEProject.ts index 717a952..397ad0e 100644 --- a/src/EIDEProject.ts +++ b/src/EIDEProject.ts @@ -2481,14 +2481,14 @@ $(OUT_DIR): this.onSourceRootChanged('dataChanged'); } - public updateDebugConfig() { - const debugConfigGenerator = IDebugConfigGenerator.newInstance(this); - if (debugConfigGenerator) { - const launchConfig = File.fromArray([this.GetWorkspaceConfig().GetFile().dir, AbstractProject.vsCodeDir, 'launch.json']); - debugConfigGenerator.load(launchConfig); - debugConfigGenerator.update(); - } - } + // public updateDebugConfig() { + // const debugConfigGenerator = IDebugConfigGenerator.newInstance(this); + // if (debugConfigGenerator) { + // const launchConfig = File.fromArray([this.GetWorkspaceConfig().GetFile().dir, AbstractProject.vsCodeDir, 'launch.json']); + // debugConfigGenerator.load(launchConfig); + // debugConfigGenerator.update(); + // } + // } protected ThrowIf(checkRes: CheckResult) { if (!checkRes.success) { diff --git a/src/EIDEProjectModules.ts b/src/EIDEProjectModules.ts index 713d0e5..a1dc5f1 100644 --- a/src/EIDEProjectModules.ts +++ b/src/EIDEProjectModules.ts @@ -39,7 +39,7 @@ import { ArrayDelRepetition } from "../lib/node-utility/Utility"; import { GlobalEvent } from "./GlobalEvents"; import { ExceptionToMessage, newMessage } from "./Message"; import { ToolchainName, IToolchian, ToolchainManager } from './ToolchainManager'; -import { HexUploaderType, STLinkOptions, STVPFlasherOptions, StcgalFlashOption, JLinkOptions, ProtocolType, PyOCDFlashOptions, OpenOCDFlashOptions, STLinkProtocolType, CustomFlashOptions } from "./HexUploader"; +import { HexUploaderType, STLinkOptions, STVPFlasherOptions, StcgalFlashOption, JLinkOptions, JLinkProtocolType, PyOCDFlashOptions, OpenOCDFlashOptions, STLinkProtocolType, CustomFlashOptions } from "./HexUploader"; import { AbstractProject } from "./EIDEProject"; import { SettingManager } from "./SettingManager"; import { WorkspaceManager } from "./WorkspaceManager"; @@ -1912,10 +1912,10 @@ class JLinkUploadModel extends UploadConfigModel { uploader: HexUploaderType = 'JLink'; readonly protocolList = [ - ProtocolType.SWD, - ProtocolType.JTAG, - ProtocolType.FINE, - ProtocolType.cJTAG + JLinkProtocolType.SWD, + JLinkProtocolType.JTAG, + JLinkProtocolType.FINE, + JLinkProtocolType.cJTAG ]; GetKeyDescription(key: string): string { @@ -1966,7 +1966,7 @@ class JLinkUploadModel extends UploadConfigModel { getKeyValue(key: string): string { switch (key) { case 'proType': - return ProtocolType[this.data.proType]; + return JLinkProtocolType[this.data.proType]; case 'speed': return (this.data.speed ? this.data.speed.toString() : '4000') + ' kHz'; case 'cpuInfo': @@ -2018,7 +2018,7 @@ class JLinkUploadModel extends UploadConfigModel { case 'proType': return this.protocolList.map((protocol) => { return { - label: ProtocolType[protocol], + label: JLinkProtocolType[protocol], val: protocol }; }); @@ -2043,7 +2043,7 @@ class JLinkUploadModel extends UploadConfigModel { vendor: 'null', cpuName: 'null' }, - proType: ProtocolType.SWD, + proType: JLinkProtocolType.SWD, speed: 8000, otherCmds: '' }; @@ -2484,44 +2484,16 @@ class PyOCDUploadModel extends UploadConfigModel { switch (key) { case 'targetName': { - /* examples: - { - "name": "rp2040_core1", - "vendor": "Raspberry Pi", - "part_families": [], - "part_number": "RP2040Core1", - "source": "builtin" - } - */ - - const cmdList: string[] = ['pyocd', 'json']; - const cwd = this.api.getRootDir().path; - - cmdList.push('-j', `"${cwd}"`); - - if (this.data.config) { - const absPath = this.api.toAbsolutePath(this.data.config); - if (File.IsFile(absPath)) { - cmdList.push('--config', `"${this.data.config}"`); - } - } - - cmdList.push('-t'); - try { - const command = cmdList.join(' '); - const result = JSON.parse(child_process.execSync(command).toString()); - if (!Array.isArray(result['targets'])) { - throw new Error(`Wrong pyocd targets format, 'targets' must be an array !`); - } - - return result['targets'].map((target) => { - return { - label: target['name'], - val: target['name'], - description: `${target['vendor']} (${target['source']})` - }; - }); + const pyocdCfgPath = this.data.config ? this.api.toAbsolutePath(this.data.config) : undefined; + return utility.pyocd_getTargetList(this.api.getRootDir(), pyocdCfgPath) + .map((target) => { + return { + label: target['name'], + val: target['name'], + description: `${target['vendor']} (${target['source']})` + }; + }); } catch (error) { GlobalEvent.emit('msg', ExceptionToMessage(error, 'Warning')); } @@ -2563,13 +2535,6 @@ class OpenOCDUploadModel extends UploadConfigModel { uploader: HexUploaderType = 'OpenOCD'; - configSearchList: { [name: string]: string[] } = { - 'build-in': [ - 'scripts', - 'share/openocd/scripts' - ] - }; - GetKeyDescription(key: string): string { switch (key) { case 'target': @@ -2648,65 +2613,23 @@ class OpenOCDUploadModel extends UploadConfigModel { } } - private getConfigList(configClass: string): { name: string, isInWorkspace?: boolean; }[] | undefined { - - const openocdExe = new File(SettingManager.GetInstance().getOpenOCDExePath()); - const resultList: { name: string, isInWorkspace?: boolean; }[] = [ - { name: '' } // None - ]; - - // find in workspace - const wsFolder = WorkspaceManager.getInstance().getWorkspaceRoot(); - if (wsFolder) { - for (const path of ['.', '.eide', 'tools']) { - const cfgFolder = File.fromArray([wsFolder.path, path]); - if (cfgFolder.IsDir()) { - cfgFolder.GetList([/\.cfg$/i], File.EXCLUDE_ALL_FILTER).forEach((file) => { - const rePath = (wsFolder.ToRelativePath(file.path) || file.name); - resultList.push({ - name: File.ToUnixPath(rePath).replace('.cfg', ''), - isInWorkspace: true - }); - }); - } - } - } - - // find in build-in path - for (const path of this.configSearchList['build-in']) { - const cfgFolder = new File(File.normalize(`${NodePath.dirname(openocdExe.dir)}/${path}/${configClass}`)); - if (cfgFolder.IsDir()) { - cfgFolder.GetAll([/\.cfg$/i], File.EXCLUDE_ALL_FILTER).forEach((file) => { - const rePath = (cfgFolder.ToRelativePath(file.path) || file.name); - resultList.push({ - name: File.ToUnixPath(rePath).replace('.cfg', '') - }); - }); - break; - } - } - - return resultList; - } - protected GetSelectionList(key: string): CompileConfigPickItem[] | undefined { switch (key) { case 'target': - case 'interface': - return this.getConfigList(key)?.map((item) => { - if (item.name.trim() == '') { - return { - label: 'None', - val: item.name - }; - } else { - return { - label: `${item.name}.cfg`, - val: item.isInWorkspace ? `\${workspaceFolder}/${item.name}` : item.name, - description: item.isInWorkspace ? 'in workspace' : undefined - }; - } + case 'interface': { + const r: CompileConfigPickItem[] = [{ + label: 'None', + val: '' + }]; + utility.openocd_getConfigList(key, this.api.getRootDir()).forEach((item) => { + r.push({ + label: `${item.name}.cfg`, + val: item.name, + description: item.isInWorkspace ? 'in workspace' : undefined + }); }); + return r; + } default: return super.GetSelectionList(key); } diff --git a/src/HexUploader.ts b/src/HexUploader.ts index c5fb873..bc1be55 100644 --- a/src/HexUploader.ts +++ b/src/HexUploader.ts @@ -246,7 +246,7 @@ export abstract class HexUploader { /** * jlink programer */ -export enum ProtocolType { +export enum JLinkProtocolType { JTAG = 0, SWD = 1, FINE = 3, @@ -264,7 +264,7 @@ export interface JLinkOptions extends UploadOption { cpuInfo: CPUInfo; - proType: ProtocolType; + proType: JLinkProtocolType; speed?: number; @@ -356,12 +356,12 @@ class JLinkUploader extends HexUploader { '-ExitOnError', '1', '-AutoConnect', '1', '-Device', option.cpuInfo.cpuName, - '-If', ProtocolType[option.proType], + '-If', JLinkProtocolType[option.proType], '-Speed', `${option.speed || 4000}`, '-CommandFile', jlinkCommandsFile.path ]; - if ([ProtocolType.JTAG, ProtocolType.cJTAG].includes(option.proType)) { + if ([JLinkProtocolType.JTAG, JLinkProtocolType.cJTAG].includes(option.proType)) { cmdList.push('-JTAGConf', '-1,-1'); } diff --git a/src/ProcessBarManager.ts b/src/ProcessBarManager.ts deleted file mode 100644 index aaa998d..0000000 --- a/src/ProcessBarManager.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - MIT License - - Copyright (c) 2019 github0null - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -import * as vscode from 'vscode'; - -let _instance: ProcessBarManager; - -export class ProcessBarManager { - - private constructor() { - } - - static getInstance(): ProcessBarManager { - - if (_instance === undefined) { - _instance = new ProcessBarManager(); - } - - return _instance; - } - - showProcessAsync(msg: string, task: (arg?: any) => Promise, arg?: any) { - - vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - title: msg - }, (): Thenable => { - return new Promise((resolve) => { - task(arg).finally(() => { - resolve(); - }); - }); - }); - } -} \ No newline at end of file diff --git a/src/ToolchainLicenceActivate.ts b/src/ToolchainLicenceActivate.ts index 1492f7e..6bb1c24 100644 --- a/src/ToolchainLicenceActivate.ts +++ b/src/ToolchainLicenceActivate.ts @@ -149,7 +149,7 @@ function requestAndActivate_COSMIC_STM8(toolchain: IToolchian) { WebPanelManager.instance().showSimpleConfigUI(ui_1, // on submited - (data) => { + async (data) => { // http://vps362893.ovh.net/registerAuto.php?name={1}&hostid={2}&mail={3}&product=LXSTM8FSE_2023 // 其中: @@ -268,7 +268,7 @@ function requestAndActivate_COSMIC_STM8(toolchain: IToolchian) { WebPanelManager.instance().showSimpleConfigUI(ui_2, // on submited - (data) => { + async (data) => { const licenceCont: string = data.items['licence'].data.value; diff --git a/src/WebPanelManager.ts b/src/WebPanelManager.ts index 8d9a22d..bce3ffc 100644 --- a/src/WebPanelManager.ts +++ b/src/WebPanelManager.ts @@ -52,8 +52,8 @@ export class WebPanelManager { return _instance; } - showSimpleConfigUI(cfg: SimpleUIConfig, - onSubmit: (newCfg: SimpleUIConfig, thisPanel: vscode.WebviewPanel) => void, + showSimpleConfigUI(cfg: SimpleUIConfig, + onSubmit: (newCfg: SimpleUIConfig, thisPanel: vscode.WebviewPanel) => Promise, onMsg?: (msg: string, thisPanel: vscode.WebviewPanel) => void): vscode.WebviewPanel { const resManager = ResManager.GetInstance(); @@ -71,8 +71,7 @@ export class WebPanelManager { panel.iconPath = vscode.Uri.file(resManager.GetIconByName(cfg.iconName || 'Property_16x.svg').path); - panel.webview.onDidReceiveMessage((_data: any) => { - + panel.webview.onDidReceiveMessage(async (_data: any) => { /* it's a message */ if (typeof _data == 'string') { switch (_data) { @@ -88,8 +87,9 @@ export class WebPanelManager { /* it's obj data */ else { try { - onSubmit(_data, panel); - panel.webview.postMessage('eide.simple-cfg-ui.status.done'); + const ret = await onSubmit(_data, panel); + if (ret != 'canceled') + panel.webview.postMessage('eide.simple-cfg-ui.status.done'); } catch (error) { GlobalEvent.emit('error', error); panel.webview.postMessage('eide.simple-cfg-ui.status.fail'); diff --git a/src/utility.ts b/src/utility.ts index f587a14..45a0ce1 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -44,6 +44,86 @@ import { GlobalEvent } from './GlobalEvents'; import { SettingManager } from './SettingManager'; import { ToolchainName } from './ToolchainManager'; +/** + * @return: example + [ + { + "name": "rp2040_core1", + "vendor": "Raspberry Pi", + "part_families": [], + "part_number": "RP2040Core1", + "source": "builtin" + } + ] +*/ +export function pyocd_getTargetList(projectRootDir: File | undefined, pyocdConfigPath: string | undefined): any[] { + + const cmdList: string[] = ['pyocd', 'json']; + + if (projectRootDir) { + const cwd = projectRootDir.path; + cmdList.push('-j', `"${cwd}"`); + } + + if (pyocdConfigPath) { + if (File.IsFile(pyocdConfigPath)) { + if (projectRootDir) + cmdList.push('--config', `"${projectRootDir.ToRelativePath(pyocdConfigPath) || pyocdConfigPath}"`); + else + cmdList.push('--config', `"${pyocdConfigPath}"`); + } + } + + cmdList.push('-t'); + + const command = cmdList.join(' '); + const result = JSON.parse(child_process.execSync(command).toString()); + if (!Array.isArray(result['targets'])) { + throw new Error(`Wrong pyocd targets format, 'targets' must be an array !`); + } + + return result['targets'].map(t => t); +} + +export function openocd_getConfigList(category: 'interface' | 'target', projectRootDir: File | undefined): { name: string, isInWorkspace?: boolean; }[] { + + const openocdExe = new File(SettingManager.GetInstance().getOpenOCDExePath()); + const resultList: { name: string, isInWorkspace?: boolean; }[] = []; + + // find in workspace + const wsFolder = projectRootDir; + if (wsFolder) { + for (const path of ['.', '.eide', 'tools']) { + const cfgFolder = File.fromArray([wsFolder.path, path]); + if (cfgFolder.IsDir()) { + cfgFolder.GetList([/\.cfg$/i], File.EXCLUDE_ALL_FILTER).forEach((file) => { + const rePath = (wsFolder.ToRelativePath(file.path) || file.name); + resultList.push({ + name: '${workspaceFolder}/' + File.ToUnixPath(rePath).replace('.cfg', ''), + isInWorkspace: true + }); + }); + } + } + } + + // find in build-in path + for (const path of ['scripts', 'share/openocd/scripts']) { + const cfgFolder = File.from(openocdExe.dir, '..', path, category); + if (cfgFolder.IsDir()) { + cfgFolder.GetAll([/\.cfg$/i], File.EXCLUDE_ALL_FILTER).forEach((file) => { + const rePath = (cfgFolder.ToRelativePath(file.path) || file.name); + resultList.push({ + name: File.ToUnixPath(rePath).replace('.cfg', '') + }); + }); + break; // break it if we found + } + } + + return resultList; +} + export interface CppMacroDefine { type: 'var' | 'func'; name: string; From bfd6c6b023be89401a6c92299cf19bf5b14882b6 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 10 Jun 2024 18:52:27 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E4=B8=BA=20JLink,=20openocd,=20pyocd=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B0=83=E8=AF=95=E6=A8=A1=E6=9D=BF=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1704 +++++++++++++++++++++++++++++++++++- package.json | 64 +- package.nls.json | 2 +- package.nls.zh-CN.json | 2 +- src/EIDEProjectExplorer.ts | 399 ++++++++- src/extension.ts | 9 +- webpack.config.js | 19 +- 7 files changed, 2154 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6d2c6c..0e858e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,35 +1,1224 @@ { "name": "eide", - "version": "3.10.10", + "version": "3.17.1", "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true + }, + "@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" + } + }, + "@babel/helper-replace-supers": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" } }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/preset-env": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@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-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "@babel/runtime": { "version": "7.20.7", "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.7.tgz", @@ -38,6 +1227,153 @@ "regenerator-runtime": "^0.13.11" } }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + } + } + }, + "@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@types/braces": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/@types/braces/-/braces-3.0.1.tgz", @@ -68,6 +1404,12 @@ "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "@types/micromatch": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/@types/micromatch/-/micromatch-4.0.2.tgz", @@ -475,6 +1817,149 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", @@ -683,6 +2168,18 @@ "pako": "~1.0.5" } }, + "browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + } + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", @@ -764,6 +2261,12 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001632", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz", + "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", @@ -926,6 +2429,12 @@ "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -946,6 +2455,15 @@ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true }, + "core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0" + } + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1168,6 +2686,12 @@ "stream-shift": "^1.0.0" } }, + "electron-to-chromium": { + "version": "1.4.796", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", + "integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==", + "dev": true + }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", @@ -1240,6 +2764,12 @@ "is-arrayish": "^0.2.1" } }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, "escape-latex": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/escape-latex/-/escape-latex-1.2.0.tgz", @@ -1290,6 +2820,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "events": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", @@ -1689,6 +3225,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1774,6 +3316,12 @@ } } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -2162,6 +3710,12 @@ "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -2195,6 +3749,11 @@ "strip-json-comments": "^3.0.1" } }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", @@ -2228,6 +3787,12 @@ "path-exists": "^3.0.0" } }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, "lodash.defaultsdeep": { "version": "4.6.1", "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", @@ -2540,6 +4105,12 @@ } } }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2740,6 +4311,12 @@ "sha.js": "^2.4.8" } }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", @@ -2906,11 +4483,35 @@ "picomatch": "^2.2.1" } }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", @@ -2921,6 +4522,37 @@ "safe-regex": "^1.1.0" } }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -3652,6 +5284,12 @@ "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", @@ -3772,6 +5410,34 @@ "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", @@ -3849,6 +5515,16 @@ "dev": true, "optional": true }, + "update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 933f28b..bbc3043 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,9 @@ "test": "npm run compile && node ./node_modules/vscode/bin/test" }, "devDependencies": { + "@babel/core": "^7.24.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/preset-env": "^7.24.7", "@types/ftp": "^0.3.31", "@types/iconv-lite": "0.0.1", "@types/ini": "^1.3.30", @@ -90,6 +93,7 @@ "@types/vscode": "1.67.0", "@types/x2js": "^3.1.0", "@types/xml2js": "^0.4.11", + "babel-loader": "^8.3.0", "ts-loader": "^6.2.1", "tslint": "^5.20.1", "typescript": "^3.7.3", @@ -100,6 +104,7 @@ "iconv-lite": "^0.5.0", "ini": "^2.0.0", "jsonc": "^2.0.0", + "jsonc-parser": "^3.2.1", "mathjs": "^11.5.0", "micromatch": "^4.0.4", "node-7z": "^3.0.0", @@ -219,8 +224,8 @@ "EIDE.Cpptools.ForceInclude": { "type": "array", "items": { - "type": "string" - }, + "type": "string" + }, "scope": "resource", "markdownDescription": "Force include file path list for c/c++ plug-in intellisence", "default": [] @@ -294,8 +299,8 @@ "EIDE.Builder.EnvironmentVariables": { "type": "array", "items": { - "type": "string" - }, + "type": "string" + }, "scope": "resource", "markdownDescription": "%settings.builder.presetEnvVars%", "default": [ @@ -902,8 +907,16 @@ } }, { - "command": "_cl.eide.project.genDebugConfigTemplate", - "title": "%eide.flash.gen.dbgconf%" + "command": "_cl.eide.project.genDebugConfigTemplate.jlink", + "title": "JLink" + }, + { + "command": "_cl.eide.project.genDebugConfigTemplate.openocd", + "title": "OpenOCD (stlink,daplink...)" + }, + { + "command": "_cl.eide.project.genDebugConfigTemplate.pyocd", + "title": "pyOCD (daplink,stlink...)" }, { "command": "_cl.eide.project.fetchShellFlasher", @@ -1101,6 +1114,10 @@ { "id": "_cl.eide.menu/ui/project/export", "label": "%eide.prj.menus.main.export%" + }, + { + "id": "_cl.eide.menu/ui/project/gen-debug-cfg", + "label": "%eide.flash.gen.dbgconf%" } ], "menus": { @@ -1277,6 +1294,11 @@ "when": "viewItem == SOLUTION && view == cl.eide.view.projects", "group": "5_group@3" }, + { + "submenu": "_cl.eide.menu/ui/project/gen-debug-cfg", + "when": "viewItem == SOLUTION && view == cl.eide.view.projects", + "group": "5_group@3" + }, { "command": "_cl.eide.project.showBuildParams", "when": "viewItem == SOLUTION && view == cl.eide.view.projects", @@ -1295,8 +1317,6 @@ "submenu": "_cl.eide.menu/ui/project/static-check", "group": "z_group0@0" }, - - { "command": "_cl.eide.project.addSrcDir", "group": "inline", @@ -1332,8 +1352,6 @@ "when": "viewItem == PROJECT && view == cl.eide.view.projects", "group": "z_group0@1" }, - - { "command": "_cl.eide.project.sourceRoot.refresh", "group": "inline@0", @@ -1419,8 +1437,6 @@ "when": "viewItem == OUTPUT_FILE_ITEM || viewItem == FILE_ITEM || viewItem == EXCFILE_ITEM || viewItem == V_FILE_ITEM || viewItem == V_EXCFILE_ITEM && view == cl.eide.view.projects", "group": "z_group1@1" }, - - { "command": "_cl.eide.project.addPackage", "group": "inline", @@ -1452,8 +1468,6 @@ "command": "_cl.eide.project.installCmsisDriverInterface", "when": "viewItem == PACK && view == cl.eide.view.projects" }, - - { "command": "_cl.eide.project.switchToolchain", "group": "inline", @@ -1468,11 +1482,6 @@ "group": "inline", "when": "viewItem == UPLOAD_OPTION || viewItem == UPLOAD_OPTION_Shell && view == cl.eide.view.projects" }, - { - "command": "_cl.eide.project.genDebugConfigTemplate", - "when": "viewItem == SOLUTION || viewItem == UPLOAD_OPTION || viewItem == UPLOAD_OPTION_Shell && view == cl.eide.view.projects", - "group": "5_group@3" - }, { "command": "_cl.eide.project.fetchShellFlasher", "group": "inline", @@ -1576,6 +1585,23 @@ "when": "viewItem == SOLUTION && view == cl.eide.view.projects", "group": "z_group1@1" } + ], + "_cl.eide.menu/ui/project/gen-debug-cfg": [ + { + "command": "_cl.eide.project.genDebugConfigTemplate.jlink", + "when": "viewItem == SOLUTION && view == cl.eide.view.projects", + "group": "z_group0@0" + }, + { + "command": "_cl.eide.project.genDebugConfigTemplate.openocd", + "when": "viewItem == SOLUTION && view == cl.eide.view.projects", + "group": "z_group0@1" + }, + { + "command": "_cl.eide.project.genDebugConfigTemplate.pyocd", + "when": "viewItem == SOLUTION && view == cl.eide.view.projects", + "group": "z_group0@2" + } ] }, "snippets": [ diff --git a/package.nls.json b/package.nls.json index 492b968..4708c9c 100644 --- a/package.nls.json +++ b/package.nls.json @@ -85,7 +85,7 @@ "eide.builder.setup-toolchain-prefix": "Setup Compiler Prefix", "eide.flash.switch": "Select Flasher", - "eide.flash.gen.dbgconf": "Generate Cortex-Debug Configuration", + "eide.flash.gen.dbgconf": "Generate Debugger Configuration", "eide.flash.fetch-shell-flasher": "Install Shell Flasher Script From Remote Repository", "eide.deps.include.show": "Display All Include Paths", diff --git a/package.nls.zh-CN.json b/package.nls.zh-CN.json index 3d70748..5d8d5ee 100644 --- a/package.nls.zh-CN.json +++ b/package.nls.zh-CN.json @@ -85,7 +85,7 @@ "eide.builder.setup-toolchain-prefix": "设置编译器前缀", "eide.flash.switch": "切换烧录器", - "eide.flash.gen.dbgconf": "生成 Cortex-Debug 配置模板", + "eide.flash.gen.dbgconf": "生成调试器配置模板", "eide.flash.fetch-shell-flasher": "从云端安装 Shell 烧录脚本", "eide.deps.include.show": "显示所有包含路径", diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index 27ff460..0dfc246 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -30,6 +30,7 @@ import * as child_process from 'child_process'; import * as os from 'os'; import * as yaml from 'yaml'; import * as ini from 'ini'; +import * as jsonc_parser from 'jsonc-parser'; import { File } from '../lib/node-utility/File'; import { ResManager } from './ResManager'; @@ -79,7 +80,7 @@ import { import { CodeBuilder, BuildOptions } from './CodeBuilder'; import { ExceptionToMessage, newMessage } from './Message'; import { SettingManager } from './SettingManager'; -import { HexUploaderManager, HexUploaderType } from './HexUploader'; +import { HexUploaderManager, HexUploaderType, JLinkOptions, JLinkProtocolType, OpenOCDFlashOptions, PyOCDFlashOptions } from './HexUploader'; import { SevenZipper, CompressOption } from './Compress'; import { DependenceManager } from './DependenceManager'; import { ArrayDelRepetition } from '../lib/node-utility/Utility'; @@ -92,7 +93,9 @@ import { sortPaths, getGccBinutilsVersion, compareVersion, - getGccSystemSearchList + getGccSystemSearchList, + openocd_getConfigList, + pyocd_getTargetList } from './utility'; import { concatSystemEnvPath, DeleteDir, exeSuffix, kill, osType, DeleteAllChildren } from './Platform'; import { KeilARMOption, KeilC51Option, KeilParser, KeilRteDependence } from './KeilXmlParser'; @@ -4745,6 +4748,16 @@ export class ProjectExplorer implements CustomConfigurationProvider { const cfg: SimpleUIConfig = { title: 'Project Variables', readonly: true, + btns: { + submit: { + title: '', + hidden: true + }, + reset: { + title: '', + hidden: true + } + }, items: { vars: { type: 'table', @@ -4765,7 +4778,7 @@ export class ProjectExplorer implements CustomConfigurationProvider { }); } - WebPanelManager.instance().showSimpleConfigUI(cfg, () => { + WebPanelManager.instance().showSimpleConfigUI(cfg, async () => { // nothing todo }); } @@ -5070,7 +5083,7 @@ export class ProjectExplorer implements CustomConfigurationProvider { }, }; - WebPanelManager.instance().showSimpleConfigUI(ui_cfg, (new_cfg) => { + WebPanelManager.instance().showSimpleConfigUI(ui_cfg, async (new_cfg) => { const nArgs = (new_cfg.items['args'].data).value.replace(/\r\n|\n/g, ' ').trim(); @@ -5188,7 +5201,7 @@ export class ProjectExplorer implements CustomConfigurationProvider { }, }; - WebPanelManager.instance().showSimpleConfigUI(ui_cfg, (new_cfg) => { + WebPanelManager.instance().showSimpleConfigUI(ui_cfg, async (new_cfg) => { const nArgs = (new_cfg.items['args'].data).value.replace(/\r\n|\n/g, ' ').trim(); const isRecursive = (new_cfg.items['recursive'].data).value; @@ -6692,7 +6705,7 @@ export class ProjectExplorer implements CustomConfigurationProvider { }; } - WebPanelManager.instance().showSimpleConfigUI(cfg, (newCfg) => { + WebPanelManager.instance().showSimpleConfigUI(cfg, async (newCfg) => { // update toolchain path setting.getConfiguration().update( @@ -6892,9 +6905,379 @@ export class ProjectExplorer implements CustomConfigurationProvider { } } - async genDebugConfigTemplate(item: ProjTreeItem) { + private async genDebugConfig_internal( + type: 'jlink' | 'openocd' | 'pyocd', + prj: AbstractProject, old_cfgs: any[]): Promise<{ debug_config: any, override_idx: number } | undefined> { + + const _elfPath = File.ToUnixPath(prj.getOutputDir()) + '/' + `${prj.getProjectName()}.elf`; + const _debugConfigTemplates = { + 'jlink': { + cwd: '${workspaceRoot}', + type: 'cortex-debug', + request: 'launch', + name: `${prj.getProjectCurrentTargetName()}: JLINK`, + servertype: 'jlink', + interface: 'swd', + executable: _elfPath, + runToEntryPoint: "main", + device: '' + }, + 'openocd': { + cwd: '${workspaceRoot}', + type: 'cortex-debug', + request: 'launch', + name: `${prj.getProjectCurrentTargetName()}: OpenOCD`, + servertype: 'openocd', + executable: _elfPath, + runToEntryPoint: "main", + configFiles: [ + ] + }, + 'pyocd': { + cwd: '${workspaceRoot}', + type: 'cortex-debug', + request: 'launch', + name: `${prj.getProjectCurrentTargetName()}: pyOCD`, + servertype: 'pyocd', + executable: _elfPath, + runToEntryPoint: "main", + targetId: '', + serverArgs: [] + } + }; + + const debugConfig: any = _debugConfigTemplates[type]; + + /* set gdb toolchain */ + const toolchain = prj.getToolchain(); + if (toolchain.getToolchainPrefix) { + debugConfig.toolchainPrefix = toolchain.getToolchainPrefix().trim().replace(/-$/, ''); + } else if (debugConfig.toolchainPrefix) { + debugConfig.toolchainPrefix = undefined; + } + + /* set svd file */ + const device = prj.GetPackManager().getCurrentDevInfo(); + if (device && device.svdPath && debugConfig.svdFile == undefined) { + debugConfig.svdFile = prj.ToRelativePath(device.svdPath) || device.svdPath; + } + + const isChinese = getLocalLanguageType() == LanguageIndexs.Chinese; + const ui: SimpleUIConfig = { + title: (isChinese ? '创建 Cortex-Debug ({}) 调试配置模板' : 'Create Cortex-Debug ({}) Configuration Template').replace('{}', type.toUpperCase()), + viewColumn: vscode.ViewColumn.One, + notTakeFocus: false, + btns: { + 'submit': { + title: isChinese ? '新建' : 'Create', + hidden: false + }, + 'reset': { + title: '', + hidden: true + } + }, + items: { + 'name': { + type: 'input', + name: isChinese ? '名称' : 'Name', + attrs: { 'singleLine': true, 'size': 60 }, + data: { + value: debugConfig.name + } + }, + 'request': { + type: 'options', + name: isChinese ? '调试模式' : 'Request', + attrs: {}, + data: { + value: 0, + default: 0, + enum: ['launch', 'attach'], + enumDescriptions: isChinese ? ['启动', '附加'] : ['launch', 'attach'], + } + } + } + }; + + let uiResultConv: (data: SimpleUIConfig, debugConfig: any) => void = (a, b) => { + throw new Error('uiResultConv NOT IMPLEMENT !'); + }; + + /* For JLink */ + if (type == 'jlink') { + + if (prj.getUploaderType() == 'JLink') { + const jlinkUploadConf = prj.GetConfiguration().config.uploadConfig; + debugConfig.interface = JLinkProtocolType[jlinkUploadConf.proType].toLowerCase(); + debugConfig.device = jlinkUploadConf.cpuInfo.cpuName; + } + + /* setup ui */ + ui.items['interface'] = { + type: 'options', + name: isChinese ? '接口类型' : 'Interface', + attrs: {}, + data: { + value: debugConfig.interface == 'swd' ? 0 : 1, + default: 0, + enum: ['swd', 'jtag'], + enumDescriptions: ['SWD', 'JTAG'], + } + }; + ui.items['device'] = { + type: 'input', + name: isChinese ? '芯片型号' : 'Device Name', + attrs: { 'singleLine': true, size: 30 }, + data: { + value: debugConfig.device, + placeHolder: 'STM32F103C8' + }, + }; + uiResultConv = (data, outConfig) => { + outConfig.interface = ['swd', 'jtag'][data.items['interface'].data.value]; + outConfig.device = data.items['device'].data.value; + }; + } + + /* For OPENOCD */ + else if (type == 'openocd') { + + const toCfgPath = (typ: 'interface' | 'target', cfgname: string): string => { + if (cfgname.trim() != '') { + let fpath: string = cfgname.startsWith('${workspaceFolder}/') + ? cfgname.replace('${workspaceFolder}/', '') + : `${typ}/${cfgname}`; + if (!fpath.endsWith('.cfg')) + fpath += '.cfg'; + return fpath; + } + return ''; + }; + + const interface_enums = [''].concat(openocd_getConfigList('interface', prj.getRootDir()).map(c => c.name)); + const target_enums = [''].concat(openocd_getConfigList('target', prj.getRootDir()).map(c => c.name)); + + let inferface_default = 0; + let target_default = 0; + + if (prj.getUploaderType() == 'OpenOCD') { + const flasherConf = prj.GetConfiguration().config.uploadConfig; + if (flasherConf.interface) { + (debugConfig.configFiles).push(toCfgPath('interface', flasherConf.interface)); + let idx = interface_enums.findIndex(n => n == flasherConf.interface); + if (idx != -1) + inferface_default = idx; + } + if (flasherConf.target) { + (debugConfig.configFiles).push(toCfgPath('target', flasherConf.target)); + let idx = target_enums.findIndex(n => n == flasherConf.target); + if (idx != -1) + target_default = idx; + } + } + + /* setup ui */ + ui.items['interface'] = { + type: 'options', + name: isChinese ? '接口' : 'Interface', + attrs: {}, + data: { + value: inferface_default, + default: inferface_default, + enum: interface_enums, + enumDescriptions: interface_enums.map(n => n == '' ? 'None' : n), + } + }; + ui.items['target'] = { + type: 'options', + name: isChinese ? '目标' : 'Target', + attrs: {}, + data: { + value: target_default, + default: target_default, + enum: target_enums, + enumDescriptions: target_enums.map(n => n == '' ? 'None' : n), + } + }; + uiResultConv = (data, outConfig) => { + const cfgFiles: string[] = []; + const i_idx = (data.items['interface'].data).value; + const i_path = interface_enums[i_idx]; + if (i_path) + cfgFiles.push(toCfgPath('interface', i_path)); + const t_idx = (data.items['target'].data).value; + const t_path = target_enums[t_idx]; + if (t_path) + cfgFiles.push(toCfgPath('target', t_path)); + outConfig.configFiles = cfgFiles; + }; + } + + /* For PYOCD */ + else if (type == 'pyocd') { + + let target_idx_default = 0; + let pyocd_config_path: string | undefined; + + if (prj.getUploaderType() == 'pyOCD') { + const flasherConf = prj.GetConfiguration().config.uploadConfig; + debugConfig.targetId = flasherConf.targetName; + if (flasherConf.config) { + pyocd_config_path = prj.toAbsolutePath(flasherConf.config); + if (File.IsFile(pyocd_config_path)) { + debugConfig.serverArgs = [ + '--config', pyocd_config_path + ]; + } + } + } + + const target_enums = await vscode.window.withProgress({ + location: vscode.ProgressLocation.Notification, + title: 'Get pyOCD Targets List' + }, () => { + return new Promise((resolve) => { + try { + const r = pyocd_getTargetList(prj.getRootDir(), pyocd_config_path).map(t => t['name']); + resolve(r); + } catch (error) { + resolve(error); + } + }); + }); + + if (target_enums instanceof Error) + throw target_enums; + if (target_enums == undefined) + throw new Error(`pyocd_getTargetList -> target_enums is undefined`); + + const idx = target_enums.findIndex(t => t == debugConfig.targetId); + if (idx != -1) + target_idx_default = idx; + + /* setup ui */ + ui.items['target'] = { + type: 'options', + name: isChinese ? '目标' : 'Target', + attrs: {}, + data: { + value: target_idx_default, + default: target_idx_default, + enum: target_enums, + enumDescriptions: target_enums, + } + }; + if (prj.getUploaderType() != 'pyOCD') { + ui.items['config'] = { + type: 'input', + name: isChinese ? 'pyocd.yml 配置文件路径' : 'pyocd.yml Path', + attrs: { 'singleLine': true }, + data: { + value: '', + placeHolder: './pyocd.yml' + }, + }; + } + uiResultConv = (data, outConfig) => { + const t_idx = (data.items['target'].data).value; + const targetId = target_enums[t_idx]; + if (targetId) + outConfig.targetId = targetId; + else + throw new Error(`targetId is null ! idx=${t_idx}`); + if (data.items['config']) { + const _cfgPath = (data.items['config'].data).value; + if (_cfgPath) { + const absPath = prj.toAbsolutePath(_cfgPath); + outConfig.serverArgs = [ + '--config', absPath + ]; + } + } + }; + } + + return new Promise((resolve) => { + + WebPanelManager.instance().showSimpleConfigUI(ui, + // on submited + async (data, panel) => { + + /* update configs */ + debugConfig.name = data.items['name'].data.value; + debugConfig.request = ['launch', 'attach'][data.items['request'].data.value]; + if (debugConfig.request == 'attach') + debugConfig.runToEntryPoint = undefined; + uiResultConv(data, debugConfig); + + /* check override ? */ + const idx = old_cfgs.findIndex(cfg => cfg.name == debugConfig.name); + if (idx != -1) { + const item = await vscode.window.showWarningMessage( + `${WARNING}: Debug Configuration '${debugConfig.name}' is already existed ! override it ?`, 'Yes', 'No'); + if (item === undefined || item === 'No') { + return 'canceled'; + } + } + + resolve({ debug_config: debugConfig, override_idx: idx }); + setTimeout(() => panel.dispose(), 100); + }, + // on msg + (msg) => { + }); + }); + } + + async genDebugConfigTemplate(item: ProjTreeItem, type: 'jlink' | 'openocd' | 'pyocd') { + const project = this.dataProvider.GetProjectByIndex(item.val.projectIndex); - project.updateDebugConfig(); + const cfgfile = File.from(project.GetWorkspaceConfig().GetFile().dir, AbstractProject.vsCodeDir, 'launch.json'); + + try { + + let cur_cfgs; + if (cfgfile.IsFile()) + cur_cfgs = jsonc_parser.parse(cfgfile.Read(), undefined, { allowTrailingComma: true }).configurations; + else + cur_cfgs = []; + + const result = await this.genDebugConfig_internal(type, project, cur_cfgs); + if (!result) { + return; // skip if user canceled + } + + if (!cfgfile.IsFile()) { + cfgfile.Write(JSON.stringify({ + version: '0.2.0', + configurations: [result.debug_config] + }, undefined, 4)); + return; + } + + /* merge debugConfig and write into launch.json */ + let edits: jsonc_parser.EditResult; + let fmtOpts = { tabSize: 4, insertSpaces: true }; + let raw_cont = cfgfile.Read(); + if (result.override_idx != -1) + edits = jsonc_parser.modify(raw_cont, ['configurations', result.override_idx], result.debug_config, { formattingOptions: fmtOpts }); + else + edits = jsonc_parser.modify(raw_cont, ['configurations', 0], result.debug_config, { formattingOptions: fmtOpts, isArrayInsertion: true }); + cfgfile.Write(jsonc_parser.applyEdits(raw_cont, edits)); + + /* show launch.json */ + const document = await vscode.workspace.openTextDocument(vscode.Uri.file(cfgfile.path)); + let cursorSel: vscode.Range | undefined; + if (edits.length > 0) { + const s = document.positionAt(edits[0].offset); + const e = document.positionAt(edits[0].offset + edits[0].length); + cursorSel = new vscode.Range(s, e); + } + vscode.window.showTextDocument(document, { preview: true, selection: cursorSel }); + } catch (error) { + GlobalEvent.emit('error', error); + } } private prev_click_info: ItemClickInfo | undefined = undefined; diff --git a/src/extension.ts b/src/extension.ts index caf1481..47aae7d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -228,7 +228,14 @@ export async function activate(context: vscode.ExtensionContext) { subscriptions.push(vscode.commands.registerCommand('_cl.eide.project.modifyUploadConfig', (item) => projectExplorer.ModifyUploadConfig(item))); subscriptions.push(vscode.commands.registerCommand('_cl.eide.project.switchUploader', (item) => projectExplorer.switchUploader(item))); subscriptions.push(vscode.commands.registerCommand('_cl.eide.project.fetchShellFlasher', (item) => projectExplorer.fetchShellFlasher(item))); - subscriptions.push(vscode.commands.registerCommand('_cl.eide.project.genDebugConfigTemplate', (item) => projectExplorer.genDebugConfigTemplate(item))); + + // debug cfg gen + subscriptions.push(vscode.commands.registerCommand( + '_cl.eide.project.genDebugConfigTemplate.jlink', (item) => projectExplorer.genDebugConfigTemplate(item, 'jlink'))); + subscriptions.push(vscode.commands.registerCommand( + '_cl.eide.project.genDebugConfigTemplate.openocd', (item) => projectExplorer.genDebugConfigTemplate(item, 'openocd'))); + subscriptions.push(vscode.commands.registerCommand( + '_cl.eide.project.genDebugConfigTemplate.pyocd', (item) => projectExplorer.genDebugConfigTemplate(item, 'pyocd'))); // project deps subscriptions.push(vscode.commands.registerCommand('_cl.eide.project.addIncludeDir', (item) => projectExplorer.AddIncludeDir(item.val.projectIndex))); diff --git a/webpack.config.js b/webpack.config.js index a5fdb0e..8141578 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,8 @@ const config = { jsonc: 'jsonc', ini: 'ini', yaml: 'yaml', - unzipper: 'unzipper' + unzipper: 'unzipper', + jsonc_parser: 'jsonc-parser' }, resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader @@ -29,6 +30,22 @@ const config = { }, module: { rules: [ + { + test: /\.m?js$/, + include: [ + path.resolve(__dirname, 'node_modules/jsonc-parser/lib') + ], + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'], + plugins: [ + //'@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-proposal-nullish-coalescing-operator' + ], + }, + }, + }, { test: /\.ts$/, exclude: /node_modules/, From bfba8e8c6dd271e3afc7f0189d60888fa9125288 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 10 Jun 2024 19:04:14 +0800 Subject: [PATCH 11/21] v3.17.2 preview --- CHANGELOG.md | 17 ++++++++++++++++- package.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59cf05b..598a9c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ All notable version changes will be recorded in this file. *** +### [v3.17.2] preview + +**New**: + - `Cortex-Debug Configuration Generator`: A new Debugger Configuration Generator with a simple GUI. + - `pyOCD Flasher UI`: Support append additional cli command when program flash. + - `VSCODE_PORTABLE`: Support `VSCODE_PORTABLE` environment variables. + +**Change**: + - `Builder Configuration UI (SDCC)`: Automatic get processors list by execute command: `sdcc -v` + +**Optimize** + - `MDK Project Import`: Optimize import `Keil User Command`. + +*** + ### [v3.17.1] revision **Fix**: @@ -423,7 +438,7 @@ Merge `v3.16.2-prerelease` bugs fix. **Optimize**: - Export built-in env variables to unify_builder - - Export more env variables to builder process envirnoment + - Export more env variables to builder process environment - Resolve recursive vars when parse iar eww file - When import a iar project, create new folder if iar project not have independent folder - Reload jlink device list after install a cmsis device package diff --git a/package.json b/package.json index bbc3043..eef6655 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "homepage": "https://em-ide.com", "license": "MIT", "description": "A mcu development environment for 8051/AVR/STM8/Cortex-M/MIPS/RISC-V", - "version": "3.17.1", + "version": "3.17.2", "preview": false, "engines": { "vscode": "^1.67.0" From 1672e8d1efffddd9d59acbf7b38db212d8fb34e8 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 10 Jun 2024 19:34:44 +0800 Subject: [PATCH 12/21] genDebugConfig_internal -> show it after create a new launch.json --- src/EIDEProjectExplorer.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index 0dfc246..4ba8b41 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -7215,7 +7215,10 @@ export class ProjectExplorer implements CustomConfigurationProvider { const idx = old_cfgs.findIndex(cfg => cfg.name == debugConfig.name); if (idx != -1) { const item = await vscode.window.showWarningMessage( - `${WARNING}: Debug Configuration '${debugConfig.name}' is already existed ! override it ?`, 'Yes', 'No'); + isChinese + ? `${WARNING}: 名称为 '${debugConfig.name}' 的调试配置已经存在,需要覆盖它吗?` + : `${WARNING}: Debugger Configuration '${debugConfig.name}' is already existed ! Override It ?`, + 'Yes', 'No'); if (item === undefined || item === 'No') { return 'canceled'; } @@ -7253,6 +7256,7 @@ export class ProjectExplorer implements CustomConfigurationProvider { version: '0.2.0', configurations: [result.debug_config] }, undefined, 4)); + vscode.window.showTextDocument(vscode.Uri.file(cfgfile.path), { preview: true }); return; } From 8a2519e8fefc7910d3c9a646af265d78e831d56d Mon Sep 17 00:00:00 2001 From: null Date: Wed, 12 Jun 2024 23:07:51 +0800 Subject: [PATCH 13/21] fix project target's env missed --- src/EIDEProject.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/EIDEProject.ts b/src/EIDEProject.ts index 397ad0e..0fa78c4 100644 --- a/src/EIDEProject.ts +++ b/src/EIDEProject.ts @@ -2129,19 +2129,13 @@ $(OUT_DIR): env = JSON.parse(JSON.stringify(rawEnv)); // override target env var - const targetName = this.getCurrentTarget().toLowerCase(); + const targetName = this.getCurrentTarget(); for (const key in env) { - if (typeof env[key] == 'object' && - Array.isArray(env[key]) == false && - key === targetName) { - try { - const targetObj = env[key]; - for (const var_name in targetObj) { - env[var_name] = targetObj[var_name]; - } - } catch (error) { - // nothing todo - } + if (typeof env[key] == 'object' && !Array.isArray(env[key]) && + key.toLowerCase() === targetName.toLowerCase()) { + const targetEnv = env[key]; + for (const k in targetEnv) + env[k] = targetEnv[k]; } } From e3abb719cc8a09da84f33b051de8bfb457bf3eeb Mon Sep 17 00:00:00 2001 From: null Date: Wed, 12 Jun 2024 23:10:17 +0800 Subject: [PATCH 14/21] v3.17.3 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 598a9c7..93597f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,16 @@ All notable version changes will be recorded in this file. *** -### [v3.17.2] preview +### [v3.17.3] preview **New**: - `Cortex-Debug Configuration Generator`: A new Debugger Configuration Generator with a simple GUI. - `pyOCD Flasher UI`: Support append additional cli command when program flash. - `VSCODE_PORTABLE`: Support `VSCODE_PORTABLE` environment variables. +**Fix**: + - `Project Environment`: Project environment variables missed. + **Change**: - `Builder Configuration UI (SDCC)`: Automatic get processors list by execute command: `sdcc -v` diff --git a/package.json b/package.json index eef6655..0367c8e 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "homepage": "https://em-ide.com", "license": "MIT", "description": "A mcu development environment for 8051/AVR/STM8/Cortex-M/MIPS/RISC-V", - "version": "3.17.2", + "version": "3.17.3", "preview": false, "engines": { "vscode": "^1.67.0" From e2b6a9275d89b04295876ab76dc5ddf02de51a77 Mon Sep 17 00:00:00 2001 From: null Date: Wed, 12 Jun 2024 23:18:57 +0800 Subject: [PATCH 15/21] v3.17.3 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 598a9c7..93597f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,16 @@ All notable version changes will be recorded in this file. *** -### [v3.17.2] preview +### [v3.17.3] preview **New**: - `Cortex-Debug Configuration Generator`: A new Debugger Configuration Generator with a simple GUI. - `pyOCD Flasher UI`: Support append additional cli command when program flash. - `VSCODE_PORTABLE`: Support `VSCODE_PORTABLE` environment variables. +**Fix**: + - `Project Environment`: Project environment variables missed. + **Change**: - `Builder Configuration UI (SDCC)`: Automatic get processors list by execute command: `sdcc -v` diff --git a/package.json b/package.json index eef6655..0367c8e 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "homepage": "https://em-ide.com", "license": "MIT", "description": "A mcu development environment for 8051/AVR/STM8/Cortex-M/MIPS/RISC-V", - "version": "3.17.2", + "version": "3.17.3", "preview": false, "engines": { "vscode": "^1.67.0" From a6a48444f2e0269290ed50abe88285d87f27d302 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 16:25:24 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E9=9D=9E=E5=85=BC=E5=AE=B9=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=E7=A7=BB=E9=99=A4=20.eide/deps=20=E6=94=B9?= =?UTF-8?q?=E7=94=A8=20VirtualFolder=20=E5=BC=95=E7=94=A8=E8=8A=AF?= =?UTF-8?q?=E7=89=87=E6=94=AF=E6=8C=81=E5=8C=85=E4=B8=AD=E7=9A=84=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DependenceManager.ts | 140 ++++++++++++++++++------------------- src/EIDEProject.ts | 138 +++++++++++++++++++++--------------- src/EIDEProjectExplorer.ts | 49 +++++++++---- src/EIDETypeDefine.ts | 28 ++++---- src/StringTable.ts | 16 ++++- 5 files changed, 212 insertions(+), 159 deletions(-) diff --git a/src/DependenceManager.ts b/src/DependenceManager.ts index 0571072..8fe00aa 100644 --- a/src/DependenceManager.ts +++ b/src/DependenceManager.ts @@ -36,18 +36,17 @@ import { Component, ComponentFileItem } from './EIDEProjectModules'; import { GlobalEvent } from './GlobalEvents'; import { SettingManager } from './SettingManager'; import { ExceptionToMessage } from './Message'; -import { AbstractProject } from './EIDEProject'; +import { AbstractProject, VirtualSource } from './EIDEProject'; import { ArrayDelRepetition } from '../lib/node-utility/Utility'; export class DependenceManager implements ManagerInterface { - static readonly DEPENDENCE_DIR = `.eide/deps`; + static readonly DEPS_VFOLDER_NAME = ''; static readonly RTE_FILE_NAME = 'RTE_Components.h'; static readonly toolchainDepName = 'toolchain'; private project: AbstractProject; private prjType: ProjectType | undefined; - private depDir: File | undefined; private componentDefines: Map; @@ -61,27 +60,16 @@ export class DependenceManager implements ManagerInterface { } Init() { - const rootDir = this.project.GetRootDir(); this.prjType = this.project.GetConfiguration().config.type; - this.depDir = File.fromArray([rootDir.path, File.normalize(DependenceManager.DEPENDENCE_DIR)]); this.LoadComponents(); } - InstallComponent(packName: string, component: Component, clearDir: boolean = true) { - - // try add dep root to project before install a component - this.tryAddCompRootDirToProject(); - - const config = this.project.GetConfiguration(); - const toolchain = this.project.getToolchain(); - - const groupDir = File.fromArray([this.getDepDir().path, packName]); - const componentDir = File.fromArray([groupDir.path, component.groupName]); - - componentDir.CreateDir(true); - if (clearDir) { DeleteAllChildren(componentDir); } + InstallComponent(packName: string, component: Component) { + const config = this.project.GetConfiguration(); + const toolchain = this.project.getToolchain(); const packageManager = this.project.GetPackManager(); + const vSource = this.project.getVirtualSourceManager(); const item_filter = function (item: ComponentFileItem): boolean { return (item.attr != 'template') @@ -89,8 +77,8 @@ export class DependenceManager implements ManagerInterface { } /* filter files */ - const asmList = component.asmList.filter(item_filter); - const cFileList = component.cFileList.filter(item_filter); + const asmList = component.asmList.filter(item_filter); + const cFileList = component.cFileList.filter(item_filter); const headerList = component.headerList.filter(item_filter); const linkerList = component.linkerList?.filter(item_filter); @@ -98,42 +86,39 @@ export class DependenceManager implements ManagerInterface { // copy file asmList.forEach((item) => { - componentDir.CopyFile(new File(item.path)); if (item.condition) { conditionList.add(item.condition); } }); cFileList.forEach((item) => { - componentDir.CopyFile(new File(item.path)); if (item.condition) { conditionList.add(item.condition); } }); headerList.forEach((item) => { - componentDir.CopyFile(new File(item.path)); if (item.condition) { conditionList.add(item.condition); } }); linkerList?.forEach((item) => { - componentDir.CopyFile(new File(item.path)); if (item.condition) { conditionList.add(item.condition); } }); + // add source files + const _srcfiles = ArrayDelRepetition(headerList.concat(cFileList, asmList).map(f => f.path)); + this.createComponentDir(packName, component.groupName); + vSource.addFiles( + VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME, packName, component.groupName), _srcfiles); + // add condiions to cache this.addComponentCache(packName, component.groupName, Array.from(conditionList)); const incList = component.incDirList.map(item => item.path); - - // add dependence dir - incList.push(componentDir.path); - const dep: Dependence = { name: component.groupName, incList: incList, - sourceDirList: [componentDir.path], libList: component.libList ? component.libList.map((item) => { return item.path; }) : [], defineList: component.defineList || [] }; @@ -149,12 +134,16 @@ export class DependenceManager implements ManagerInterface { private InstallBuildInComponent(packName: string, component: Component) { - const config = this.project.GetConfiguration(); + const config = this.project.GetConfiguration(); + const sources = ArrayDelRepetition(component.cFileList.concat(component.asmList).map(f => f.path)); + + if (sources.length > 0) { + this.createComponentDir(packName, component.groupName); + } const dep: Dependence = { name: component.groupName, incList: component.incDirList.map(item => item.path), - sourceDirList: [], libList: component.libList ? component.libList.map((item) => { return item.path; }) : [], defineList: component.defineList || [] }; @@ -172,20 +161,13 @@ export class DependenceManager implements ManagerInterface { const config = this.project.GetConfiguration(); - const componentDir = File.fromArray([this.getDependenceRootFolder().path, packName, componentName]); - if (componentDir.IsDir()) { - DeleteDir(componentDir); - } + this.deleteComponentDir(packName, componentName); if (config.IsExisted(packName, componentName)) { config.RemoveDependence(packName, componentName); } - // force delete build-in folder - const depRootFoler = new File(componentDir.dir); - if (depRootFoler.IsDir()) { - DeleteDir(depRootFoler); - } + this.deletePackageDir(packName); // remove from cache this.removeComponentCache(packName, componentName); @@ -197,17 +179,14 @@ export class DependenceManager implements ManagerInterface { const config = this.project.GetConfiguration(); - const componentDir = File.fromArray([this.getDepDir().path, packName, componentName]); - if (componentDir.IsDir()) { - DeleteDir(componentDir); - } + this.deleteComponentDir(packName, componentName); if (config.IsExisted(packName, componentName)) { config.RemoveDependence(packName, componentName); } if (config.IsDependenceEmpty(packName)) { // delete folder if no deps - DeleteDir(new File(componentDir.dir)); + this.deletePackageDir(packName); } // remove from cache @@ -242,13 +221,6 @@ export class DependenceManager implements ManagerInterface { this.ClearObsoleteComponentDependence(); // clear invalid dependencies } - getDependenceRootFolder(): File { - if (this.depDir === undefined) { - throw new Error('eide depDir is undefined'); - } - return this.depDir; - } - // force flush toolchain dependence flushToolchainDep(notCacheEvt?: boolean) { try { @@ -323,17 +295,43 @@ export class DependenceManager implements ManagerInterface { //-- - private tryAddCompRootDirToProject() { - const depRoot = this.getDependenceRootFolder(); - if (!depRoot.IsDir()) depRoot.CreateDir(false); - const prjConfig = this.project.GetConfiguration(); - prjConfig.addSrcDirAtFirst(depRoot.path); - prjConfig.CustomDep_AddIncDir(depRoot); + private createDepsRootFolder() { + const vSource = this.project.getVirtualSourceManager(); + vSource.addFolder(DependenceManager.DEPS_VFOLDER_NAME); + } + + private createComponentDir(pkg_name: string, component_name: string) { + this.createDepsRootFolder(); + const vSource = this.project.getVirtualSourceManager(); + vSource.addFolder(pkg_name, VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME)); + vSource.addFolder(component_name, VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME, pkg_name)); + } + + private deleteComponentDir(pkg_name: string, component_name: string) { + const vSource = this.project.getVirtualSourceManager(); + vSource.removeFolder( + VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME, pkg_name, component_name)); + } + + private deleteDepsRootFolder() { + const vSource = this.project.getVirtualSourceManager(); + vSource.removeFolder( + VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME)); } - private getDepDir(): File { - this.depDir?.CreateDir(false); - return this.depDir; + private deletePackageDir(pkg_name: string) { + const vSource = this.project.getVirtualSourceManager(); + vSource.removeFolder( + VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME, pkg_name)); + /* remove deps root folder if it's empty */ + const folder = vSource.getFolder(VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME)); + if (folder && folder.folders.length == 0) { + if (folder.files.length == 0) + this.deleteDepsRootFolder(); + else if (folder.files.length == 1 && + NodePath.basename(folder.files[0].path) == DependenceManager.RTE_FILE_NAME) + this.deleteDepsRootFolder(); + } } private isAutoGenRTEHeader(): boolean { @@ -353,17 +351,10 @@ export class DependenceManager implements ManagerInterface { if (prjConfig.IsExisted(packInfo.name, component.groupName)) { - const componentDirPath = this.getDepDir().path + File.sep - + packInfo.name + File.sep - + component.groupName; - const incList = component.incDirList.map((item): string => { return item.path; }); - incList.push(componentDirPath); - const dep: Dependence = { name: component.groupName, incList: incList, - sourceDirList: [componentDirPath], libList: component.libList?.map((item) => { return item.path; }) || [], defineList: [] }; @@ -381,6 +372,7 @@ export class DependenceManager implements ManagerInterface { if (isAutoGenerate) { this.GenerateRTEComponentsFile(Array.from(this.componentDefines.values())); + prjConfig.CustomDep_AddIncDirAtFirst(this.project.getRootDir()); } } @@ -388,6 +380,14 @@ export class DependenceManager implements ManagerInterface { if (this.isAutoGenRTEHeader() && !this.componentDefines.has(component.groupName)) { this.componentDefines.set(component.groupName, component.RTE_define || ''); this.GenerateRTEComponentsFile(Array.from(this.componentDefines.values())); + /* add RTE header to resource manager */ + const vSource = this.project.getVirtualSourceManager(); + const vFile = vSource.getFile(VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME, DependenceManager.RTE_FILE_NAME)); + if (!vFile) { + vSource.addFile(VirtualSource.toAbsPath(DependenceManager.DEPS_VFOLDER_NAME), + File.from(this.project.getRootDir().path, DependenceManager.RTE_FILE_NAME).path); + this.project.GetConfiguration().CustomDep_AddIncDirAtFirst(this.project.getRootDir()); + } } } @@ -422,13 +422,13 @@ export class DependenceManager implements ManagerInterface { content = content.concat(lines, contentTail); - const rteFile = File.fromArray([this.getDepDir().path, DependenceManager.RTE_FILE_NAME]); + const rteFile = File.from(this.project.getRootDir().path, DependenceManager.RTE_FILE_NAME); rteFile.Write(content.join(os.EOL)); } private DeleteRTEComponentsHeader() { try { - const rte_header = File.fromArray([this.getDepDir().path, DependenceManager.RTE_FILE_NAME]); + const rte_header = File.from(this.project.getRootDir().path, DependenceManager.RTE_FILE_NAME); if (rte_header.IsFile()) { fs.unlinkSync(rte_header.path); } } catch (error) { // do nothing diff --git a/src/EIDEProject.ts b/src/EIDEProject.ts index 0fa78c4..29f5d6b 100644 --- a/src/EIDEProject.ts +++ b/src/EIDEProject.ts @@ -63,6 +63,11 @@ import { view_str$prompt$not_found_compiler, view_str$operation$name_can_not_be_blank, view_str$operation$name_can_not_have_invalid_char, view_str$prompt$project_is_opened_by_another, + WARNING, + view_str$prompt$chipPkgNotCompateThisVersion, + view_str$prompt$userCanceledOperation, + continue_text, + cancel_text, } from './StringTable'; import { SettingManager } from './SettingManager'; import { ExeCmd } from '../lib/node-utility/Executable'; @@ -139,6 +144,11 @@ export class VirtualSource implements SourceProvider { return path.startsWith(VirtualSource.rootName); } + public static toAbsPath(...paths: string[]): string { + if (paths.length == 0) return VirtualSource.rootName; + return VirtualSource.rootName + '/' + paths.join('/'); + } + public getRoot(): VirtualFolder { return this.config.virtualFolder; } @@ -786,7 +796,7 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr static readonly asmfileFilter: RegExp = /\.(?:s|asm|a51)$/i; // this folder list will be excluded when search include path - static readonly excludeIncSearchList: string[] = [DependenceManager.DEPENDENCE_DIR]; + static readonly excludeIncSearchList: string[] = []; // this folder will be excluded when search source path static readonly excludeDirFilter: RegExp = /^\./; @@ -1021,40 +1031,15 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr // compat old project if (this.isOldVersionProject) { - // rename old 'deps' folder name for old eide version - const depsFolder = File.fromArray([this.GetRootDir().path, File.normalize(DependenceManager.DEPENDENCE_DIR)]); - if (!depsFolder.IsDir()) { // if 'deps' folder is not exist - - // these folder is for old eide version - const oldDepsFolders = [ - new File(this.GetRootDir().path + File.sep + 'deps'), - new File(this.GetRootDir().path + File.sep + 'dependence') - ]; - - // create new 'deps' folder - // fs.mkdirSync(depsFolder.path); - - // copy dependence data from old version deps folder - for (const folder of oldDepsFolders) { - if (folder.IsDir()) { - - // copy dependence data - fs.renameSync(folder.path, depsFolder.path); - - // reset exclude info - const excludeList = this.GetConfiguration().config.excludeList; - const pathMatcher = `.${File.sep}${folder.name}${File.sep}`; - const pathReplacer = `${DependenceManager.DEPENDENCE_DIR}/`; - for (let index = 0; index < excludeList.length; index++) { - const element = excludeList[index]; - if (element.startsWith(pathMatcher)) { - excludeList[index] = element.replace(pathMatcher, pathReplacer); - } - } - - break; // exit, when copy done - } - } + // these folder is for old eide version + // we will delete them + const oldDepsFolders = [ + new File(this.getEideDir().path + File.sep + 'deps'), + new File(this.GetRootDir().path + File.sep + 'deps'), + new File(this.GetRootDir().path + File.sep + 'dependence') + ]; + for (const folder of oldDepsFolders) { + platform.DeleteDir(folder); } // merge old 'env.ini' files for v2.15.3^ @@ -1144,15 +1129,17 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr // auto add deps folder to project if (this.isNewProject) { if (prjConfig.config.type === 'ARM') { // force add `dependence` folder to project and include list - this.dependenceManager.getDependenceRootFolder().CreateDir(false); - prjConfig.addSrcDirAtFirst(this.dependenceManager.getDependenceRootFolder().path); - prjConfig.CustomDep_AddIncDir(this.dependenceManager.getDependenceRootFolder()); + // nothing todo } else { // remove these folders for other mcu project - platform.DeleteDir(this.dependenceManager.getDependenceRootFolder()); - prjConfig.RemoveSrcDir(this.dependenceManager.getDependenceRootFolder().path); - prjConfig.CustomDep_RemoveIncDir(this.dependenceManager.getDependenceRootFolder().path); + // nothing todo } } + + // remove old deps folder + if (this.isOldVersionProject) { + prjConfig.RemoveSrcDir(NodePath.join(this.getRootDir().path, AbstractProject.EIDE_DIR, 'deps')); + prjConfig.CustomDep_RemoveIncDir(this.toAbsolutePath('.eide/deps')); + } } getWsPath(): string { @@ -1347,20 +1334,27 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr throw new Error(view_str$prompt$project_is_opened_by_another.replace('{path}', wsFile.path)); } - await this.BeforeLoad(wsFile); - this.LoadConfigurations(wsFile); - this.loadProjectDirectory(); - this.initProjectConfig(); - this.loadToolchain(); - this.loadUploader(); - this.initProjectComponents(); - this.RegisterEvent(); - this.LoadSourceRootFolders(); - await this.AfterLoad(); + try { + await this.BeforeLoad(wsFile); + this.LoadConfigurations(wsFile); + this.loadProjectDirectory(); + this.initProjectConfig(); + this.loadToolchain(); + this.loadUploader(); + this.initProjectComponents(); + this.RegisterEvent(); + this.LoadSourceRootFolders(); + await this.AfterLoad(); + } catch (error) { + if (this.lock_handle) + FileLock.unlock(this.lock_handle); + throw error; + } } Close() { - if (this.lock_handle) FileLock.unlock(this.lock_handle); + if (this.lock_handle) + FileLock.unlock(this.lock_handle); this.sourceRoots.DisposeAll(); this.configMap.Dispose(); this.eideDirWatcher?.Close(); @@ -1518,7 +1512,6 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr // convert to abs path curDep.incList = curDep.incList.map(path => this.ToAbsolutePath(path, false)); curDep.libList = curDep.libList.map(path => this.ToAbsolutePath(path, false)); - curDep.sourceDirList = curDep.sourceDirList.map(path => this.ToAbsolutePath(path, false)); continue; } @@ -2592,9 +2585,7 @@ $(OUT_DIR): const prjv_vs_eidev = compareVersion(prj_version, eide_conf_v); if (prjv_vs_eidev > 0) { // prj version > eide, error throw Error(`The project config version is '${conf.version}', but eide is '${EIDE_CONF_VERSION}'. Please update 'eide' to the latest version !`); - } else if (prjv_vs_eidev < 0) { // prj version < eide, update it - conf.version = EIDE_CONF_VERSION; - eideFile.Write(JSON.stringify(conf)); + } else if (prjv_vs_eidev < 0) { // prj version < eide this.isOldVersionProject = true; this.oldProjectVersion = prj_version; } @@ -2605,6 +2596,27 @@ $(OUT_DIR): conf.miscInfo.uid == undefined) { this.isNewProject = true; } + + // compatibility note + if (this.isOldVersionProject) { + /* check this project have a package dependence ? */ + const dep_idx = conf.dependenceList.findIndex(dep => + dep.groupName != ProjectConfiguration.BUILD_IN_GROUP_NAME && + dep.groupName != ProjectConfiguration.CUSTOM_GROUP_NAME); + if (conf.packDir && dep_idx != -1) { + const sel = await vscode.window.showWarningMessage( + `${WARNING}: ${view_str$prompt$chipPkgNotCompateThisVersion}`, continue_text, cancel_text); + if (sel !== continue_text) { + throw Error(view_str$prompt$userCanceledOperation); + } + } + } + + /* udpate project version to lastest */ + if (this.isOldVersionProject) { + conf.version = EIDE_CONF_VERSION; + eideFile.Write(JSON.stringify(conf)); + } } protected async AfterLoad(): Promise { @@ -3167,7 +3179,7 @@ class EIDEProject extends AbstractProject { const group = _group; const rePath = this.ToRelativePath(group.dir.path); // combine HAL folder - if (rePath && rePath.startsWith(DependenceManager.DEPENDENCE_DIR)) { + if (rePath && rePath.startsWith(PackageManager.PACK_DIR)) { halFiles = halFiles.concat(group.files); } else { fileGroups.push({ @@ -3511,6 +3523,18 @@ class EIDEProject extends AbstractProject { } } + // delete '.eide/log' folder + if (this.isNewProject || this.isOldVersionProject) { + const _d = File.from(this.getRootDir().path, '.eide', 'log'); + if (_d.IsDir()) { + try { + platform.DeleteDir(_d); + } catch (error) { + GlobalEvent.emit('globalLog', ExceptionToMessage(error)); + } + } + } + // show warnings if we have setTimeout(async (rootFolder: File) => { try { diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index 4ba8b41..ac640eb 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -227,9 +227,9 @@ class ModifiableDepInfo { case 'libList': this.type = 'LIB_GROUP'; break; - case 'sourceDirList': - this.type = 'SOURCE_GROUP'; - break; + // case 'sourceList': + // this.type = 'SOURCE_GROUP'; + // break; default: this.type = 'None'; break; @@ -1095,18 +1095,41 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco break; case TreeItemType.PROJECT: { + // add some specific folder to first + const _depsFolder = project + .getVirtualSourceManager() + .getFolder(`${VirtualSource.rootName}/${DependenceManager.DEPS_VFOLDER_NAME}`); + if (_depsFolder && (_depsFolder.files.length +_depsFolder.folders.length) > 0) { + const folderDispName = view_str$project$cmsis_components; + const itemType = TreeItemType.V_FOLDER_ROOT; + const vFolderPath = `${VirtualSource.rootName}/${_depsFolder.name}`; + const hasExtraArgs = project.hasExtraArgsForFolder(vFolderPath, prjExtraArgs, true); + iList.push(new ProjTreeItem(itemType, { + value: folderDispName, + obj: { path: vFolderPath, vFolder: _depsFolder }, + projectIndex: element.val.projectIndex, + otherCtx: { hasExtraArgs: hasExtraArgs }, + contextVal: 'FOLDER_ROOT_DEPS', + icon: 'DependencyGraph_16x.svg', + tooltip: newFileTooltipString({ + name: folderDispName, + path: vFolderPath, + desc: undefined, + attr: { + 'SubFiles': _depsFolder.files.length.toString(), + 'SubFolders': _depsFolder.folders.length.toString() + } + }) + })); + } + // push filesystem source folder project.getSourceRootFolders() - .sort((info_1, info_2) => { - const isComponent = File.ToUnixPath(info_1.displayName) === DependenceManager.DEPENDENCE_DIR; - return isComponent ? -1 : info_1.displayName.localeCompare(info_2.displayName); - }) + .sort((folder_1, folder_2) => { return folder_1.displayName.localeCompare(folder_2.displayName); }) .forEach((rootInfo) => { - const isComponent = File.ToUnixPath(rootInfo.displayName) === DependenceManager.DEPENDENCE_DIR; - const folderDispName = isComponent ? view_str$project$cmsis_components : rootInfo.displayName; + const folderDispName = rootInfo.displayName; const isExisted = rootInfo.fileWatcher.file.IsDir(); let dirIcon: string | undefined; - if (isComponent) dirIcon = 'DependencyGraph_16x.svg'; if (rootInfo.needUpdate || !isExisted) dirIcon = 'StatusWarning_16x.svg'; let dirDesc: string | undefined; if (rootInfo.needUpdate) dirDesc = view_str$project$needRefresh; @@ -1116,7 +1139,6 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco value: folderDispName, obj: rootInfo.fileWatcher.file, projectIndex: element.val.projectIndex, - contextVal: isComponent ? 'FOLDER_ROOT_DEPS' : undefined, icon: dirIcon, otherCtx: { hasExtraArgs: hasExtraArgs }, tooltip: newFileTooltipString({ @@ -1132,6 +1154,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco project.getVirtualSourceRoot().folders .sort((folder1, folder2) => { return folder1.name.localeCompare(folder2.name); }) .forEach((vFolder) => { + if (vFolder.name == DependenceManager.DEPS_VFOLDER_NAME) return; // skip folder const vFolderPath = `${VirtualSource.rootName}/${vFolder.name}`; const isExcluded = project.isExcluded(vFolderPath); const itemType = isExcluded ? TreeItemType.V_EXCFOLDER : TreeItemType.V_FOLDER_ROOT; @@ -2366,7 +2389,6 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco name: 'default', incList: [], defineList: [], - sourceDirList: [], libList: [] }; @@ -2598,7 +2620,6 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco name: 'default', incList: [], defineList: [], - sourceDirList: [], libList: [] }; @@ -3123,7 +3144,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco } // init custom dependence after specific configs done - newTarget.custom_dep = { name: 'default', sourceDirList: [], libList: [] }; + newTarget.custom_dep = { name: 'default', libList: [] }; const incList = keilTarget.incList.map((path) => baseInfo.rootFolder.ToRelativePath(path) || path); newTarget.custom_dep.incList = defIncList.concat(incList); newTarget.custom_dep.defineList = keilTarget.defineList; diff --git a/src/EIDETypeDefine.ts b/src/EIDETypeDefine.ts index e966f63..e48951d 100644 --- a/src/EIDETypeDefine.ts +++ b/src/EIDETypeDefine.ts @@ -33,7 +33,7 @@ import * as child_process from 'child_process'; import { File } from "../lib/node-utility/File"; import { FileWatcher } from "../lib/node-utility/FileWatcher"; import { - include_desc, lib_desc, source_dir_desc, definition_list_desc, + include_desc, lib_desc, source_list_desc, definition_list_desc, } from "./StringTable"; import { ArrayDelRepetition } from "../lib/node-utility/Utility"; import { GlobalEvent } from "./GlobalEvents"; @@ -47,7 +47,7 @@ import { CompileConfigModel, UploadConfigModel, SdccCompileConfigModel, GccCompi //////////////////////////////////////////////////////// // eide project config file version -export const EIDE_CONF_VERSION = '3.3'; +export const EIDE_CONF_VERSION = '3.4'; //////////////////////////////////////////////////////// @@ -342,7 +342,6 @@ export interface Dependence { name: string; incList: string[]; // absolute path with env variables libList: string[]; // absolute path with env variables - sourceDirList: string[]; // absolute path with env variables defineList: string[]; } @@ -523,19 +522,16 @@ export class ProjectConfiguration incList: [], libList: [], defineList: [], - sourceDirList: [] }; depList.forEach(dep => { merge.defineList = merge.defineList.concat(dep.defineList); - merge.sourceDirList = merge.sourceDirList.concat(dep.sourceDirList); merge.libList = merge.libList.concat(dep.libList); merge.incList = merge.incList.concat(dep.incList); }); // clear duplicate merge.defineList = ArrayDelRepetition(merge.defineList); - merge.sourceDirList = ArrayDelRepetition(merge.sourceDirList); merge.libList = ArrayDelRepetition(merge.libList); merge.incList = ArrayDelRepetition(merge.incList); @@ -727,8 +723,8 @@ export class ProjectConfiguration return include_desc + (withRawName ? ` (IncludePaths)` : ''); case 'libList': return lib_desc + (withRawName ? ` (StaticLibrarySearchDirs)` : ''); - case 'sourceDirList': - return source_dir_desc + (withRawName ? ` (SourceDirs)` : ''); + // case 'sourceList': + // return source_list_desc + (withRawName ? ` (SourceFiles)` : ''); case 'defineList': return definition_list_desc + (withRawName ? ` (C/C++ Macros)` : ''); default: @@ -892,7 +888,7 @@ export class ProjectConfiguration addSrcDirAtFirst(absPath: string) { if (!this.config.srcDirs.includes(absPath)) { - this.config.srcDirs = [absPath].concat(this.config.srcDirs); + this.config.srcDirs.unshift(absPath); this.emit('dataChanged', { type: 'srcRootAdd', data: absPath }); } } @@ -919,7 +915,6 @@ export class ProjectConfiguration name: 'default', incList: [], libList: [], - sourceDirList: [], defineList: [] }; } @@ -1016,7 +1011,6 @@ export class ProjectConfiguration name: 'default', incList: [], libList: [], - sourceDirList: [], defineList: [] }; } @@ -1061,6 +1055,14 @@ export class ProjectConfiguration } } + CustomDep_AddIncDirAtFirst(dir: File) { + const dep = this.CustomDep_getDependence(); + if (!dep.incList.includes(dir.path)) { + dep.incList.unshift(dir.path); + this.emit('dataChanged', { type: 'dependence' }); + } + } + /** * @return duplicated paths list */ @@ -1220,7 +1222,6 @@ export class ProjectConfiguration const custom_dep = utility.deepCloneObject(this.CustomDep_getDependence()); custom_dep.incList = custom_dep.incList.map((path) => this.toRelativePath(path)); custom_dep.libList = custom_dep.libList.map((path) => this.toRelativePath(path)); - custom_dep.sourceDirList = custom_dep.sourceDirList.map((path) => this.toRelativePath(path)); return { excludeList: Array.from(target.excludeList), @@ -1265,7 +1266,6 @@ export class ProjectConfiguration const custom_dep = this.CustomDep_getDependence(); custom_dep.incList = Array.from(target.custom_dep.incList); custom_dep.libList = Array.from(target.custom_dep.libList); - custom_dep.sourceDirList = Array.from(target.custom_dep.sourceDirList); custom_dep.defineList = Array.from(target.custom_dep.defineList); } @@ -1373,7 +1373,6 @@ export class ProjectConfiguration for (const dep of depGroup.depList) { dep.incList = ArrayDelRepetition(dep.incList.map((path) => { return this.toAbsolutePath(path); })); dep.libList = ArrayDelRepetition(dep.libList.map((path) => { return this.toAbsolutePath(path); })); - dep.sourceDirList = ArrayDelRepetition(dep.sourceDirList.map((path) => { return this.toAbsolutePath(path); })); } } } @@ -1404,7 +1403,6 @@ export class ProjectConfiguration for (const dep of depGroup.depList) { dep.incList = dep.incList.map((path) => this.toRelativePath(path)); dep.libList = dep.libList.map((path) => this.toRelativePath(path)); - dep.sourceDirList = dep.sourceDirList.map((path) => this.toRelativePath(path)); } } diff --git a/src/StringTable.ts b/src/StringTable.ts index 9bab65f..f99219d 100644 --- a/src/StringTable.ts +++ b/src/StringTable.ts @@ -324,9 +324,9 @@ export const lib_desc = [ 'Library Search Directories' ][langIndex]; -export const source_dir_desc = [ - '源文件目录', - 'Source File Directories' +export const source_list_desc = [ + '源文件列表', + 'Source Files List' ][langIndex]; export const definition_list_desc = [ @@ -418,6 +418,16 @@ export const view_str$env_desc$compiler_folder = [ //---------------Other--------------- +export const view_str$prompt$userCanceledOperation = [ + `用户取消了操作。`, + `The user canceled the operation.` +][langIndex]; + +export const view_str$prompt$chipPkgNotCompateThisVersion = [ + `不兼容的项目,'芯片支持包' 功能在新版本的 eide 中发生了变化,点击 '继续' 将强制打开项目并移除不兼容的数据,点击 '取消' 则退出。`, + `Incompatible project, the 'Chip Support Package' function has changed in the new version of eide, clicking 'Continue' will force the project to open, and clicking 'Cancel' will cancel the opening.` +][langIndex]; + export const view_str$prompt$removeSrcDir = [ `从项目中移除源文件夹 '{}' ?`, `Remove source folder '{}' from current project ?` From 3ed8a814e40cd2637d6526b5a3ed2455ce3aba23 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 16:25:57 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E4=B8=BA=20DeviceName=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=82=AC=E5=81=9C=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/EIDEProjectExplorer.ts | 9 ++++++++- src/EIDEProjectModules.ts | 2 ++ src/PackageManager.ts | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index ac640eb..dc42653 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -1584,10 +1584,17 @@ class ProjectDataProvider implements vscode.TreeDataProvider, vsco projectIndex: element.val.projectIndex })); + const devFamily = project.GetPackManager().getDeviceFamily(); + let description: vscode.MarkdownString | string | undefined; + if (devFamily && devFamily.description) { + description = devFamily.description; // newMarkdownString(devFamily.description); + } + iList.push(new ProjTreeItem(TreeItemType.ITEM, { key: 'DeviceName', value: device.name, - projectIndex: element.val.projectIndex + projectIndex: element.val.projectIndex, + tooltip: description })); iList.push(new ProjTreeItem(TreeItemType.ITEM, { diff --git a/src/EIDEProjectModules.ts b/src/EIDEProjectModules.ts index a1dc5f1..137ac0e 100644 --- a/src/EIDEProjectModules.ts +++ b/src/EIDEProjectModules.ts @@ -135,6 +135,7 @@ export interface DeviceInfo { export interface SubFamily { name: string; core?: string; + description?: string; deviceList: DeviceInfo[]; } @@ -143,6 +144,7 @@ export interface DeviceFamily { vendor: string; core?: string; series: string; + description?: string; deviceList: DeviceInfo[]; subFamilyList: SubFamily[]; } diff --git a/src/PackageManager.ts b/src/PackageManager.ts index 831b74c..4e5d6af 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -220,6 +220,20 @@ export class PackageManager { } } + getDeviceFamily(device?: CurrentDevice): SubFamily | DeviceFamily | undefined { + const curDevInfo = device || this.currentDevice; + if (curDevInfo) { + if (curDevInfo.subFamilyIndex >= 0) { + return curDevInfo.packInfo + .familyList[curDevInfo.familyIndex] + .subFamilyList[curDevInfo.subFamilyIndex]; + } else { + return curDevInfo.packInfo + .familyList[curDevInfo.familyIndex]; + } + } + } + GetDeviceList(): DeviceInfo[] { const list: DeviceInfo[] = []; @@ -659,6 +673,10 @@ export class PackageManager { subFamilyList: [] }; + if (typeof family.description == 'string') { + _famliy.description = family.description; + } + if (family.subFamily) { this._preHandleSubfamily(family); @@ -686,6 +704,9 @@ export class PackageManager { deviceList: [] }; + if (typeof subFamily.description == 'string') + _subFamily.description = subFamily.description; + // Series specific rom/ram let ramList: ARMRamItem[] = []; let romList: ARMRomItem[] = []; From 40493d60e5a850423f719827decdbd66cf751904 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 18:31:31 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E5=AE=89=E8=A3=85=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E5=AE=89=E8=A3=85=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DependenceManager.ts | 36 ++++++++++++++++++++++++++-- src/EIDEProject.ts | 12 ++++++++-- src/EIDEProjectExplorer.ts | 2 ++ src/EIDEProjectModules.ts | 1 + src/PackageManager.ts | 48 +++++++++++++++++++++++++++++++------- 5 files changed, 86 insertions(+), 13 deletions(-) diff --git a/src/DependenceManager.ts b/src/DependenceManager.ts index 8fe00aa..4514553 100644 --- a/src/DependenceManager.ts +++ b/src/DependenceManager.ts @@ -65,12 +65,42 @@ export class DependenceManager implements ManagerInterface { } InstallComponent(packName: string, component: Component) { + this._installComponent(packName, component, [component.groupName]); + } + + private _installComponent(packName: string, component: Component, pendingList: string[]) { const config = this.project.GetConfiguration(); const toolchain = this.project.getToolchain(); const packageManager = this.project.GetPackManager(); const vSource = this.project.getVirtualSourceManager(); + /* 安装此组件的依赖项 */ + if (component.condition) { + const r = packageManager.CheckConditionRequire(component.condition, toolchain); + if (r == false) + throw new Error(`This condition '${component.condition}' is not met for component: '${component.groupName}'`); + if (Array.isArray(r)) { + for (const comp of r) { + const compName = comp.replace('Device.', ''); + if (!comp.startsWith('Device.')) + continue; /* 排除非 Device 类型的组件 */ + if (this.isInstalled(packName, compName)) + continue; /* 排除已安装的 */ + if (pendingList.includes(compName)) + continue; /* 排除队列中已存在的 */ + const t = packageManager.FindComponent(compName); + if (t) { + pendingList.push(compName); + this._installComponent(packName, t, pendingList); + pendingList.pop(); + } else { + throw new Error(`Not found required sub component: '${comp}'`); + } + } + } + } + const item_filter = function (item: ComponentFileItem): boolean { return (item.attr != 'template') && (item.condition ? packageManager.CheckCondition(item.condition, toolchain) : true); @@ -83,6 +113,7 @@ export class DependenceManager implements ManagerInterface { const linkerList = component.linkerList?.filter(item_filter); const conditionList: Set = new Set(); + const includeList: string[] = component.incDirList.map(item => item.path); // copy file asmList.forEach((item) => { @@ -96,6 +127,8 @@ export class DependenceManager implements ManagerInterface { } }); headerList.forEach((item) => { + if (includeList.findIndex(p => File.isSubPathOf(p, item.path)) == -1) + includeList.push(NodePath.dirname(item.path)); if (item.condition) { conditionList.add(item.condition); } @@ -115,10 +148,9 @@ export class DependenceManager implements ManagerInterface { // add condiions to cache this.addComponentCache(packName, component.groupName, Array.from(conditionList)); - const incList = component.incDirList.map(item => item.path); const dep: Dependence = { name: component.groupName, - incList: incList, + incList: includeList, libList: component.libList ? component.libList.map((item) => { return item.path; }) : [], defineList: component.defineList || [] }; diff --git a/src/EIDEProject.ts b/src/EIDEProject.ts index 29f5d6b..d7df386 100644 --- a/src/EIDEProject.ts +++ b/src/EIDEProject.ts @@ -1369,7 +1369,11 @@ export abstract class AbstractProject implements CustomConfigurationProvider, Pr if (device) { const component = this.packManager.FindComponent(name); if (component) { - this.dependenceManager.InstallComponent(device.packInfo.name, component); + try { + this.dependenceManager.InstallComponent(device.packInfo.name, component); + } catch (error) { + GlobalEvent.emit('msg', ExceptionToMessage(error, 'Warning')); + } } } } @@ -2765,7 +2769,11 @@ class EIDEProject extends AbstractProject { if (compItem.state === ComponentUpdateType.Expired) { // if need reinstalled const comp = this.packManager.FindComponent(compItem.name); if (comp) { - this.dependenceManager.InstallComponent(packInfo.name, comp); + try { + this.dependenceManager.InstallComponent(packInfo.name, comp); + } catch (error) { + GlobalEvent.emit('globalLog', ExceptionToMessage(error, 'Warning')); + } } } diff --git a/src/EIDEProjectExplorer.ts b/src/EIDEProjectExplorer.ts index dc42653..d1a78d2 100644 --- a/src/EIDEProjectExplorer.ts +++ b/src/EIDEProjectExplorer.ts @@ -6288,6 +6288,8 @@ export class ProjectExplorer implements CustomConfigurationProvider { for (const dep of group.depList) { for (const incPath of dep.incList) { const repath = prj.toRelativePath(incPath); + if (includes.includes(repath)) + continue; // skip it existed includes.push(repath); includesMap.set(repath, group.groupName); } diff --git a/src/EIDEProjectModules.ts b/src/EIDEProjectModules.ts index 137ac0e..d9d3e54 100644 --- a/src/EIDEProjectModules.ts +++ b/src/EIDEProjectModules.ts @@ -98,6 +98,7 @@ export interface Condition { Dname?: RegExp; compiler?: string; compilerOption?: string; + component?: string; } export interface ConditionGroup { diff --git a/src/PackageManager.ts b/src/PackageManager.ts index 4e5d6af..fe187ad 100644 --- a/src/PackageManager.ts +++ b/src/PackageManager.ts @@ -40,6 +40,7 @@ import { AbstractProject } from './EIDEProject'; import { ExceptionToMessage, newMessage } from './Message'; import { ResManager } from './ResManager'; import { ExeCmd } from '../lib/node-utility/Executable'; +import { ArrayDelRepetition } from '../lib/node-utility/Utility'; export enum ComponentUpdateType { Disabled = 1, @@ -326,7 +327,7 @@ export class PackageManager { } private _checkConditionGroup(gMap: ConditionMap, - cGroup: ConditionGroup, cDev: CurrentDevice, toolchain?: IToolchian): boolean { + cGroup: ConditionGroup, cDev: CurrentDevice, comp_requires: string[], toolchain?: IToolchian): boolean { const familyInfo = cDev.packInfo.familyList[cDev.familyIndex]; const devInfo = this.getCurrentDevInfo(cDev); @@ -356,11 +357,15 @@ export class PackageManager { return false; } + if (con.component) { + comp_requires.push(con.component); + } + if (con.condition && !this._recurseList.includes(con.condition)) { const _group = gMap.get(con.condition); if (_group) { this._recurseList.push(con.condition); - if (!this._checkConditionGroup(gMap, _group, cDev, toolchain)) { + if (!this._checkConditionGroup(gMap, _group, cDev, comp_requires, toolchain)) { return false; } } @@ -413,7 +418,7 @@ export class PackageManager { const _group = gMap.get(con.condition); if (_group) { this._recurseList.push(con.condition); - if (this._checkConditionGroup(gMap, _group, cDev, toolchain)) { + if (this._checkConditionGroup(gMap, _group, cDev, comp_requires, toolchain)) { passCount++; } } else { @@ -438,13 +443,36 @@ export class PackageManager { const cGroup = cMap.get(conditionName); if (cGroup) { this._recurseList = [conditionName]; - return this._checkConditionGroup(cMap, cGroup, this.currentDevice, toolchain); + return this._checkConditionGroup(cMap, cGroup, this.currentDevice, [], toolchain); } } return true; } + CheckConditionRequire(conditionName: string, toolchain: IToolchian): string[] | boolean { + + if (this.currentDevice) { + const cMap = this.currentDevice.packInfo.conditionMap; + const cGroup = cMap.get(conditionName); + if (cGroup) { + this._recurseList = [conditionName]; + const components: string[] = []; + const pass = this._checkConditionGroup(cMap, cGroup, this.currentDevice, components, toolchain); + return pass ? ArrayDelRepetition(components) : false; + } + } + + return true; + } + + makeComponentGroupName(...names: string[]): string { + return names + .filter(n => n !== undefined) + .join('.') + .replace(/\s+/g, ''); + } + private _preHandleSubfamily(family: any) { let _subFamilyList: any[] = []; for (const subFamily of (family.subFamily)) { @@ -957,7 +985,7 @@ export class PackageManager { for (let component of componentList) { const item: Component = { - groupName: component.$Cgroup + (component.$Csub ? ('.' + component.$Csub) : ''), + groupName: this.makeComponentGroupName(component.$Cgroup, component.$Csub), enable: false, description: component.description, incDirList: [], @@ -969,8 +997,6 @@ export class PackageManager { condition: component.$condition }; - item.groupName = item.groupName.replace(/\s+/g, ''); - /* category component's files */ if (Array.isArray(component.files.file)) { @@ -984,14 +1010,15 @@ export class PackageManager { switch (f.$category) { case 'include': - if (/\.(?:h|hpp|hxx|inc)$/.test(f.$name)) { + if (AbstractProject.headerFilter.test(f.$name)) { item.headerList.push(comp_item); } else { item.incDirList.push(comp_item); } break; case 'header': - item.headerList.push(comp_item); + if (AbstractProject.headerFilter.test(f.$name)) + item.headerList.push(comp_item); break; case 'source': case 'library': @@ -1075,6 +1102,9 @@ export class PackageManager { .replace(/\?/g, '.') .replace(/\*/g, '.*?'), 'i'); } + if (require.$Cclass && require.$Cgroup) { + condition.component = this.makeComponentGroupName(require.$Cclass, require.$Cgroup, require.$Csub); + } if (Object.keys(condition).length > 0) { cGroup.requireList.push(condition); From 2fa061354b275906b889f4b1cc4a466c52e6e2b6 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 22:36:21 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B5=9E=E5=8A=A9?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/StringTable.ts | 5 +++++ src/extension.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/StringTable.ts b/src/StringTable.ts index f99219d..1f732e6 100644 --- a/src/StringTable.ts +++ b/src/StringTable.ts @@ -640,6 +640,11 @@ export const view_str$prompt$feedback = [ //---------------Select string------------------ +export const sponsor_author_text = [ + `赞助作者`, + `Sponsor The Author` +][langIndex]; + export const rating_text = [ '打分', 'Rating' diff --git a/src/extension.ts b/src/extension.ts index 47aae7d..90c89fe 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -40,7 +40,7 @@ import { ResInstaller } from './ResInstaller'; import { ERROR, WARNING, INFORMATION, view_str$operation$serialport, view_str$operation$baudrate, view_str$operation$serialport_name, - txt_install_now, txt_yes, view_str$prompt$feedback, rating_text, later_text + txt_install_now, txt_yes, view_str$prompt$feedback, rating_text, later_text, sponsor_author_text } from './StringTable'; import { LogDumper } from './LogDumper'; import { StatusBarManager } from './StatusBarManager'; @@ -324,10 +324,14 @@ function postLaunchHook(extensionCtx: vscode.ExtensionContext) { Date.now() - appUsrData['InstallTime'] > some_days) { resManager.setAppUsrData('Feedbacked', true); const msg = view_str$prompt$feedback; - vscode.window.showInformationMessage(msg, rating_text).then((ans) => { + vscode.window.showInformationMessage(msg, rating_text, sponsor_author_text).then((ans) => { if (ans == rating_text) { utility.openUrl(`https://marketplace.visualstudio.com/items?itemName=CL.eide&ssr=false#review-details`); } + if (ans == sponsor_author_text) { + // https://em-ide.com/sponsor + utility.openUrl(`https://em-ide.com/sponsor`); + } }); } } From 5d286b473397c5d77644234e15482e995b51af73 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 23:08:39 +0800 Subject: [PATCH 20/21] v3.18.0 --- CHANGELOG.md | 23 +++++++++++++++++++++++ package.json | 2 +- src/StringTable.ts | 4 ++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93597f6..1b71332 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,29 @@ All notable version changes will be recorded in this file. *** +### [v3.18.0] update + +**Incompatible Changes**: + - `Chip Support Package`: + - Remove folder: `.eide/deps` and use VirtualFolder `/` instead it. + - The Chip Support Package in older projects will become invalid. And you need to reinstall chip-package and reinstall all CMSIS components. + +**New**: + - `Cortex-Debug Configuration Generator`: A new Debugger Configuration Generator with a simple GUI. + - `pyOCD Flasher UI`: Support append additional cli command when program flash. + - `VSCODE_PORTABLE`: Support `VSCODE_PORTABLE` environment variables. + +**Fix**: + - `Project Environment`: Project environment variables missed. + +**Change**: + - `Builder Configuration UI (SDCC)`: Automatic get processors list by execute command: `sdcc -v` + +**Optimize** + - `MDK Project Import`: Optimize import `Keil User Command`. + +*** + ### [v3.17.3] preview **New**: diff --git a/package.json b/package.json index 0367c8e..4c4b585 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "homepage": "https://em-ide.com", "license": "MIT", "description": "A mcu development environment for 8051/AVR/STM8/Cortex-M/MIPS/RISC-V", - "version": "3.17.3", + "version": "3.18.0", "preview": false, "engines": { "vscode": "^1.67.0" diff --git a/src/StringTable.ts b/src/StringTable.ts index 1f732e6..2d65286 100644 --- a/src/StringTable.ts +++ b/src/StringTable.ts @@ -424,8 +424,8 @@ export const view_str$prompt$userCanceledOperation = [ ][langIndex]; export const view_str$prompt$chipPkgNotCompateThisVersion = [ - `不兼容的项目,'芯片支持包' 功能在新版本的 eide 中发生了变化,点击 '继续' 将强制打开项目并移除不兼容的数据,点击 '取消' 则退出。`, - `Incompatible project, the 'Chip Support Package' function has changed in the new version of eide, clicking 'Continue' will force the project to open, and clicking 'Cancel' will cancel the opening.` + `不兼容的项目,'芯片支持包' 功能在 v3.18.0 版本的 eide 中发生了变化([更新日志](https://marketplace.visualstudio.com/items/CL.eide/changelog)),点击 '继续' 将强制打开项目并移除不兼容的数据,点击 '取消' 则退出。`, + `Incompatible project, the 'Chip Support Package' function has changed in the version v3.18.0 of eide ([ChangeLog](https://marketplace.visualstudio.com/items/CL.eide/changelog)), clicking 'Continue' will force the project to open, and clicking 'Cancel' will cancel the opening.` ][langIndex]; export const view_str$prompt$removeSrcDir = [ From 8110c2511159e5e115da94ba9b4b3f7e65de0c0e Mon Sep 17 00:00:00 2001 From: null Date: Sun, 16 Jun 2024 23:13:33 +0800 Subject: [PATCH 21/21] v3.18.0 update readme --- README.md | 4 ++++ README_ZH-CN.md | 3 +++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index 5096865..7a7cc1e 100644 --- a/README.md +++ b/README.md @@ -108,3 +108,7 @@ You can build this project by your self. - Use `build vsix` to build as a vsix package. + +## Sponsor 👍 + +[Github Sponsor](https://github.com/sponsors/github0null) diff --git a/README_ZH-CN.md b/README_ZH-CN.md index e6dda1d..de69a1b 100644 --- a/README_ZH-CN.md +++ b/README_ZH-CN.md @@ -84,3 +84,6 @@ - 使用 `build vsix` 构建并打包成 VSIX +## 赞助 👍 + +[请作者喝咖啡](https://em-ide.com/sponsor)