diff --git a/leversc/src/MATLAB/@leversc/leversc.m b/leversc/src/MATLAB/@leversc/leversc.m index 35ed034c9eb5ccf9bf815a7c9882ac72089aefe9..73a002abf3a6bcba691c3a09746de4fc5178f51a 100644 --- a/leversc/src/MATLAB/@leversc/leversc.m +++ b/leversc/src/MATLAB/@leversc/leversc.m @@ -30,6 +30,7 @@ classdef leversc <handle optional_figNumber=1; end [im,imD,figNumber]=parseArgs(optional_im,optional_imD,optional_figNumber); + im = imPad4(im); obj.figNumber=figNumber; if isfield(imD,'imageData') CONSTANTS=imD; @@ -122,3 +123,19 @@ end end +function im = imPad4(im) + +pad = [0,0,0]; +for d = 1:3 + if 0~=mod(size(im,d),4) + pad(d) = size(im,d) + 4-mod(size(im,d),4); + end +end +if any(pad) + sz = size(im); + sz = sz(1:3); + pad = max(pad,sz); + im(pad(1),pad(2),pad(3),:) = 0; +end + +end \ No newline at end of file diff --git a/matlab/+Batch/batchProc.m b/matlab/+Batch/batchProc.m index 9bdb4cf09f4a35430284d67d58cbbd5f2432b523..a2ddcb3fbf776dcac79f64bdbe8184999aca1497 100644 --- a/matlab/+Batch/batchProc.m +++ b/matlab/+Batch/batchProc.m @@ -1,7 +1,7 @@ function batchProc(ROOT,nproc,nthread) -parpool(nproc) +ljsStartParallel(nproc); flist = dir(fullfile(ROOT,'*.LEVER')); parfor ff=1:length(flist) diff --git a/matlab/+Batch/processMovie.m b/matlab/+Batch/processMovie.m index 745d9486ad33326ee494fc607326f98798bd8711..8bbce04fe7dfb4215df267d69c2cc6739b83af35 100644 --- a/matlab/+Batch/processMovie.m +++ b/matlab/+Batch/processMovie.m @@ -49,7 +49,8 @@ processInfo.tPatch=getElapsed(tx); tx=tic(); % nMerged = Smooth.Merge.goMerge(conn,CONSTANTS,segParams,nProcessors); -nMerged = Smooth.Merge.goMerge2(conn, CONSTANTS, segParams); +% nMerged = Smooth.Merge.goMerge2(conn, CONSTANTS, segParams); +nMerged = -1; processInfo.tMerge=getElapsed(tx); tx=tic(); diff --git a/matlab/+DenoiseCache/denoiseFolder.m b/matlab/+DenoiseCache/denoiseFolder.m index 72f1770409af637c8e40a6a986c344bf8126f0f0..0d12c85aa0b395a4fd28c82d2aeb6201361ec179 100644 --- a/matlab/+DenoiseCache/denoiseFolder.m +++ b/matlab/+DenoiseCache/denoiseFolder.m @@ -8,7 +8,7 @@ if 2==length(nProcessors) nProcessors=nProcessors(2); end -nProcessors = min(nProcessors,16); +nProcessors = min(nProcessors,8); flist=dir(fullfile(folderName,'*.h5')); if 0==length(flist) diff --git a/matlab/+Helpers/cellEccentricity.m b/matlab/+Helpers/cellEccentricity.m new file mode 100644 index 0000000000000000000000000000000000000000..0f76c5e048e30167a23d4dcded626b238925212d --- /dev/null +++ b/matlab/+Helpers/cellEccentricity.m @@ -0,0 +1,4 @@ +function ecc = cellEccentricity(cx) + +evals = eig(cov(cx.pts)); +ecc = min(evals)/max(evals); \ No newline at end of file diff --git a/matlab/+Lineage/eraseLineage.m b/matlab/+Lineage/eraseLineage.m new file mode 100644 index 0000000000000000000000000000000000000000..79116adb6bbfe7c6db1479c2034302740ac3621f --- /dev/null +++ b/matlab/+Lineage/eraseLineage.m @@ -0,0 +1,9 @@ +function eraseLineage(conn) + +exec(conn,'delete from tblFamilies;delete from uiExtFamilies'); +strDB = conn.DataSource; +Batch.batchTrack(strDB); +Smooth.Patch.patch11(conn); +Smooth.Patch.patch12(conn); +Smooth.Patch.patch21(conn); +Smooth.Patch.patchOcclusion(conn); \ No newline at end of file diff --git a/matlab/+MovieMaker/ssfMovie_erk.m b/matlab/+MovieMaker/ssfMovie_erk.m index 4d68eb566b48208882be651f8709f9f70f809b07..7b850a4a63f18275100ecfa88c7c70371e62c495 100644 --- a/matlab/+MovieMaker/ssfMovie_erk.m +++ b/matlab/+MovieMaker/ssfMovie_erk.m @@ -5,8 +5,6 @@ function ssfMovie1(strDB) bPreview = true - - bwx = bwLoG_pos; bwx(:,:,:,2) = bwLoG_neg; imd = MicroscopeData.MakeMetadataFromImage(bwx); diff --git a/matlab/+Read/findImageFolder.m b/matlab/+Read/findImageFolder.m index 02e7b12f4efa03f96eb6a04b0e0799cf7e717b85..0e381a5925076bc2d1cd104fae5600b84ab92646 100644 --- a/matlab/+Read/findImageFolder.m +++ b/matlab/+Read/findImageFolder.m @@ -42,7 +42,7 @@ if ~exist(ljs,'file') end [fid,message]=fopen(fullfile(leverFolder,'lever.json')); if (fid<=0) - fprintf(1,'ERROR -- getConstants.m -- image path invalid and no lever.json ROOT override (message=%s)\n',message); + fprintf(1,'ERROR %s -- getConstants.m -- image path invalid and no lever.json ROOT override (message=%s)\n',CONSTANTS.imageData.DatasetName,message); return; end diff --git a/matlab/+Read/getCell.m b/matlab/+Read/getCell.m index ce9a54819e278d227a15574b77d7f295c2ca632f..72e20413e3ab5dbb8e7d1d5f55b96588ec07e52c 100644 --- a/matlab/+Read/getCell.m +++ b/matlab/+Read/getCell.m @@ -1,18 +1,22 @@ function Cell=getCell(conn,cellID,CONSTANTS) Cell=[]; - +qTable=fetch(conn,'pragma table_info(tblCells)'); +bLoG = any(cellfun(@length,(strfind(qTable.name,'LoG')))); try - cmd=['SELECT cellID,time,trackID,centroid,u16pixels,maxRadius,channel,area,surface,segCC '... - ' FROM tblCells WHERE cellID=' num2str(cellID)]; + cmd=['SELECT cellID,time,trackID,centroid,u16pixels,maxRadius,channel,area,surface,segCC ']; + if bLoG + cmd = [cmd ' ,LoG ']; + end + cmd =[cmd ' FROM tblCells WHERE cellID=' num2str(cellID)]; Q=ljsFetch(conn,cmd); catch try Cell=Read.getCell3D(conn,cellID); catch fprintf(2,'unable to read cell from %s\n',CONSTANTS.imageData.DatasetName); - return end + return end if isempty(Q) return @@ -32,6 +36,9 @@ Cell.area=Q{8}; Cell.surface=jsondecode(Q{9}); Cell.segCC=Q{10}; +if bLoG + Cell.LoG = Q{11}; +end if exist('CONSTANTS','var') Cell = Read.setCellsIdxPts(Cell,CONSTANTS); end diff --git a/matlab/+Read/getCell3D.m b/matlab/+Read/getCell3D.m index 59bff1b43d28bf6f6fe88c902c08ea9a4c587770..7ade71dea7999ec240c7d9df7a07f64cb5fd3126 100644 --- a/matlab/+Read/getCell3D.m +++ b/matlab/+Read/getCell3D.m @@ -2,7 +2,14 @@ function Cell=getCell3D(conn,cellID,CONSTANTS) Cell=[]; -cmd=['SELECT time,trackID,centroid,channel,area,maxRadius,verts,faces,edges,normals,u16pixels FROM tblCells WHERE cellID=' num2str(cellID)]; +qTable=fetch(conn,'pragma table_info(tblCells)'); +bLoG = any(cellfun(@length,(strfind(qTable.name,'LoG')))); + +cmd=['SELECT time,trackID,centroid,channel,area,maxRadius,verts,faces,edges,normals,u16pixels ']; +if bLoG + cmd = [cmd ',LoG ']; +end +cmd = [cmd ' FROM tblCells WHERE cellID=' num2str(cellID)]; Q=ljsFetch(conn,cmd); % cellid time trackID centroid channel area, maxRadius, % verts,edges,normals,faces,u16pixels diff --git a/matlab/+SSF/catKymographs.m b/matlab/+SSF/catKymographs.m new file mode 100644 index 0000000000000000000000000000000000000000..dbc4f2d70f775cd11f7a9f6532e2595af19f3ca5 --- /dev/null +++ b/matlab/+SSF/catKymographs.m @@ -0,0 +1,26 @@ +% pads time between images +function i12 = catKymographs(i1,i2,dim) +[i1,i2] = padIm(i1,i2); +i12 = cat(dim,i1,i2); +4; + +function [i1,i2] = padIm(i1,i2) + +if size(i1,3)>size(i2,3) + i2(:,:,end:size(i1,3),:)=0; +else + i1(:,:,end:size(i2,3),:)=0; +end + +if size(i1,2)>size(i2,2) + i2(:,end:size(i1,2),:,:)=0; +else + i1(:,end:size(i2,2),:,:)=0; +end + +if size(i1,1)>size(i2,1) + i2(end:size(i1,1),:,:,:)=0; +else + i1(end:size(i2,1),:,:,:)=0; +end + diff --git a/matlab/+SSF/cropKymo.m b/matlab/+SSF/cropKymo.m new file mode 100644 index 0000000000000000000000000000000000000000..c86c14812892d6bd762924e73d6f8b84ce784d1e --- /dev/null +++ b/matlab/+SSF/cropKymo.m @@ -0,0 +1,22 @@ +function im_crop = cropKymo(imSrc,idxPixels) + +% first copy over target pixels +im = 0 * imSrc; +im(idxPixels) = imSrc(idxPixels); + +[r,c,z]=ind2sub(size(im),idxPixels); + +r = cropDim(r,size(im,1)); +c = cropDim(c,size(im,2)); +z = cropDim(z,size(im,3)); + +im_crop = im(min(r):max(r),min(c):max(c),min(z):max(z),:); + + +function y = cropDim(x,sz) + +y = [min(x)-1:max(x)+1]; +y = min(y,sz); +y = max(y,1); + + diff --git a/matlab/+SSF/drawMitoticSSFtracks.m b/matlab/+SSF/drawMitoticSSFtracks.m new file mode 100644 index 0000000000000000000000000000000000000000..d852790910a56a878784506820612d26d6e40fd7 --- /dev/null +++ b/matlab/+SSF/drawMitoticSSFtracks.m @@ -0,0 +1,57 @@ +% erk1D = Y(:,1); +% [~,idxSort] = sort(erk1D); +% qMitoSorted = qMitotic(idxSort,:); +% +function imx = drawMitoticSSFtracks(qMitotic,erkClipLimits,bDraw) + +if ~exist('bDraw','var') + bDraw = false; +end + +for i = 1:height(qMitotic) + if ~isa(qMitotic.erk{i},'uint8') + qMitotic.erk{i} = SSF.quantize8(qMitotic.erk{i},erkClipLimits); + end +end + +tmax = max(cellfun(@length,qMitotic.erk)); +imx = zeros(2*height(qMitotic),tmax); +for i = 1:height(qMitotic) + erk_i = qMitotic.erk{i}; + imx(2*i,end-length(erk_i)+1:end) = erk_i; +end + +if ~bDraw + return +end + + +cmPos = colormap('parula'); +cmNeg = colormap('cool'); +cm = [cmNeg(1:2:end,:);cmPos(1:2:end,:)]; +cm(1,:) = [1,1,1]; + + +figure;imagesc(imx);colormap(cm); +c = colorbar(); +clim = [min(c.Ticks),max(c.Ticks)]; +cticks = [clim(1), mean([clim(1),mean(clim)]), mean(clim), mean([clim(2),mean(clim)]),clim(2)]; +c.Ticks = cticks; +c.TickLabels = {'BG','-0.5','0','0.5','1'} +c.Label.String = 'Erk SSF'; + +% close all + +% cm = colormap('parula'); +% cm(1:13,:)=repmat([1,1,1],13,1); +% % c = colorbar('ticks',round(linspace(double(erkLimits(1)),double(erkLimits(2)),10))); +% c = colorbar +% c.Label.String = 'Erk SSF (8 bit, clipped to 95%)' +% +% xx = round(linspace(50,size(imx,2),5)); +% set(gca,'XTickLabel',arrayfun(@(y) num2str((y-308),xx,'UniformOutput',false)) +% xlabel('frames before mitosis'); +% ylabel('mitotic parent track sorted by NCD principal component') +% yy = yticks(); +% set(gca,'YTickLabel',arrayfun(@(y) num2str(y/2),yticks())) +% 4; diff --git a/matlab/+SSF/drawSSFclusters.m b/matlab/+SSF/drawSSFclusters.m new file mode 100644 index 0000000000000000000000000000000000000000..2e71a714a664dab1a0852ce74a93214d0ab0a191 --- /dev/null +++ b/matlab/+SSF/drawSSFclusters.m @@ -0,0 +1,68 @@ +% erk1D = Y(:,1); +% [~,idxSort] = sort(erk1D); +% qMitoSorted = qMitotic(idxSort,:); +% +% function imx = drawSSFtracks(qMitotic,idx,bDraw) + +% if ~exist('bDraw','var') +% bDraw = false; +% end +tmax = max(cellfun(@length,qMitotic.erk)); +imx = []; +imxH = 1; +clusterPts = []; +for k = 1:max(idx) + idxk = find(idx==k); + qk = qMitotic(idxk,:); + qk.yk = Y(idxk,1); + qk = sortrows(qk,'yk'); + for i = 1:height(qk) + erk_i = qk.erk{i}; + imx(imxH,tmax-length(erk_i)+1:tmax) = erk_i; + imxH = imxH+2; + end + imxH = imxH + 2; + clusterPts=[clusterPts,imxH]; + imxH = imxH + 4; + +end + + + +% if ~bDraw +% return +% end + + +close all + +cm = colormap('parula'); +cm(1,:) = [1,1,1]; + +figure;imagesc(imx);colormap(cm);hold on +c = colorbar('ticks',[2,64,128,192,255], 'ticklabels',{'-1.0','-0.5','0','0.5','1'}); +c.Label.String = 'Erk SSF'; +for p = 1:length(clusterPts) + plot([1,size(imx,2)],[clusterPts(p),clusterPts(p)],'-..k') +end + +% + +% cm = colormap('parula'); +% cm(1:13,:)=repmat([1,1,1],13,1); +% % c = colorbar('ticks',round(linspace(double(erkLimits(1)),double(erkLimits(2)),10))); +% c = colorbar +% c.Label.String = 'Erk SSF (8 bit, clipped to 95%)' +% +xx = round(linspace(50,size(imx,2),5)); +set(gca,'XTick',xx); +set(gca,'XTickLabel',arrayfun(@(y) num2str(y-308),xx,'UniformOutput',false)) +xlabel('frames before mitosis'); +ylabel('mitotic parent track sorted by cluster and NCD principal component') +yy = yticks(); +set(gca,'YTickLabel',arrayfun(@(y) num2str(y/2),yticks(),'uniformOutput',false)) +% h=gca; h.YAxis.TickLength = [0 0]; +yticks([]) +% 4; +set(gcf,'color','w') +% exportgraphics(gcf,'erk ssf heat map tracks NCD sorted cluster FLIF1d.pdf','Resolution',600,'contenttype','image') diff --git a/matlab/+SSF/drawSSFtracks.m b/matlab/+SSF/drawSSFtracks.m new file mode 100644 index 0000000000000000000000000000000000000000..1578eb1ffe731c9d7b4c7fdc167cf34188d461c4 --- /dev/null +++ b/matlab/+SSF/drawSSFtracks.m @@ -0,0 +1,85 @@ +% strDB = '/g/leverjs/Olivier/Agne/march_2023_20x/2022-04-05_steady_state_48h_deprived_13_ori.LEVER'; + +function drawSSFtracks(ROOT,cache, kymo_channel, channel_description,fnames) + +[~,dsName,ext] = fileparts(ROOT); +if ~exist('fnames','var') + fnames = []; +end + +outfile = [dsName ' ' channel_description ' SSF projection_y_t.pdf']; +if isempty(ext) + flist = dir(fullfile(ROOT,'*.LEVER')); +else + flist = dir(ROOT); +end +f=figure(1); +f.WindowState = 'maximized'; +pause(1) + +kymoPixels = {}; +for ff=1:length(flist) + strDB = fullfile(flist(ff).folder,flist(ff).name); + [ROOT,lf] = fileparts(strDB); + strKymoDB = fullfile(ROOT,cache,[lf '.LEVER_ssf_cache.LEVER']); + if ~exist(strKymoDB,'file') + continue + end + imKymo = SSF.loadImage(strKymoDB,kymo_channel); + kymoPixels{ff} = imKymo(find(imKymo)); +end +kymoPixels = vertcat(kymoPixels{:}); +erkClipLimits = [prctile(kymoPixels,2.5),prctile(kymoPixels,97.5)]; + +for ff = 1:length(flist) + strDB = fullfile(flist(ff).folder,flist(ff).name); + [ROOT,lf] = fileparts(strDB); + strKymoDB = fullfile(ROOT,cache,[lf '.LEVER_ssf_cache.LEVER']); + if ~exist(strKymoDB,'file') + continue + end + imKymo = SSF.loadImage(strKymoDB,kymo_channel); + % + imp = squeeze(max(imKymo,[],2)); + imn = squeeze(min(imKymo,[],2)); + imn = abs(imn); + idx = find(imn>imp); + imp(idx) = -1 .* imn(idx); +% imp(imp<-0.5) = 0; + impq = SSF.quantize8(imp,erkClipLimits); +% impq(imp==0 & imn==0) = 0; + +% % keep just [0,1] SSF +% imp = squeeze(max(imKymo,[],2)); +% erkClipLimits = [0,prctile(kymoPixels,99.9)]; +% impq = SSF.quantize8(imp,erkClipLimits); +% impq(imp==0) = 0; % set the background +% + + clf;imagesc(impq) + cm = colormap('parula'); + cm(1,:) = [1,1,1]; % make the background white! + colormap(cm) + c = colorbar(); + clim = [min(impq(:)),max(impq(:))]; + cticks = [clim(1)+1, mean([clim(1),mean(clim)]), mean(clim), mean([clim(2),mean(clim)]),clim(2)]; + c.Ticks = cticks; + % c.TickLabels = {'-1','-0.5','0','0.5','1'} + + ticksSSF = linspace(erkClipLimits(1),erkClipLimits(2),5); + ticksSSF = arrayfun(@(x) num2str(x,2),ticksSSF,'UniformOutput',false); + c.TickLabels = ticksSSF; + c.Label.String = [channel_description ' SSF (dataset reference)']; + if ~isempty(fnames) + lf = fnames{ff}; + end + hold on + yl = ylim(); + plot([62,62],[yl(1),yl(2)],'--r','linewidth',2) + title([lf ' ' channel_description ' SSF projection to (Y/2,time)'],'interpreter','none') + xlabel('time (frames)') + ylabel('Y (max intensity projection along X)') + bAppend = ff>1; + exportgraphics(gcf,outfile,'Resolution',600,'contenttype','image','append',bAppend); + +end \ No newline at end of file diff --git a/matlab/+SSF/draw_ssf_ncd.m b/matlab/+SSF/draw_ssf_ncd.m index a52d16003b60ab31a9fa81d0a0984bb60ff5072d..4c4acb5b8ef8caf077c51efbc45355a800b9dbcc 100644 --- a/matlab/+SSF/draw_ssf_ncd.m +++ b/matlab/+SSF/draw_ssf_ncd.m @@ -1,12 +1,12 @@ % load('agne_72_8bpp.mat') flist = dir(fullfile(ROOT,'*.LEVER')); -className = {}; -for ff=1:length(flist) - cn = regexp(flist(ff).name,'(\d+-\d+-\d+)_.*(\d\d)_ori*','tokens'); - cn = [cn{1}{1} '_' cn{1}{2}]; - className{ff} = classMap(cn); -end +% className = {}; +% for ff=1:length(flist) +% cn = regexp(flist(ff).name,'(\d+-\d+-\d+)_.*(\d\d)_ori*','tokens'); +% cn = [cn{1}{1} '_' cn{1}{2}]; +% className{ff} = classMap(cn); +% end % targetClass = {'AKT1_E17K','WT','PIK3CA_E545K'} % idx = find(cellfun(@(x) ~isempty(find(strcmp(targetClass,x))),className)); % A=d(idx,idx); @@ -28,7 +28,7 @@ clf;hold off; sym = {'ko','cv','m^','r*','gx','<k','b>','gs','bd'}; -classList = unique(classMap.values); +classList = unique(className); hx = zeros(size(classList)); hold on diff --git a/matlab/+SSF/draw_ssf_tracks.m b/matlab/+SSF/draw_ssf_tracks.m deleted file mode 100644 index d677a8a056c95fcb91a10802c52e2cb2636b5499..0000000000000000000000000000000000000000 --- a/matlab/+SSF/draw_ssf_tracks.m +++ /dev/null @@ -1,41 +0,0 @@ -close all -classList = unique(classMap.values); -for ff = 1:length(flist) - strDB = fullfile(flist(ff).folder,flist(ff).name); - [conn,CONSTANTS,segParams]=openDB(strDB); - - cmd = 'select trackID from tblCells inner join tblFamilies on cellID = cellID_parent'; - q = fetch(conn,cmd); - close(conn); - - erk_tracks = movie_tracks{ff}; - class = classMap(flist(ff).name(1:13)); - id = find(cellfun(@length,strfind(classList,class))); - figure(id) ; hold on - - tids = erk_tracks.keys; - tids = [tids{:}]; - tids = intersect(tids,q.trackID); - for i = 1:length(tids) - ssf = erk_tracks(tids(i)); - if size(ssf,2) <= 10 || all(0==ssf(1,:)) - continue - end - plot(5*ssf(2,:),ssf(1,:),'-'); - end -end - -for i = 1:length(classList) - figure(i) - set(gcf,'color','w') - title(classList{i},'Interpreter','none') - xlabel('time (minutes)') - ylabel('SSF') - fname = ['erk_tracks_' classList{i} '.tif']; - print(fname,'-dtiffn'); -end - -cx={} -for ff = 1:length(flist) - cx{ff} = classMap(flist(ff).name(1:13)) -end \ No newline at end of file diff --git a/matlab/+SSF/gen_SSF_kymo.m b/matlab/+SSF/gen_SSF_kymo.m index 24b4e020818f2c901a74e5b8927865f0f9428d08..130871e45a57944087497af420d4619e9c97716e 100644 --- a/matlab/+SSF/gen_SSF_kymo.m +++ b/matlab/+SSF/gen_SSF_kymo.m @@ -1,36 +1,56 @@ +% BE CAREFUL HERE! BE DRAGONS! GET THESE target names & numbers RIGHT OR PERISH +% targetChannelNames = {'Erk SSF'; 'Akt SSF' ; 'DHB SSF'; 'H2B SSF'; 'velocity SSF'}; % channel names in the kymo +% targetChannelNames = {'Erk SSF'; 'Oct4 SSF' ; 'H2B SSF'; 'velocity SSF'}; % channel names in the kymo +% targetChannelNumbers = [2, 3, -1]; % maps image channel names to kymo channel names +function gen_SSF_kymo(strDB,targetChannelNames,targetChannelNumbers,outfolder,bDownscale, startFrame) -function gen_SSF_kymo(ROOT) -targetChannelNames = {'Erk SSF'; 'Akt SSF' ; 'DHB SSF'; 'H2B SSF'; 'velocity SSF'}; % channel names in the kymo -targetChannelNumbers = [-2, -3, 1, -4]; % maps image channel names to kymo channel names +if ~exist('bDownscale','var') + bDownscale = false; +end +if ~exist('startFrame','var') + startFrame = 1; +end -cacheFolder = fullfile(ROOT,'kymoV2'); -if ~exist(cacheFolder,'dir') - mkdir(cacheFolder); +[fx,nx,ext]=fileparts(strDB); +if strcmp(ext,'.LEVER') + flist = dir(strDB); + ROOT = fx; +else + ROOT = strDB; + flist = dir(fullfile(strDB,'*.LEVER')); end -flist = dir(fullfile(ROOT,'*.LEVER')); L = length(flist); + +if ~exist(outfolder,'dir') + mkdir(outfolder); +end + imd={}; +p = ljsStartParallel(16); + parfor ff=1:L +% for ff=1:L str_ff = fullfile(flist(ff).folder,flist(ff).name); - if exist(fullfile(cacheFolder,[flist(ff).name '_ssf_cache.json']),'file') + if exist(fullfile(outfolder,[flist(ff).name '_ssf_cache.json']),'file') fprintf(1,'genKymo skipping %s kymo exists\n',str_ff); continue end t0 = tic(); - imVolume = SSF.ssf_volume(str_ff,targetChannelNumbers); + imVolume = SSF.ssf_volume(str_ff,targetChannelNumbers, bDownscale); if isempty(imVolume) continue end - imVolume(:,:,:,5) = SSF.velocity_kymo(str_ff); - imVolume = imVolume(:,:,31:end,:); % trim off first 30 frames +% imVolume(:,:,:,length(targetChannelNumbers)+1) = SSF.velocity_kymo(str_ff); + imVolume = imVolume(:,:,startFrame:end,:); % trim off first 30 frames imd{ff}=MicroscopeData.MakeMetadataFromImage(imVolume); imd{ff}.DatasetName=[flist(ff).name '_ssf_cache']; - imd{ff}.imageDir = cacheFolder; + imd{ff}.imageDir = outfolder; imd{ff}.ChannelNames = targetChannelNames; - MicroscopeData.WriterH5(imVolume,'imageData',imd{ff},'path',cacheFolder); + MicroscopeData.WriterH5(imVolume,'imageData',imd{ff},'path',outfolder); + tElapsed = toc(t0); fprintf(1,'ssf_volume %d tElapsed=%0.2f\n',ff,tElapsed); end -Import.leverImport('',cacheFolder); \ No newline at end of file +Import.leverImport('',outfolder); \ No newline at end of file diff --git a/matlab/+SSF/goErkCN.m b/matlab/+SSF/goErkCN.m new file mode 100644 index 0000000000000000000000000000000000000000..1c7ae124eb937c61971f4571c2c873fe3c298117 --- /dev/null +++ b/matlab/+SSF/goErkCN.m @@ -0,0 +1,42 @@ +% strDB = '/f/leverjs/Olivier/Yannick/20210924/20210924_pos3.LEVER'; +% tblCN = goErkCN(strDB,174279) +% tblCN = goErkCN(strDB,224589) +function tblCN = goErkCN(strDB,targetTrack) + +[conn,CONSTANTS,segParams]=openDB(strDB); +[ROOT,lf] = fileparts(strDB); +strKymo = fullfile(ROOT,'kymoV',[lf '.LEVER_ssf_cache.LEVER']); +imKymo = leversc.loadImage(strKymo,1,1); + +cmd = ['select cellID,trackID,centroid,time,LoG from tblCells where trackID = '... + num2str(targetTrack)]; +q=fetch(conn,cmd); + +erkSSF = []; +for i = 1:height(q) + centroid = jsondecode(q.centroid{i}); + centroid = [round(centroid(1:2))', q.time(i)]; + sample_value = SSF.ssf_sample(imKymo,centroid); + erkSSF(i) = sample_value; +end + +featureParams.channel = 2; +featureParams.name='CytoToNuclearRatio'; +featureParams.color="#00ffff"; +tblCN = table(); +for i = 1:height(q) + t = q.time(i); + cellList = Read.getCellsTime(conn,t,segParams.channels(1),CONSTANTS); + nt = SSF.cytoToNuclearRatio(cellList,q.cellID(i),t,CONSTANTS,featureParams,segParams); + nt.erkSSF = erkSSF(i); + tblCN = [tblCN;nt] +end +ee = imKymo(find(imKymo)); +erkClipLimits = [prctile(ee,2.5), prctile(ee,97.5)]; + +erk = tblCN.erkSSF; +erk = SSF.quantize8(erk,erkClipLimits); +erk = 2 * (double(erk) / 255) -1; +figure;plot(erk) +hold on +plot(tblCN.cnRatio) \ No newline at end of file diff --git a/matlab/+SSF/goTrackSSFkymo.m b/matlab/+SSF/goTrackSSFkymo.m new file mode 100644 index 0000000000000000000000000000000000000000..6461c99111f6b7e7ace956edf4da2fbd94be7224 --- /dev/null +++ b/matlab/+SSF/goTrackSSFkymo.m @@ -0,0 +1,117 @@ + +ROOT = '/f/leverjs/Olivier/Yannick/20210924/'; +flist = dir(fullfile(ROOT,'*.LEVER')); + +cxKymo = {}; +qMitotic = {}; + +for ff = 1:length(flist) + strDB = fullfile(flist(ff).folder,flist(ff).name); + [ROOT,lf] = fileparts(strDB); + strKymoDB = fullfile(ROOT,'kymoV',[lf '.LEVER_ssf_cache.LEVER']); + cxKymo{ff} = SSF.loadImage(strKymoDB,1); + [conn,CONSTANTS,segParams]=openDB(strDB); + imErk = cxKymo{ff}(:,:,:,1); + qm = fetch(conn,'select * from (select cellID,trackID,count(time) as nt from tblCells where trackID in (select trackID from tblCells inner join tblFamilies on cellID_parent=cellID) group by trackID) where nt>23'); + for i = 1:length(qm.trackID) + qcx = fetch(conn,['select centroid,time from tblCells where trackID = ' num2str(qm.trackID(i))]); + centroids = cellfun(@jsondecode,qcx.centroid,'UniformOutput',false); + centroids = reshape(vertcat(centroids{:}),3,[])'; + centroids = round(centroids); + qm.centroids{i} = [centroids(:,1:2),qcx.time]; + qm.idxCentroids{i} = sub2ind(size(cxKymo{ff}),centroids(:,2),centroids(:,1),qcx.time); + qm.movieID(i) = ff; + qm.erk{i} = SSF.ssf_sample_idx(imErk,qm.idxCentroids{i}); + qm.isEmpty(i) = all(0==qm.erk{i}); + end + qm(qm.isEmpty,:)=[]; + qMitotic = [qMitotic;qm]; +end +% qMitotic.erk is the signal. quantize it to 8 bit now +erkCombined =[qMitotic.erk{:}]' ; +erkClipLimits = [prctile(erkCombined,2.5), prctile(erkCombined,97.5)]; +for c = 1:length(cxKymo) + cxKymo{c} = SSF.quantize8(cxKymo{c},erkClipLimits); +end +% % a bit slow, but steady. find distancefrom each mitotis +for i = 1:height(qMitotic) + + strDB = fullfile(flist(qMitotic.movieID(i)).folder,flist(qMitotic.movieID(i)).name); + [conn,CONSTANTS,segParams]=openDB(strDB); + q1 = fetch(conn,['select centroid,time from tblCells where cellID = ' num2str(qMitotic.cellID(i))]); + colony = Read.getCellsTime(conn,q1.time,4,CONSTANTS); + for c = 1:length(colony) + bw = zeros(CONSTANTS.imageData.Dimensions(2),CONSTANTS.imageData.Dimensions(1)); + bw(colony(c).idxPts) = 1; + centroid1 = round(jsondecode(q1.centroid{1})); + if ~bw(centroid1(2),centroid1(1)) + continue + end + bwd = bwdist(~bw); + bwd = bwd./max(bwd(:)); + qMitotic.dNormalized(i) = bwd(centroid1(2),centroid1(1)); + qMitotic.time(i) = q1.time; + end +end + + + +for i = 1:height(qMitotic) + erk_i = medfilt1(qMitotic.erk{i}, 5); + erk_i = SSF.quantize8(erk_i, erkClipLimits); + qMitotic.erk{i} = erk_i; +end + +d = []; +L = height(qMitotic); +parfor i = 1:L +% im_i = SSF.cropKymo(cxKymo{qMitotic.movieID(i)},qMitotic.idxCentroids{i}); + for j = 1:L +% im_j = SSF.cropKymo(cxKymo{qMitotic.movieID(j)},qMitotic.idxCentroids{j}); + erk_j = medfilt1(qMitotic.erk{j},5) + im_j = SSF.quantize8(erk_j,erkClipLimits); + d(i,j) = SSF.ncd_ssf_volume(im_i,im_j); + end +end + +% for i = 1:length(d) +% for j = 1 : length(d) +% d(i,j)=max(d(i,j),d(j,i)); +% end +% d(i,i) = max(d(i,i),0); +% end + +close all +A = d; +K=3; +[idx,Y] = Cluster.SpectralCluster(A,K); +% Y(:,3) = [erkMitotic.d]; +figure;hold on +hred = []; +hgreen = []; +for i = 1 : height(qMitotic) + if qMitotic.dNormalized(i)<.2929 + hred = [hred,plot3(Y(i,1),Y(i,2),Y(i,3),'.r')]; + else + hgreen = [hgreen,plot3(Y(i,1),Y(i,2),Y(i,3),'.g')]; + end +end +xlabel('u1') +ylabel('u2') +zlabel('u3') +legend([hred(1),hgreen(1)],'d_{normalized} < 0.29','d_{normalized} \geq .2929') + +set(gcf,'color','w') +figure;hold on +for i = 1 : height(qMitotic) + if qMitotic.dNormalized(i)<.2929 + plot(Y(i,1),Y(i,2),'.r'); + else + plot(Y(i,1),Y(i,2),'.g'); + end +end +xlabel('u1') +ylabel('u2') +legend({'d_{normalized}>.2929','d_{normalized}<.2929'}) +set(gcf,'color','w') +% exportgraphics(gcf,'erkMitoticParentTracksEmbedding_medfilt.pdf','Resolution',300,'contenttype','image') \ No newline at end of file diff --git a/matlab/+SSF/go_ssf_ncd.m b/matlab/+SSF/go_ssf_ncd.m index b7d9c45067d13b448c75d69a808003aa2eec3ce6..f79c51b3104637c29891d5a0b65e7457aaa11ab3 100644 --- a/matlab/+SSF/go_ssf_ncd.m +++ b/matlab/+SSF/go_ssf_ncd.m @@ -4,40 +4,86 @@ % AKT_CHANNEL = 2; % H2B_CHANNEL = 3; % targetChannels = [ERK_CHANNEL,AKT_CHANNEL]; -function d=go_ssf_ncd(ROOT,targetChannels) +function d=go_ssf_ncd(kROOT,targetChannels) -flist = dir(fullfile(ROOT,'*.LEVER')); +tStart = tic(); + +flist = dir(fullfile(kROOT,'*.LEVER')); d = zeros(length(flist)); -L = length(flist); -imList = {}; +kymoPixels = {}; + +p = ljsStartParallel(32); -tStart = tic(); -% -parfor ff=1:L +parfor ff=1:length(flist) strDB_ff = fullfile(flist(ff).folder,flist(ff).name); - im_ff = SSF.loadImage(strDB_ff,targetChannels); - for gg=1:L - if gg<ff + im_ff = SSF.loadImage(strDB_ff,targetChannels); + kp = im_ff(find(im_ff)); + kymoPixels{ff} = kp; +end +kymoPixels = vertcat(kymoPixels{:}); +erkClipLimits = [prctile(kymoPixels,2.5),prctile(kymoPixels,97.5)] +% erkClipLimits = [0,prctile(kymoPixels,99)]; + +% +cmdList = NCD.dParallelCommandList(ones(length(flist)),p.NumWorkers); +W = size(cmdList,2); % for slicing j in parfor +H = size(cmdList,1); +dxx = zeros(H,W); +parfor i=1:H + str_ff_prev = ''; + im_ff = []; + + for j = 1:W + t0 = tic(); + ff = cmdList(i,j,2); % ff is the row var -- repeats + gg = cmdList(i,j,1); + if 0 == ff || 0 == gg continue end - t0 = tic(); + strDB_ff = fullfile(flist(ff).folder,flist(ff).name); + if ~strcmp(strDB_ff,str_ff_prev) + im_ff = SSF.loadImage(strDB_ff,targetChannels); + im_ff = SSF.quantize8(im_ff,erkClipLimits); + str_ff_prev = strDB_ff; + end + if ff == gg - d(ff,gg) = SSF.ncd_ssf_volume(im_ff,im_ff); + d1 = SSF.ncd_ssf_volume(im_ff,im_ff); + dxx(i,j) = d1; else strDB_gg = fullfile(flist(gg).folder,flist(gg).name); - im_gg = SSF.loadImage(strDB_gg,targetChannels); + im_gg = SSF.loadImage(strDB_gg,targetChannels); + im_gg = SSF.quantize8(im_gg,erkClipLimits); + d1 = SSF.ncd_ssf_volume(im_ff,im_gg); d2 = SSF.ncd_ssf_volume(im_gg,im_ff); - d(ff,gg) = min(d1,d2); + + + dxx(i,j) = min(d1,d2); end tElapsed = toc(t0); - fprintf('%s tElapsed = %0.2f\n',mat2str([ff,gg,d(ff,gg)]),tElapsed); + fprintf('%s tElapsed = %0.2f\n',mat2str([ff,gg,dxx(i,j)]),tElapsed); end end -for i=1:L - for j=1:i-1 - d(i,j) = d(j,i); +% convert dxx to distance matrix d +d = []; +for i = 1 : size(dxx,1) + for j = 1 : size(dxx,2) + c = cmdList(i,j,1); + r = cmdList(i,j,2); + if 0 == r || 0 == c + continue + end + d(r,c) = dxx(i,j); + end +end + +for i = 1 : size(d,1) + for j = 1 : size(d,2) + if 0 == d(i,j) + d(i,j) = d(j,i); + end end end tElapsed = toc(tStart); -fprintf('total time tElapsed = %0.2f\n',tElapsed); \ No newline at end of file +fprintf('total time tElapsed = %0.2f\n',tElapsed); diff --git a/matlab/+SSF/loadImage.m b/matlab/+SSF/loadImage.m index 289d75927ec2977fabfc149f0d4121d51e64d728..9e149c8d140985dc9473b36273bbf4483b2c4841 100644 --- a/matlab/+SSF/loadImage.m +++ b/matlab/+SSF/loadImage.m @@ -1,10 +1,11 @@ + function im = loadImage(strDB,channelList) +if ~exist('bDouble','var') + bDouble = false; +end im = []; +time = 1; % kymo is single time point for c=1:length(channelList) - im(:,:,:,c) = leversc.loadImage(strDB,1,channelList(c)); -end -if 2 == length(channelList) - im(:,:,:,3) = 0 * im(:,:,:,1); + im(:,:,:,c) = leversc.loadImage(strDB,time,channelList(c)); end -im = im2uint8(im); diff --git a/matlab/+SSF/ncd_ssf_volume.m b/matlab/+SSF/ncd_ssf_volume.m index 7126fcde848816060cdfea112f13cf02eeec1bb3..0c3427a496154cf7e7ca3f8e62c3e5f32c32eb74 100644 --- a/matlab/+SSF/ncd_ssf_volume.m +++ b/matlab/+SSF/ncd_ssf_volume.m @@ -3,11 +3,11 @@ % package to cell array by t and then pass to in memory FLI%F compressor function ncd = ncd_ssf_volume(i1,i2) -im12 = padcat1(i1,i2); +im12 = SSF.catKymographs(i1,i2,1); im12 = squeeze(num2cell(im12,[1,2,4])); s12 = NCD.flifPress(im12); -im21 = padcat2(i1,i2); +im21 = SSF.catKymographs(i1,i2,2); im21 = squeeze(num2cell(im21,[1,2,4])); s21 = NCD.flifPress(im21); @@ -22,22 +22,3 @@ s2 = NCD.flifPress(i2); ncd = ( s12-min(s1,s2)) / (max(s1,s2)); 4; - -% pads time between images -function i12 = padcat1(i1,i2) -if size(i1,3)>size(i2,3) - i2(:,:,end:size(i1,3),:)=0; -else - i1(:,:,end:size(i2,3),:)=0; -end -i12 = cat(1,i1,i2); -4; - -function i12 = padcat2(i1,i2) -if size(i1,3)>size(i2,3) - i2(:,:,end:size(i1,3),:)=0; -else - i1(:,:,end:size(i2,3),:)=0; -end -i12 = cat(2,i1,i2); -4; \ No newline at end of file diff --git a/matlab/+SSF/quantize8.m b/matlab/+SSF/quantize8.m new file mode 100644 index 0000000000000000000000000000000000000000..1a2a0f119da3e86867c2433fc4da199bb0480fd6 --- /dev/null +++ b/matlab/+SSF/quantize8.m @@ -0,0 +1,14 @@ +% clipLimits = [minVal,maxVal]; +function im = quantize8(im,clipLimits) + +if isa(im,'uint8') + return +end +im = max(im,clipLimits(1)); +im = min(im,clipLimits(2)); + +im = (im - clipLimits(1)) ./ (clipLimits(2) - clipLimits(1)); + +im = im2uint8(im); +im = max(im,1); % exclude 0 -- only for background +im(1,1) = 0; % make sure at least 1 pixel hits background \ No newline at end of file diff --git a/matlab/+SSF/ssf_channel.m b/matlab/+SSF/ssf_channel.m index 49d18d232bdf8c7bf3a02f28df711376122622c1..ce62430a5ea41136d52ce539b19924d432999714 100644 --- a/matlab/+SSF/ssf_channel.m +++ b/matlab/+SSF/ssf_channel.m @@ -1,11 +1,12 @@ -function imSSF = ssf_channel(cellList,CONSTANTS,channel,t,refMax,segParams,centroidMap) +function imSSF = ssf_channel(cellList,CONSTANTS,channel,t,refMax,segParams,centroidMap,bDownscale) -if ~exist('bTube','var') - bTube = false; -end im = MicroscopeData.Reader('imageData',CONSTANTS.imageData, 'chanList',abs(channel),'timeRange',[t t], 'outType','uint16','prompt',false); im = Segment.denoise(im,segParams,false); im = double(im)./2^16; +% scale refMax by actual image statistics. median estimates background, +% 99.99% represents max foreground intensity. +refMax = refMax * ( prctile(im(:),99.99) - median(im(:))); + [imLoG, imp, imn] = LoG.getCompositeLoG(im,CONSTANTS,segParams); bw = logical(0*imp); @@ -16,7 +17,11 @@ d = bwdist(~bw); imp(d<3)=0; imn(d<3)=0; -imSSF = zeros(size(imp,1),size(imp,2)); +szim = ceil(size(imp)); +if bDownscale + szim = szim ./ 2; +end +imSSF = zeros(szim(1),szim(2)); for i=1:length(cellList) if is3D(CONSTANTS) cx = centroidMap(cellList(i).cellID); @@ -24,15 +29,18 @@ for i=1:length(cellList) cx = round(cellList(i).centroid); cx = [cx(2),cx(1)]; % [y,x] end + if bDownscale + cx = round(cx/2); + end val_Pos = max(imp(cellList(i).idxPts)); val_Neg = max(imn(cellList(i).idxPts)); if val_Pos > val_Neg - % bright nucleus, dark cytoplasm + % dark nucleus, bright cytoplasm % ssf sign is in direction of intensity gradient - val = -1 * val_Pos; + val = val_Pos; else - % dark nucleus, bright cytoplasm - val = val_Neg; + % bright nucleus, dark cytoplasm + val = -1 * val_Neg; end ratio = val./refMax; ratio = min(ratio,1); @@ -41,4 +49,16 @@ for i=1:length(cellList) imSSF(cx(1),cx(2)) = ratio; end + +% if channel < 0 +% % negative channel, keep negative LoG response +% imSSF(imSSF>0) = 0; +% imSSF = abs(imSSF); +% else +% % positive channel, keep positive LoG response +% imSSF(imSSF<0) = 0; +% end + +% imSSF = max(imSSF,0); +% imSSF = min(imSSF,1); 4; diff --git a/matlab/+SSF/ssf_sample.m b/matlab/+SSF/ssf_sample.m new file mode 100644 index 0000000000000000000000000000000000000000..d39f114804581513bda4597295cc072da8592ca4 --- /dev/null +++ b/matlab/+SSF/ssf_sample.m @@ -0,0 +1,10 @@ +% check the neighborhood around centeroid in imkymo. used to eliminate +% round off errors in kymo / cell centroid +function sample_value = ssf_sample(imKymo,centroid,idxCentroid) + +sample_value = imKymo(centroid(1)-1:centroid(1)+1,centroid(2)-1:centroid(2)+1,centroid(3)); +if length(find(sample_value))>1 + fprintf(2,'ack SSF kymo ack more than one ssf sample found at centroid. send help.\n'); +end +sample_value = sample_value(find(sample_value)); +sample_value = sample_value(1); \ No newline at end of file diff --git a/matlab/+SSF/ssf_sample_idx.m b/matlab/+SSF/ssf_sample_idx.m new file mode 100644 index 0000000000000000000000000000000000000000..0d3d500c518a55f21dd3e67f132852220bbd33af --- /dev/null +++ b/matlab/+SSF/ssf_sample_idx.m @@ -0,0 +1,17 @@ +% check the neighborhood around centeroid in imkymo. used to eliminate +% round off errors in kymo / cell centroid +function sampleList = ssf_sample_idx(imKymo,idxCentroid) +sampleList = []; +for i = 1:length(idxCentroid) + [centroid(1),centroid(2),centroid(3)] = ind2sub(size(imKymo),idxCentroid(i)); + sv = imKymo(centroid(1)-1:centroid(1)+1,centroid(2)-1:centroid(2)+1,centroid(3)); + if length(find(sv))>1 + fprintf(2,'ack SSF kymo ack more than one ssf sample found at centroid. send help.\n'); + end + sv = sv(find(sv)); + if isempty(sv) + sv = 0; + end + sv = sv(1); + sampleList(i) = sv; +end \ No newline at end of file diff --git a/matlab/+SSF/ssf_volume.m b/matlab/+SSF/ssf_volume.m index 7e778db02da9b4e38465ce731aea390daf31f557..7e2927ea01a46987baed927ab1d189cf7dd9c757 100644 --- a/matlab/+SSF/ssf_volume.m +++ b/matlab/+SSF/ssf_volume.m @@ -1,4 +1,4 @@ -function im_ssf = ssf_volume(strDB,targetChannelNumbers) +function im_ssf = ssf_volume(strDB,targetChannelNumbers, bDownscale) refMax = 0.7; % from cacheReferenceLoG @@ -20,6 +20,9 @@ xyzct_size = Helpers.volumeSize(CONSTANTS); % FUN NOTE :: if you compute kymo_size wrong here, then when we iterate % below you will propagate that mistake exponentially and run out of memory kymo_size = [xyzct_size(1:2) xyzct_size(5) xyzct_size(4) 1]; +if bDownscale + kymo_size(1:2) = ceil(kymo_size(1:2) ./ 2); +end if is3D(CONSTANTS) centroidMap = SSF.mapCentroids(connx,CONSTANTS); else @@ -33,7 +36,7 @@ for t=1:CONSTANTS.imageData.NumberOfFrames cellList = Read.getCellsTime(connx,t,segParams.channels(1),CONSTANTS); for c=1:length(targetChannelNumbers) % 5-D x,y,1,c,t -> 3-D x,y,t(z),c - im_ssf(:,:,t,c) = SSF.ssf_channel(cellList,CONSTANTS,targetChannelNumbers(c),t,refMax,segParams,centroidMap); + im_ssf(:,:,t,c) = SSF.ssf_channel(cellList,CONSTANTS,targetChannelNumbers(c),t,refMax,segParams,centroidMap,bDownscale); end end close(connx); \ No newline at end of file diff --git a/matlab/+SSF/trackDistance.m b/matlab/+SSF/trackDistance.m new file mode 100644 index 0000000000000000000000000000000000000000..4f018e942bae2444aafe3a2dc62234220edd76fd --- /dev/null +++ b/matlab/+SSF/trackDistance.m @@ -0,0 +1,18 @@ +function d = trackDistance(ci,cj) +tOverlap = intersect(ci(:,3),cj(:,3)); +if isempty(tOverlap) + d = Inf; + return +end +idxDel = find(arrayfun(@(x) isempty(intersect(x,tOverlap)),ci(:,3))); +ci(idxDel,:) = []; +idxDel = find(arrayfun(@(x) isempty(intersect(x,tOverlap)),cj(:,3))); +cj(idxDel,:) = []; + + +if isempty(ci) || isempty(cj) + d = Inf; + return +end +dx = sqrt( (ci(:,1) - cj(:,1)).^2 + (ci(:,2)-cj(:,2)).^2); +d = median(dx); \ No newline at end of file diff --git a/matlab/+Segment/frameSegment.m b/matlab/+Segment/frameSegment.m index 4b314b8fca358923f76c27286d84f096b39cddd2..58756230a73dbb0f87c25dd2734cd0cc6728d7bf 100644 --- a/matlab/+Segment/frameSegment.m +++ b/matlab/+Segment/frameSegment.m @@ -130,7 +130,7 @@ for n=1:max(L(:)) end end newCell.idxPts = idx; - + newCell.n = n; segL=unique(L2(idx)); segL(0==segL)=[]; if length(segL)>1 @@ -141,27 +141,35 @@ for n=1:max(L(:)) newCell=Ensemble.setCellFeatures(newCell,rp,n,segParams); end newCell.LoG = LoG.sampleCell(newCell,CONSTANTS,imLoG); - if is3D(imLoG) - threshLoG = -1e-2; - else - threshLoG = -1e-3; - end - if (newCell.LoG >threshLoG) - % disallow segmentation based on centroid LoG thresholding + + % check ecc + v = eig(cov(newCell.pts)); + ecc = max(v)/min(v); + if ecc>50 continue end +% if is3D(imLoG) +% threshLoG = -1e-2; +% else +% threshLoG = -1e-3; +% end +% if (newCell.LoG >threshLoG) +% % disallow segmentation based on centroid LoG thresholding +% continue +% end Cells=[Cells newCell]; end - -threshLoG = mean([Cells.LoG])/10; -idx = find([Cells.LoG]>threshLoG); % use > since LoG is negative on nuclear channel -Cells(idx) = []; -% % on ensembleSeg -if 1 || bEnsemble - Cells=Ensemble.setCellEfficiency(Cells,CONSTANTS,im,imLoG,segParams,medianMask); -% Cells = Ensemble.set_LoG_score(Cells,CONSTANTS,im,imLoG,segParams); -end +if ~isempty(Cells) + threshLoG = mean([Cells.LoG])/10; + idx = find([Cells.LoG]>threshLoG); % use > since LoG is negative on nuclear channel +% Cells(idx) = []; + % % on ensembleSeg + if 1 || bEnsemble + Cells=Ensemble.setCellEfficiency(Cells,CONSTANTS,im,imLoG,segParams,medianMask); + % Cells = Ensemble.set_LoG_score(Cells,CONSTANTS,im,imLoG,segParams); + end +end if DRAW && ~is3D(im) for i=1:length(Cells) diff --git a/matlab/+Segment/segReduce.m b/matlab/+Segment/segReduce.m index 08e5a1789f212d7de83aa79da308eedcf730d721..654da8f96e0c52d15a57230ffb19fe0c7e64a27a 100644 --- a/matlab/+Segment/segReduce.m +++ b/matlab/+Segment/segReduce.m @@ -2,7 +2,8 @@ function L = segReduce(bw,imn,min_area_pixels) % use the LoG image instead of distance for watershed xform % empirical maxima surpression with first watershed -L = watershed(-1 * imhmax(imn,0.01)); +hmax = 0.01; +L = watershed(-1 * imhmax(imn,hmax)); % % L=watershed(-1 * imn); L(~bw)=0; diff --git a/matlab/+Segment/thresholdLoG_negative.m b/matlab/+Segment/thresholdLoG_negative.m index e0b043bd7ef6746b40a2495612231d74833e906c..29aa79124ee71827f938a801a954a8c2f6038a11 100644 --- a/matlab/+Segment/thresholdLoG_negative.m +++ b/matlab/+Segment/thresholdLoG_negative.m @@ -10,6 +10,9 @@ else sensitivity = segParams.sensitivity; end +% ACK! hardcode! ACK! +sensitivity = 0; + imn = imLoG; imn(imn>0)=0; imn=abs(imn); diff --git a/matlab/+Smooth/+Classify/getMitosisFeatures.m b/matlab/+Smooth/+Classify/getMitosisFeatures.m index e47ce7446ca54d136c91d425ae6eaa42a7548f73..204e9fcbc8cbe172bb28c634aa14dbced2fd37b5 100644 --- a/matlab/+Smooth/+Classify/getMitosisFeatures.m +++ b/matlab/+Smooth/+Classify/getMitosisFeatures.m @@ -44,15 +44,12 @@ centroids=cellfun(@jsondecode,q(:,3),'uniformoutput',false); centroids=reshape(cell2mat(centroids),3,[])'; parentCandidates=[cell2mat(q(:,1:2)) centroids]; -d1=Read.getCell(conn,d1CellID); +d1=Read.getCell(conn,d1CellID,CONSTANTS); costs=findD2Candidates(conn,parentCandidates,time,d1); if isempty(costs) return end -[~,idx]=min([costs.ratioD1D2]); -if costs(idx).ratioD1D2>25 - return -end +[~,idx]=min(abs(1-[costs.ratioD1D2])); mitosisNode.ratioD1D2=costs(idx).ratioD1D2; % make sure daughter is not already in family tree. if density is high @@ -70,20 +67,20 @@ end cmd=['select max(time) from tblCells where trackID IN(' num2str(costs(idx).parentDaughterTID(2)), ',' num2str(costs(idx).parentDaughterCID(2)) ') ']; q=ljsFetch(conn,cmd); t1=q{1}; -if (t1-time)<5 && ~bDebug - return -end +% if (t1-time)<5 && ~bDebug +% return +% end mitosisNode.parentCellID=costs(idx).parentDaughterCID(1); mitosisNode.siblingCellID=costs(idx).parentDaughterCID(2); mitosisNode.parentDaughterTID=costs(idx).parentDaughterTID; -d2=Read.getCell(conn,mitosisNode.siblingCellID); -p=Read.getCell(conn,mitosisNode.parentCellID); +d2=Read.getCell(conn,mitosisNode.siblingCellID,CONSTANTS); +p=Read.getCell(conn,mitosisNode.parentCellID,CONSTANTS); -% for parent area, select max over last 3 frames +% for parent area, select max over last 2 frames cmd=['select area from tblCells where trackID=' num2str(mitosisNode.parentDaughterTID(1))... - ' and time<' num2str(d1.time) ' and time>=' num2str(p.time-3)]; + ' and time<' num2str(d1.time) ' and time>=' num2str(d1.time-2)]; q=ljsFetch(conn,cmd); aparent=cell2mat(q); @@ -95,40 +92,43 @@ else areaRatio=ar2; end mitosisNode.areaRatio=areaRatio; -if areaRatio<minAreaRatio || areaRatio>2.5 - return -end + bOcclusionEdge1=Mitosis.checkOcclusionEdge(conn,d1); bOcclusionEdge2=Mitosis.checkOcclusionEdge(conn,d2); if bOcclusionEdge1 || bOcclusionEdge2 + % ??? + mitosisNode.areaRatio = Inf; return end mitosisNode.sibAreaRatio=max([d1.area,d2.area])/min([d1.area,d2.area]); +% parent LoG +cmd=['select LoG from tblCells where trackID=' num2str(p.trackID)... + ' and time<' num2str(d1.time) ' and time>=' num2str(p.time-3)]; +q=ljsFetch(conn,cmd); +parentLoG = min(cell2mat(q)); +% d1 LoG +cmd=['select LoG from tblCells where trackID=' num2str(d1.trackID)... + ' and time>=' num2str(d1.time) ' and time<' num2str(d1.time+3)]; +q=ljsFetch(conn,cmd); +d1LoG = min(cell2mat(q)); -segParams=Read.getSegmentationParams(conn); -imCache=Mitosis.getImageCache(conn,CONSTANTS,time,segParams); -if isempty(imCache) - return; -end +% d1 LoG +cmd=['select LoG from tblCells where trackID=' num2str(d2.trackID)... + ' and time>=' num2str(d1.time) ' and time<' num2str(d2.time+3)]; +q=ljsFetch(conn,cmd); +d2LoG = min(cell2mat(q)); -d1br=brightShape(d1,imCache.im); -d2br=brightShape(d2,imCache.im); -d1t1=getNextDaughter(conn,d1); -if ~isempty(d1t1) - d1br=max([d1br,brightShape(d1t1,imCache.imP1)]); -end -d2t1=getNextDaughter(conn,d2); -if ~isempty(d2t1) - d2br=max([d2br,brightShape(d2t1,imCache.imP1)]); -end +mitosisNode.pd1d2LoG = [parentLoG,d1LoG,d2LoG]; -pbr=getParentBR(conn,CONSTANTS,p,imCache); -mitosisNode.brightRatio=[d1br,d2br,pbr]; -eccParent=getParentECC(conn,imCache,p); -mitosisNode.eccParent=eccParent; +mitosisNode.pd1d2Ecc = [Helpers.cellEccentricity(p),Helpers.cellEccentricity(d1),... + Helpers.cellEccentricity(d2)]; + +o1 = length(intersect(p.idxPts,d1.idxPts))/min(length(p.idxPts),length(d1.idxPts)); +o2 = length(intersect(p.idxPts,d2.idxPts))/min(length(p.idxPts),length(d2.idxPts)); +mitosisNode.pd1d2overlap = [o1,o2]; 4; % end of find family @@ -140,113 +140,41 @@ for i=1:size(parentCandidates,1) % % target sibling 2 is the cell parent candidate tracked 2 % parentCandidates are [cellID,trackID,centroid] - [d2TrackID,d2CellID,d2Centroid]=getDaughter2(conn,parentCandidates(i,:),time,d1); - if isempty(d2TrackID) + d2 = getDaughter2(conn,parentCandidates(i,:),time,d1); + if isempty(d2) continue end - if d2CellID==d1.cellID + if d2.cellID==d1.cellID % need to come in via the other sibling! return end - + d1d2LoG = abs([d1.LoG,d2.LoG]); + d1d2LoG = min(d1d2LoG)/max(d1d2LoG); +% if d1d2LoG < 0.5 +% continue +% end pCentroid=parentCandidates(i,3:5); % midpoint of line between daughters -- this is where we'd like to see % the parent - pmid=(d2Centroid+d1.centroid)/2; + pmid=(d2.centroid+d1.centroid)/2; nc=[]; - nc.parentDaughterCID=[parentCandidates(i,1),d2CellID,]; + nc.parentDaughterCID=[parentCandidates(i,1),d2.cellID,]; nc.parentToDaughterMidpoint=norm(pCentroid-pmid); nc.dParentD1=Mitosis.cellDistance(conn,d1.cellID,parentCandidates(i,1)); - nc.dParentD2=Mitosis.cellDistance(conn,d2CellID,parentCandidates(i,1)); - nc.parentDaughterTID=[parentCandidates(i,2),d2TrackID]; + nc.dParentD2=Mitosis.cellDistance(conn,d2.cellID,parentCandidates(i,1)); + nc.parentDaughterTID=[parentCandidates(i,2),d2.trackID]; + + ratioD1D2 = min(nc.dParentD1,nc.dParentD2) / max(nc.dParentD1,nc.dParentD2); nc.ratioD1D2=nc.dParentD1/nc.dParentD2; + nc.d1d2LoG = d1d2LoG; costs=[costs nc]; end -function eccParent=getParentECC(conn,imCache,p) -eccParent=getEcc(size(imCache.im),p); -cmd=['select cellID from tblCells where time=' num2str(p.time-1) ' and '... - ' trackID= ' num2str(p.trackID)]; -q=ljsFetch(conn,cmd); -if isempty(q) - return -end -p1=Read.getCell(conn,q{1}); -eccParent1=getEcc(size(imCache.im),p1); -eccParent=min([eccParent,eccParent1]); - - -function pbr=getParentBR(conn,CONSTANTS,p,imCache) - -% parent needs to be in frame t-1 -pbr=brightShape(p,imCache.imM1); -cmd=['select cellID from tblCells where time=' num2str(p.time-1) ' and '... - ' trackID= ' num2str(p.trackID)]; -q=ljsFetch(conn,cmd); -if isempty(q) - return -end -p1=Read.getCell(conn,q{1}); -pbr1=brightShape(p1,imCache.imM2); -pbr=max([pbr,pbr1]); - -function d=getNextDaughter(conn,cell) - -cmd=['select cellID from tblCells where trackID=' num2str(cell.trackID) ' and time=' num2str(cell.time)]; -q=ljsFetch(conn,cmd); -if isempty(q) - d=[]; - return; -end -nextID=q{1}; -d=Read.getCell(conn,nextID); - -% mse between distance transform and intensity profile -function br=brightShape(cell,im) - -if isempty(im) - br=0; - return; -end -imx=0*im; -if (size(im,3))>1 - idx=sub2ind(size(im),cell.pts(:,2),cell.pts(:,1),cell.pts(:,3)); -else - idx=sub2ind(size(im),cell.pts(:,2),cell.pts(:,1)); -end -imx(idx)=im(idx); -if (0==max(imx(:))) - br=0; - return -end - -bwd=bwdist(~imx); -imx=imx.*max(bwd(:))/max(imx(:)); -br=sum(bwd(:)-imx(:))/length(find(bwd)); - -function ecc=getEcc(szImage,cell) - -if length(szImage)>2 && szImage(3)>1 - ecc=0; - return; -end -imx=zeros(szImage); -idx=sub2ind(szImage,cell.pts(:,2),cell.pts(:,1)); -imx(idx)=1; -if (0==max(imx(:))) - ecc=1; - return -end -rp=regionprops(imx,'Eccentricity'); -ecc=rp.Eccentricity; - -function [d2TrackID,d2CellID,d2Centroid]=getDaughter2(conn,parentCandidate,time,d1) +function d2 = getDaughter2(conn,parentCandidate,time,d1) -d2TrackID=[]; -d2CellID=[]; -d2Centroid=[]; +d2 = []; itid=parentCandidate(2); % trackID for parent/daughter 2 % try to use parent trackID in time t-1 to find daughter in time t @@ -257,9 +185,7 @@ if size(q,1)>1 fprintf(2,'rut roh! duplicate track entries conn=%s time=%d\n',conn.DataSource,time); end if ~isempty(q) - d2TrackID=itid; - d2CellID=q{1}; - d2Centroid=jsondecode(q{1,2})'; + d2 = Read.getCell(conn,q{1}); else % parent did not track to a d2 % so, there first choice is still out there and is not d1 (since d1 is @@ -272,26 +198,24 @@ else % to find a daughter that the parent wanted, but later the parent may % get the track they actually wanted. pfad. % for now, no go - return; - - cmd=['select * from tblDistCC where cellID_src=' num2str(parentCandidate(1)) ... - ' and cellID_dst in (select cellID from (select cellID,trackID,min(time) ' ... - ' as tStart from tblCells group by trackID)) and cellID_dst<>' num2str(d1.cellID)]; - q=fetch(conn,cmd); - if ~isempty(q) - % make sure d2 is not already in table - cmd=['select * from tblFamilies where cellID_child1=' num2str(q.cellID_dst(1))]; - qfamily=fetch(conn,cmd); - if isempty(qfamily) - d2=Read.getCell(conn,q.cellID_dst(1)); - if d2.time~=d1.time - return - end - d2TrackID=d2.trackID; - d2CellID=d2.cellID; - d2Centroid=d2.centroid; + cmd = ['select * from tblDistCC where cellID_src = ' num2str(parentCandidate(1)) ' order by cost asc']; + qp = fetch(conn,cmd); + cmd = ['select cellID,LoG from tblCells where cellID in ' Helpers.sqlEncodeVector(qp.cellID_dst)]; + qd = fetch(conn,cmd); + qd(qd.LoG>-0.1,:) = []; + qd(qd.cellID == d1.cellID,:) = []; + i = 1; + while i <= length(qp.cellID_dst) + if isempty(intersect(qp.cellID_dst(i),qd.cellID)) + qp(i,:) = []; + else + i = i+1; end end + if ~isempty(qp) + d2 = Read.getCell(conn,qp.cellID_dst(1)); + end + end diff --git a/matlab/+Smooth/+Classify/goClassifyMitosis.m b/matlab/+Smooth/+Classify/goClassifyMitosis.m index b1dd86c29e34ff999064fa38a9d0c29304627025..b2542ead4a500033e82d7f29cd2991f149e144cb 100644 --- a/matlab/+Smooth/+Classify/goClassifyMitosis.m +++ b/matlab/+Smooth/+Classify/goClassifyMitosis.m @@ -13,43 +13,23 @@ end if ~exist('nProcessors','var') || isempty(nProcessors) nProcessors=ljsNProcs(); end -p=ljsStartParallel(nProcessors); +% p=ljsStartParallel(nProcessors); mParams=Read.getMitosisParams(conn); +segParams = Read.getSegmentationParams(conn); targetTracks=Smooth.getTargetTracks(conn,5); -strDB=conn.DataSource; -mnode=Smooth.Classify.newMitosisNode(-1); -cxComp=Composite(); -spmd - cxComp=openDB(strDB); -end -mnode=[]; -for i=1:ceil(size(targetTracks,1)/p.NumWorkers) - mx=[]; - spmd - idx = ((i - 1) * numlabs) + labindex; - if idx<=size(targetTracks,1) - if targetTracks.t0(idx)==1 - mx=Smooth.Classify.newMitosisNode(targetTracks.trackID(idx)); - else - mx=Smooth.Classify.getMitosisFeatures(cxComp,CONSTANTS,mParams,targetTracks.trackID(idx)); - end - end - end - mres=[mx{:}]'; - mnode=[mnode;mres]; -end -spmd - close(cxComp); -end +mnode = []; + +for i = 1:length(targetTracks.trackID) + mn = Smooth.Classify.getMitosisFeatures(conn,CONSTANTS,mParams,targetTracks.trackID(i)) ; -for i=1:length(mnode) - if Smooth.Classify.isValidMitosis(mnode(i),mParams) - c1=Read.getCell(conn,mnode(i).d1CellID); - c2=Read.getCell(conn,mnode(i).siblingCellID); - p=Read.getCell(conn,mnode(i).parentCellID); - ljsLog('resegMitosis: adding new mitosis at child = %d\n',mnode(i).d1CellID); - Mitosis.addMitosis(conn,p,c1,c2); + if Smooth.Classify.isValidMitosis(mn,mParams) + c1=Read.getCell(conn,mn.d1CellID); + c2=Read.getCell(conn,mn.siblingCellID); + p=Read.getCell(conn,mn.parentCellID); +% drawMitosis(conn.DataSource,p,c1,c2,segParams,mn); + ljsLog('resegMitosis: adding new mitosis at child = %d\n',mn.d1CellID); + Mitosis.addMitosis(conn,p,c1,c2); end end \ No newline at end of file diff --git a/matlab/+Smooth/+Classify/isValidMitosis.m b/matlab/+Smooth/+Classify/isValidMitosis.m index 154d6d3b13ab94d8a7fbe3c12077310e11b74470..f2eb47765e065a8865d969c1263e9832354a48c9 100644 --- a/matlab/+Smooth/+Classify/isValidMitosis.m +++ b/matlab/+Smooth/+Classify/isValidMitosis.m @@ -3,19 +3,27 @@ bValid=false; if mnode.parentCellID<0 return; end -if any(isinf(mnode.brightRatio)) +threshLoG = [-0.05,-0.1,-0.35]; +if any(mnode.pd1d2LoG > threshLoG(1)) return; end -if ~isinf(mParams.brightThreshold) - if any(mnode.brightRatio<mParams.brightThreshold) - return; - end +if any(mnode.pd1d2LoG < threshLoG(3)) + return; end -if ~isinf(mParams.eccentricityThreshold) - if mnode.eccParent>mParams.eccentricityThreshold - return; +if ~any(mnode.pd1d2LoG < threshLoG(2)) + return +end +if any(mnode.pd1d2overlap>0.25) + if ~all(mnode.pd1d2LoG<threshLoG(2)) + return end end + +daughterLoG = abs(mnode.pd1d2LoG(2:3)); +dRatio = min(daughterLoG)/max(daughterLoG); +if dRatio < 0.5 + return +end if ~isinf(mParams.parentDaughterAreaRatio) if mnode.areaRatio<mParams.parentDaughterAreaRatio return; diff --git a/matlab/+Smooth/+Classify/newMitosisNode.m b/matlab/+Smooth/+Classify/newMitosisNode.m index 599f7716a7fdeecf93f26e268363d45682122f7e..7ee0e1dc4030806221d5d86245ac6781cfd5e702 100644 --- a/matlab/+Smooth/+Classify/newMitosisNode.m +++ b/matlab/+Smooth/+Classify/newMitosisNode.m @@ -6,7 +6,8 @@ mitosisNode.parentCellID=-1; mitosisNode.siblingCellID=-1; mitosisNode.parentDaughterTID=[-1,d1CellID]; mitosisNode.areaRatio=0; -mitosisNode.brightRatio=[-Inf,-Inf,-Inf]; +mitosisNode.pd1d2LoG=[-Inf,-Inf,-Inf]; mitosisNode.sibAreaRatio=0; -mitosisNode.eccParent=2; +mitosisNode.pd1d2Ecc=[-Inf,-Inf,-Inf]; mitosisNode.d1CellID=d1CellID; +mitosisNode.pd1d2overlap = [-Inf,-Inf]; diff --git a/matlab/+Smooth/getTargetTracks.m b/matlab/+Smooth/getTargetTracks.m index de010390f3c6b8a40e1f160880e1af4167d26e5c..bbdf4640e4bd55b9017c81420f127b1910fea5e7 100644 --- a/matlab/+Smooth/getTargetTracks.m +++ b/matlab/+Smooth/getTargetTracks.m @@ -1,9 +1,16 @@ function targetTracks=getTargetTracks(conn,nFrames) -cmd=['select * from (select trackID,min(time) as t0,max(time) as t1,count(time) as lifespan '... - ' from tblCells group by trackID) where lifespan>' num2str(nFrames)]; -targetTracks=fetch(conn,cmd); +% cmd=['select * from (select trackID,min(time) as t0,max(time) as t1,count(time) as lifespan '... +% ' from tblCells group by trackID) where lifespan>' num2str(nFrames)]; +% targetTracks=fetch(conn,cmd); +cmd = ['select tblCells.trackID,tblCells.time,tblCells.LoG from tblCells '... + ' inner join (select trackID,count(time) as nt '... + ' from tblCells group by trackID) as qx on tblCells.trackID = qx.trackID '... + ' where nt>5 and tblCells.cellID=tblCells.trackID and tblCells.time>1 and '... + ' tblCells.LoG<-0.05 order by tblCells.LoG asc']; + +targetTracks = fetch(conn,cmd); diff --git a/matlab/+Write/CreateCells.m b/matlab/+Write/CreateCells.m index 94eb5644662538dbb3ae71a2599b22514b4b37c0..221f409341693f376d3d21df6a5baba3d2049a5a 100644 --- a/matlab/+Write/CreateCells.m +++ b/matlab/+Write/CreateCells.m @@ -9,16 +9,27 @@ if isempty(Cells) end [~,tblFields]=Write.prepareCell([],Cells(1)); +qTable=fetch(conn,'pragma table_info(tblCells)'); if isfield(Cells,'nest') - tblFields.iNest=max(tblFields{1,:})+1; - q=fetch(conn,'pragma table_info(tblCells)'); - if ~any(cellfun(@length,(strfind(q.name,'iNest')))) + tblFields.iNest=max(tblFields{1,:})+1; + if ~any(cellfun(@length,(strfind(qTable.name,'iNest')))) cmd = ['ALTER TABLE tblCells ADD COLUMN iNest INTEGER default -1']; exec(conn,cmd); cmd = ['ALTER TABLE tblZombies ADD COLUMN iNest INTEGER']; exec(conn,cmd); end end + +if isfield(Cells,'LoG') + tblFields.LoG=max(tblFields{1,:})+1; + if ~any(cellfun(@length,(strfind(qTable.name,'LoG')))) + cmd = ['ALTER TABLE tblCells ADD COLUMN LoG REAL']; + exec(conn,cmd); + cmd = ['ALTER TABLE tblZombies ADD COLUMN LoG REAL']; + exec(conn,cmd); + end +end + cmd=Write.buildPreparedStatement(tblFields,'tblCells'); insertCells = conn.handle.prepareStatement(cmd); @@ -33,6 +44,11 @@ for i=1:length(Cells) insertCells.setInt(tblFields.iNest,-1); end end + if isfield(Cells,'LoG') + if ~isempty(Cells(i).nest) + insertCells.setDouble(tblFields.LoG,Cells(i).LoG); + end + end Write.tryUpdateDB(insertCells); end diff --git a/package-lock.json b/package-lock.json index e74e8f153bf0b91378a862079eea664272ebce5c..37d82ac109c3a80e999b30b9dfa7eb3ac1d4ca33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "minimist": "^1.2.5", "multer": "^1.4.3", "semver": "^6.3.0", - "sqlite3": "^4.1.1", + "sqlite3": "^5.1.6", "xlsx": "^0.15.6" }, "devDependencies": { @@ -130,6 +130,12 @@ "node": ">= 10.0.0" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -226,6 +232,109 @@ "node": ">= 10.0.0" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -489,6 +598,74 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/agentkeepalive/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -736,17 +913,33 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/argparse": { @@ -1407,6 +1600,47 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -1519,9 +1753,12 @@ } }, "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } }, "node_modules/chromium-pickle-js": { "version": "0.2.0", @@ -1540,6 +1777,15 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -1740,6 +1986,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", @@ -1818,7 +2072,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { "version": "0.5.3", @@ -1964,6 +2218,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -1971,7 +2226,8 @@ "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/decamelize": { "version": "1.2.0", @@ -1998,6 +2254,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "engines": { "node": ">=4.0.0" } @@ -2019,7 +2276,7 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { "version": "1.1.2", @@ -2035,14 +2292,11 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/dicer": { @@ -2727,6 +2981,12 @@ "node": ">=4" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3114,11 +3374,14 @@ } }, "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -3132,18 +3395,67 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dependencies": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/get-caller-file": { @@ -3264,9 +3576,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graceful-readlink": { "version": "1.0.1", @@ -3331,7 +3643,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/has-yarn": { "version": "2.1.0", @@ -3352,7 +3664,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "devOptional": true }, "node_modules/http-errors": { "version": "1.7.2", @@ -3459,6 +3771,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -3526,14 +3847,6 @@ ], "optional": true }, - "node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dependencies": { - "minimatch": "^3.0.4" - } - }, "node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -3555,7 +3868,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.8.19" } @@ -3572,6 +3885,12 @@ "node": ">=0.10.0" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3591,10 +3910,17 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", + "dev": true, "engines": { "node": "*" } }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true + }, "node_modules/ipaddr.js": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", @@ -3660,6 +3986,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -3737,7 +4069,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "devOptional": true }, "node_modules/isomorphic-fetch": { "version": "2.2.1", @@ -4160,7 +4492,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -4171,6 +4502,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -4278,44 +4636,91 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/minipass/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/minipass/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/mkdirp": { @@ -4361,27 +4766,6 @@ "node": ">=0.4" } }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "node_modules/needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -4406,54 +4790,186 @@ "is-stream": "^1.0.1" } }, - "node_modules/node-jsxml": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-jsxml/-/node-jsxml-0.9.0.tgz", - "integrity": "sha1-Ca5p+9YJnfuGAoHaZv8nkPoAmVQ=", - "dev": true, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, "engines": { - "node": ">=0.1.9" + "node": ">= 10.12.0" } }, - "node_modules/node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", + "node_modules/node-gyp/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-pre-gyp/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/node-gyp/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-jsxml": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-jsxml/-/node-jsxml-0.9.0.tgz", + "integrity": "sha1-Ca5p+9YJnfuGAoHaZv8nkPoAmVQ=", + "dev": true, + "engines": { + "node": ">=0.1.9" } }, "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/normalize-package-data": { @@ -4486,38 +5002,15 @@ "node": ">=8" } }, - "node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "node_modules/npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "node_modules/nugget": { @@ -4605,31 +5098,6 @@ "wrappy": "1" } }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -4639,6 +5107,21 @@ "node": ">=6" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -4853,6 +5336,25 @@ "asap": "~2.0.3" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -4962,6 +5464,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5239,15 +5742,27 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safe-buffer": { @@ -5352,7 +5867,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setimmediate": { "version": "1.0.5", @@ -5399,9 +5914,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/single-line-log": { "version": "1.1.2", @@ -5441,13 +5956,63 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, "optional": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "optional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5506,15 +6071,32 @@ "dev": true }, "node_modules/sqlite3": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", - "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "hasInstallScript": true, "dependencies": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } } }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node_modules/ssf": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz", @@ -5560,6 +6142,18 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -5648,6 +6242,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5795,45 +6390,39 @@ } }, "node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=10" } }, - "node_modules/tar/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/tar/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/temp-file": { "version": "3.4.0", @@ -5941,21 +6530,6 @@ "tmp": "^0.2.0" } }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -6093,6 +6667,24 @@ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -6310,7 +6902,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6322,11 +6914,11 @@ } }, "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { @@ -6719,6 +7311,12 @@ } } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, "@malept/cross-spawn-promise": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", @@ -6785,6 +7383,79 @@ } } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "optional": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -7021,6 +7692,58 @@ } } }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "optional": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "optional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true + } + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -7214,17 +7937,29 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "argparse": { @@ -7755,6 +8490,40 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -7839,9 +8608,9 @@ } }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chromium-pickle-js": { "version": "0.2.0", @@ -7860,6 +8629,12 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -8018,6 +8793,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", @@ -8081,7 +8861,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "content-disposition": { "version": "0.5.3", @@ -8200,6 +8980,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "^2.1.1" }, @@ -8207,7 +8988,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -8229,7 +9011,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "defer-to-connect": { "version": "1.1.3", @@ -8245,7 +9028,7 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "depd": { "version": "1.1.2", @@ -8258,9 +9041,9 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" }, "dicer": { "version": "0.2.5", @@ -8809,6 +9592,12 @@ "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9134,11 +9923,11 @@ } }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs.realpath": { @@ -9152,18 +9941,54 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "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.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "get-caller-file": { @@ -9256,9 +10081,9 @@ } }, "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graceful-readlink": { "version": "1.0.1", @@ -9304,7 +10129,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "has-yarn": { "version": "2.1.0", @@ -9322,7 +10147,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "devOptional": true }, "http-errors": { "version": "1.7.2", @@ -9404,6 +10229,15 @@ } } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -9446,17 +10280,9 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "optional": true - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "requires": { - "minimatch": "^3.0.4" - } + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "optional": true }, "immutable": { "version": "3.8.2", @@ -9473,7 +10299,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "devOptional": true }, "indent-string": { "version": "2.1.0", @@ -9484,6 +10310,12 @@ "repeating": "^2.0.0" } }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9501,7 +10333,14 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true }, "ipaddr.js": { "version": "1.9.0", @@ -9547,6 +10386,12 @@ "is-path-inside": "^3.0.2" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -9603,7 +10448,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "devOptional": true }, "isomorphic-fetch": { "version": "2.2.1", @@ -9987,11 +10832,34 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" } }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -10069,32 +10937,68 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "requires": { + "minipass": "^3.0.0" } }, "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, "mkdirp": { @@ -10132,21 +11036,6 @@ } } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -10168,43 +11057,140 @@ "is-stream": "^1.0.1" } }, - "node-jsxml": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-jsxml/-/node-jsxml-0.9.0.tgz", - "integrity": "sha1-Ca5p+9YJnfuGAoHaZv8nkPoAmVQ=", - "dev": true - }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "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.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "requires": { + "ansi-regex": "^5.0.1" + } } } }, + "node-jsxml": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-jsxml/-/node-jsxml-0.9.0.tgz", + "integrity": "sha1-Ca5p+9YJnfuGAoHaZv8nkPoAmVQ=", + "dev": true + }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-package-data": { @@ -10233,38 +11219,15 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "nugget": { @@ -10336,31 +11299,21 @@ "wrappy": "1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -10526,6 +11479,22 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -10614,6 +11583,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -10832,10 +11802,16 @@ "lowercase-keys": "^1.0.0" } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -10934,7 +11910,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setimmediate": { "version": "1.0.5", @@ -10972,9 +11948,9 @@ } }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "single-line-log": { "version": "1.1.2", @@ -11010,9 +11986,46 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, "optional": true }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "optional": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + } + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11068,12 +12081,21 @@ "dev": true }, "sqlite3": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", - "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "node-gyp": "8.x", + "tar": "^6.1.11" + }, + "dependencies": { + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + } } }, "ssf": { @@ -11109,6 +12131,15 @@ } } }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "requires": { + "minipass": "^3.1.1" + } + }, "stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -11172,7 +12203,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "sumchecker": { "version": "2.0.2", @@ -11279,28 +12311,27 @@ } }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" } } }, @@ -11392,17 +12423,6 @@ "dev": true, "requires": { "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "tmp-promise": { @@ -11514,6 +12534,24 @@ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -11689,17 +12727,17 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "requires": { "isexe": "^2.0.0" } }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "widest-line": { diff --git a/package.json b/package.json index 59d64bdd0d9d59fec0eb08c05532f40c2fa587e2..f5e43ff94b0bda9740506e31e107f45816e47de0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "minimist": "^1.2.5", "multer": "^1.4.3", "semver": "^6.3.0", - "sqlite3": "^4.1.1", + "sqlite3": "^5.1.6", "xlsx": "^0.15.6" }, "devDependencies": {