diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index b83ef2a..4dfe98f 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -15,3 +15,4 @@ What code changes have been made to achieve the intent.
- [ ] Code is formatted correctly (`sasjs lint`).
- [ ] Any new functionality has been unit tested.
- [ ] All unit tests are passing (`sasjs test`).
+- [ ] `all.sas` has been regenerated (`python3 build.py`)
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index d87a78b..ced41c5 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -51,7 +51,7 @@ jobs:
run: npm ci
- name: Check code style (aborts if errors found)
- run: sasjs lint
+ run: npx sasjs lint
- name: Add client
run: echo "CLIENT=${{secrets.SAS9_4GL_IO_CLIENT}}"> .env.server
@@ -60,10 +60,10 @@ jobs:
run: echo "ACCESS_TOKEN=${{secrets.SAS9_4GL_IO_ACCESS_TOKEN}}" >> .env.server
- name: Build & Deploy Project to SAS server
- run: sasjs cbd -t server
+ run: npx sasjs cbd -t server
- name: Run all tests
- run: sasjs test -t server
+ run: npx sasjs test -t server
env:
CI: true
CLIENT: ${{secrets.CLIENT}}
diff --git a/all.sas b/all.sas
index 2e580d4..99df58a 100644
--- a/all.sas
+++ b/all.sas
@@ -2658,6 +2658,100 @@ and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%mend mp_abort;
/** @endcond */
+/**
+ @file
+ @brief Apply leading blanks to align numbers vertically in a char variable
+ @details This is particularly useful when storing numbers (as character) that
+ need to be sorted.
+
+ It works by splitting the number left and right of the decimal place, and
+ aligning it accordingly. A temporary variable is created as part of this
+ process (which is automatically dropped)
+
+ The macro can be used only in data step, eg as follows:
+
+ data _null_;
+ length myvar $50;
+ do i=1 to 1000 by 50;
+ if mod(i,2)=0 then j=ranuni(0)*i*100;
+ else j=i*100;
+
+ %mp_aligndecimal(myvar,width=7)
+
+ leading_spaces=length(myvar)-length(cats(myvar));
+ putlog +leading_spaces myvar;
+ end;
+ run;
+
+ The generated code will look something like this:
+
+ length aligndp4e49996 $7;
+ if index(myvar,'.') then do;
+ aligndp4e49996=cats(scan(myvar,1,'.'));
+ aligndp4e49996=right(aligndp4e49996);
+ myvar=aligndp4e49996!!'.'!!cats(scan(myvar,2,'.'));
+ end;
+ else do;
+ aligndp4e49996=myvar;
+ aligndp4e49996=right(aligndp4e49996);
+ myvar=aligndp4e49996;
+ end;
+
+ Results (myvar variable):
+
+ 0.7683559324
+ 122.8232796
+ 99419.50552
+ 42938.5143414
+ 763.3799189
+ 15170.606073
+ 15083.285773
+ 85443.198707
+ 2022999.2251
+ 12038.658867
+ 1350582.6734
+ 52777.258221
+ 11723.347628
+ 33101.268376
+ 6181622.8603
+ 7390614.0669
+ 73384.537893
+ 1788362.1016
+ 2774586.2219
+ 7998580.8415
+
+
+ @param var The (data step) variable to create
+ @param width= (8) The number of characters BEFORE the decimal point
+
+
SAS Macros
+ @li mf_getuniquename.sas
+
+ Related Programs
+ @li mp_aligndecimal.test.sas
+
+ @version 9.2
+ @author Allan Bowe
+**/
+
+%macro mp_aligndecimal(var,width=8);
+
+ %local tmpvar;
+ %let tmpvar=%mf_getuniquename(prefix=aligndp);
+ length &tmpvar $&width;
+ if index(&var,'.') then do;
+ &tmpvar=cats(scan(&var,1,'.'));
+ &tmpvar=right(&tmpvar);
+ &var=&tmpvar!!'.'!!cats(scan(&var,2,'.'));
+ end;
+ else do;
+ &tmpvar=cats(&var);
+ &tmpvar=right(&tmpvar);
+ &var=&tmpvar;
+ end;
+ drop &tmpvar;
+
+%mend mp_aligndecimal;
/**
@file
@brief Append (concatenate) two or more files.
@@ -3137,6 +3231,7 @@ run;
@param [in] test= (ALLVALS) The test to apply. Valid values are:
@li ALLVALS - Test is a PASS if ALL values have a match in checkvals
@li ANYVAL - Test is a PASS if at least 1 value has a match in checkvals
+ @li NOVAL - Test is a PASS if there are NO matches in checkvals
@param [out] outds= (work.test_results) The output dataset to contain the
results. If it does not exist, it will be created, with the following format:
|TEST_DESCRIPTION:$256|TEST_RESULT:$4|TEST_COMMENTS:$256|
@@ -3192,7 +3287,7 @@ run;
%let test=%upcase(&test);
- %if &test ne ALLVALS and &test ne ANYVAL %then %do;
+ %if &test ne ALLVALS and &test ne ANYVAL and &test ne NOVAL %then %do;
%mp_abort(
mac=&sysmacroname,
msg=%str(Invalid test - &test)
@@ -3203,12 +3298,12 @@ run;
%let result=-1;
%let orig=-1;
proc sql noprint;
- select count(*) into: result
+ select count(*) into: result trimmed
from &lib..&ds
where &col not in (
select &ccol from &clib..&cds
);
- select count(*) into: orig from &lib..&ds;
+ select count(*) into: orig trimmed from &lib..&ds;
quit;
%local notfound tmp1 tmp2;
@@ -3240,7 +3335,7 @@ run;
length test_description $256 test_result $4 test_comments $256;
test_description=symget('desc');
test_result='FAIL';
- test_comments="&sysmacroname: &lib..&ds..&col has &result values "
+ test_comments="&sysmacroname: &lib..&ds..&col has &result/&orig values "
!!"not in &clib..&cds..&ccol.. First 10 vals:"!!symget('notfound');
%if &test=ANYVAL %then %do;
if &result < &orig then test_result='PASS';
@@ -3248,6 +3343,9 @@ run;
%else %if &test=ALLVALS %then %do;
if &result=0 then test_result='PASS';
%end;
+ %else %if &test=NOVAL %then %do;
+ if &result=&orig then test_result='PASS';
+ %end;
%else %do;
test_comments="&sysmacroname: Unsatisfied test condition - &test";
%end;
@@ -4023,6 +4121,7 @@ run;
Related Macros
@li mf_getvarformat.sas
+ @li mp_aligndecimal.sas
@li mp_getformats.sas
@li mp_loadformat.sas
@li mp_ds2fmtds.sas
@@ -4064,13 +4163,13 @@ run;
data &cntlout;
if 0 then set &ddlds;
set &cntlds;
- if type="N" then do;
- start=cats(start);
- end=cats(end);
+ if type in ("I","N") then do; /* numeric (in)format */
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
end;
run;
proc sort;
- by fmtname start;
+ by type fmtname start;
run;
proc sql;
@@ -10030,6 +10129,7 @@ select distinct lowcase(memname)
Related Macros
@li mddl_dc_difftable.sas
@li mddl_dc_locktable.sas
+ @li mp_aligndecimal.sas
@li mp_loadformat.test.sas
@li mp_lockanytable.sas
@li mp_stackdiffs.sas
@@ -10119,7 +10219,16 @@ run;
* First, extract only relevant formats from the catalog
*/
proc sql noprint;
-select distinct upcase(fmtname) into: fmtlist separated by ' ' from &libds;
+select distinct
+ case
+ when type='N' then upcase(fmtname)
+ when type='C' then cats('$',upcase(fmtname))
+ when type='I' then cats('@',upcase(fmtname))
+ when type='J' then cats('@$',upcase(fmtname))
+ else "&sysmacroname:UNHANDLED"
+ end
+ into: fmtlist separated by ' '
+ from &libds;
%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)
@@ -10131,16 +10240,24 @@ select distinct upcase(fmtname) into: fmtlist separated by ' ' from &libds;
data &inlibds;
length &delete_col $3;
if 0 then set &template;
+ length start end $10000;
set &libds;
if &delete_col='' then &delete_col='No';
fmtname=upcase(fmtname);
+ type=upcase(type);
if missing(type) then do;
- if substr(fmtname,1,1)='$' then type='C';
- else type='N';
+ if substr(fmtname,1,1)='@' then do;
+ if substr(fmtname,2,1)='$' then type='J';
+ else type='I';
+ end;
+ else do;
+ if substr(fmtname,1,1)='$' then type='C';
+ else type='N';
+ end;
end;
- if type='N' then do;
- start=cats(start);
- end=cats(end);
+ if type in ('N','I') then do;
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
end;
run;
@@ -10154,9 +10271,10 @@ create table &outds_add(drop=&delete_col) as
left join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where b.fmtname is null
and upcase(a.&delete_col) ne "YES"
- order by fmtname, start;;
+ order by type, fmtname, start;
/**
* Identify deleted records
@@ -10167,8 +10285,9 @@ create table &outds_del(drop=&delete_col) as
inner join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where upcase(a.&delete_col)="YES"
- order by fmtname, start;
+ order by type, fmtname, start;
/**
* Identify modified records
@@ -10179,8 +10298,9 @@ create table &outds_mod (drop=&delete_col) as
inner join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where upcase(a.&delete_col) ne "YES"
- order by fmtname, start;
+ order by type, fmtname, start;
options ibufsize=&ibufsize;
@@ -10197,13 +10317,13 @@ options ibufsize=&ibufsize;
&outds_add(in=add)
&outds_del(in=del);
if not del and not mod;
- by fmtname start;
+ by type fmtname start;
run;
data &stagedata;
set &ds1 &outds_mod;
run;
proc sort;
- by fmtname start;
+ by type fmtname start;
run;
%end;
/* mp abort needs to run outside of conditional blocks */
@@ -10251,7 +10371,7 @@ options ibufsize=&ibufsize;
%mp_storediffs(&libcat-FC
,&base_fmts
- ,FMTNAME START
+ ,TYPE FMTNAME START
,delds=&outds_del
,modds=&outds_mod
,appds=&outds_add
@@ -13956,14 +14076,20 @@ ods package close;
proc sql;
create table &libds(
- FMTNAME char(32) label='Format name'
+ TYPE char(1) label='Type of format'
+ ,FMTNAME char(32) label='Format name'
/*
to accommodate larger START values, mp_loadformat.sas will need the
SQL dependency removed (proc sql needs to accommodate 3 index values in
a 32767 ibufsize limit)
*/
,START char(10000) label='Starting value for format'
- ,END char(32767) label='Ending value for format'
+ /*
+ Keep lengths of START and END the same to avoid this err:
+ "Start is greater than end: -<."
+ Similar usage note: https://support.sas.com/kb/69/330.html
+ */
+ ,END char(10000) label='Ending value for format'
,LABEL char(32767) label='Format value label'
,MIN num length=3 label='Minimum length'
,MAX num length=3 label='Maximum length'
@@ -13974,7 +14100,6 @@ create table &libds(
,MULT num label='Multiplier'
,FILL char(1) label='Fill character'
,NOEDIT num length=3 label='Is picture string noedit?'
- ,TYPE char(1) label='Type of format'
,SEXCL char(1) label='Start exclusion'
,EEXCL char(1) label='End exclusion'
,HLO char(13) label='Additional information'
diff --git a/base/mp_aligndecimal.sas b/base/mp_aligndecimal.sas
new file mode 100644
index 0000000..35ef8e2
--- /dev/null
+++ b/base/mp_aligndecimal.sas
@@ -0,0 +1,94 @@
+/**
+ @file
+ @brief Apply leading blanks to align numbers vertically in a char variable
+ @details This is particularly useful when storing numbers (as character) that
+ need to be sorted.
+
+ It works by splitting the number left and right of the decimal place, and
+ aligning it accordingly. A temporary variable is created as part of this
+ process (which is automatically dropped)
+
+ The macro can be used only in data step, eg as follows:
+
+ data _null_;
+ length myvar $50;
+ do i=1 to 1000 by 50;
+ if mod(i,2)=0 then j=ranuni(0)*i*100;
+ else j=i*100;
+
+ %mp_aligndecimal(myvar,width=7)
+
+ leading_spaces=length(myvar)-length(cats(myvar));
+ putlog +leading_spaces myvar;
+ end;
+ run;
+
+ The generated code will look something like this:
+
+ length aligndp4e49996 $7;
+ if index(myvar,'.') then do;
+ aligndp4e49996=cats(scan(myvar,1,'.'));
+ aligndp4e49996=right(aligndp4e49996);
+ myvar=aligndp4e49996!!'.'!!cats(scan(myvar,2,'.'));
+ end;
+ else do;
+ aligndp4e49996=myvar;
+ aligndp4e49996=right(aligndp4e49996);
+ myvar=aligndp4e49996;
+ end;
+
+ Results (myvar variable):
+
+ 0.7683559324
+ 122.8232796
+ 99419.50552
+ 42938.5143414
+ 763.3799189
+ 15170.606073
+ 15083.285773
+ 85443.198707
+ 2022999.2251
+ 12038.658867
+ 1350582.6734
+ 52777.258221
+ 11723.347628
+ 33101.268376
+ 6181622.8603
+ 7390614.0669
+ 73384.537893
+ 1788362.1016
+ 2774586.2219
+ 7998580.8415
+
+
+ @param var The (data step) variable to create
+ @param width= (8) The number of characters BEFORE the decimal point
+
+ SAS Macros
+ @li mf_getuniquename.sas
+
+ Related Programs
+ @li mp_aligndecimal.test.sas
+
+ @version 9.2
+ @author Allan Bowe
+**/
+
+%macro mp_aligndecimal(var,width=8);
+
+ %local tmpvar;
+ %let tmpvar=%mf_getuniquename(prefix=aligndp);
+ length &tmpvar $&width;
+ if index(&var,'.') then do;
+ &tmpvar=cats(scan(&var,1,'.'));
+ &tmpvar=right(&tmpvar);
+ &var=&tmpvar!!'.'!!cats(scan(&var,2,'.'));
+ end;
+ else do;
+ &tmpvar=cats(&var);
+ &tmpvar=right(&tmpvar);
+ &var=&tmpvar;
+ end;
+ drop &tmpvar;
+
+%mend mp_aligndecimal;
diff --git a/base/mp_assertcolvals.sas b/base/mp_assertcolvals.sas
index 7176782..8dc36c9 100644
--- a/base/mp_assertcolvals.sas
+++ b/base/mp_assertcolvals.sas
@@ -42,6 +42,7 @@
@param [in] test= (ALLVALS) The test to apply. Valid values are:
@li ALLVALS - Test is a PASS if ALL values have a match in checkvals
@li ANYVAL - Test is a PASS if at least 1 value has a match in checkvals
+ @li NOVAL - Test is a PASS if there are NO matches in checkvals
@param [out] outds= (work.test_results) The output dataset to contain the
results. If it does not exist, it will be created, with the following format:
|TEST_DESCRIPTION:$256|TEST_RESULT:$4|TEST_COMMENTS:$256|
@@ -97,7 +98,7 @@
%let test=%upcase(&test);
- %if &test ne ALLVALS and &test ne ANYVAL %then %do;
+ %if &test ne ALLVALS and &test ne ANYVAL and &test ne NOVAL %then %do;
%mp_abort(
mac=&sysmacroname,
msg=%str(Invalid test - &test)
@@ -108,12 +109,12 @@
%let result=-1;
%let orig=-1;
proc sql noprint;
- select count(*) into: result
+ select count(*) into: result trimmed
from &lib..&ds
where &col not in (
select &ccol from &clib..&cds
);
- select count(*) into: orig from &lib..&ds;
+ select count(*) into: orig trimmed from &lib..&ds;
quit;
%local notfound tmp1 tmp2;
@@ -145,7 +146,7 @@
length test_description $256 test_result $4 test_comments $256;
test_description=symget('desc');
test_result='FAIL';
- test_comments="&sysmacroname: &lib..&ds..&col has &result values "
+ test_comments="&sysmacroname: &lib..&ds..&col has &result/&orig values "
!!"not in &clib..&cds..&ccol.. First 10 vals:"!!symget('notfound');
%if &test=ANYVAL %then %do;
if &result < &orig then test_result='PASS';
@@ -153,6 +154,9 @@
%else %if &test=ALLVALS %then %do;
if &result=0 then test_result='PASS';
%end;
+ %else %if &test=NOVAL %then %do;
+ if &result=&orig then test_result='PASS';
+ %end;
%else %do;
test_comments="&sysmacroname: Unsatisfied test condition - &test";
%end;
diff --git a/base/mp_cntlout.sas b/base/mp_cntlout.sas
index 357b630..5a8e69a 100644
--- a/base/mp_cntlout.sas
+++ b/base/mp_cntlout.sas
@@ -28,6 +28,7 @@
Related Macros
@li mf_getvarformat.sas
+ @li mp_aligndecimal.sas
@li mp_getformats.sas
@li mp_loadformat.sas
@li mp_ds2fmtds.sas
@@ -69,13 +70,13 @@ run;
data &cntlout;
if 0 then set &ddlds;
set &cntlds;
- if type="N" then do;
- start=cats(start);
- end=cats(end);
+ if type in ("I","N") then do; /* numeric (in)format */
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
end;
run;
proc sort;
- by fmtname start;
+ by type fmtname start;
run;
proc sql;
diff --git a/base/mp_loadformat.sas b/base/mp_loadformat.sas
index 44f4371..cb33ff4 100644
--- a/base/mp_loadformat.sas
+++ b/base/mp_loadformat.sas
@@ -45,6 +45,7 @@
Related Macros
@li mddl_dc_difftable.sas
@li mddl_dc_locktable.sas
+ @li mp_aligndecimal.sas
@li mp_loadformat.test.sas
@li mp_lockanytable.sas
@li mp_stackdiffs.sas
@@ -134,7 +135,16 @@ run;
* First, extract only relevant formats from the catalog
*/
proc sql noprint;
-select distinct upcase(fmtname) into: fmtlist separated by ' ' from &libds;
+select distinct
+ case
+ when type='N' then upcase(fmtname)
+ when type='C' then cats('$',upcase(fmtname))
+ when type='I' then cats('@',upcase(fmtname))
+ when type='J' then cats('@$',upcase(fmtname))
+ else "&sysmacroname:UNHANDLED"
+ end
+ into: fmtlist separated by ' '
+ from &libds;
%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)
@@ -146,16 +156,24 @@ select distinct upcase(fmtname) into: fmtlist separated by ' ' from &libds;
data &inlibds;
length &delete_col $3;
if 0 then set &template;
+ length start end $10000;
set &libds;
if &delete_col='' then &delete_col='No';
fmtname=upcase(fmtname);
+ type=upcase(type);
if missing(type) then do;
- if substr(fmtname,1,1)='$' then type='C';
- else type='N';
+ if substr(fmtname,1,1)='@' then do;
+ if substr(fmtname,2,1)='$' then type='J';
+ else type='I';
+ end;
+ else do;
+ if substr(fmtname,1,1)='$' then type='C';
+ else type='N';
+ end;
end;
- if type='N' then do;
- start=cats(start);
- end=cats(end);
+ if type in ('N','I') then do;
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
end;
run;
@@ -169,9 +187,10 @@ create table &outds_add(drop=&delete_col) as
left join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where b.fmtname is null
and upcase(a.&delete_col) ne "YES"
- order by fmtname, start;;
+ order by type, fmtname, start;
/**
* Identify deleted records
@@ -182,8 +201,9 @@ create table &outds_del(drop=&delete_col) as
inner join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where upcase(a.&delete_col)="YES"
- order by fmtname, start;
+ order by type, fmtname, start;
/**
* Identify modified records
@@ -194,8 +214,9 @@ create table &outds_mod (drop=&delete_col) as
inner join &base_fmts b
on a.fmtname=b.fmtname
and a.start=b.start
+ and a.type=b.type
where upcase(a.&delete_col) ne "YES"
- order by fmtname, start;
+ order by type, fmtname, start;
options ibufsize=&ibufsize;
@@ -212,13 +233,13 @@ options ibufsize=&ibufsize;
&outds_add(in=add)
&outds_del(in=del);
if not del and not mod;
- by fmtname start;
+ by type fmtname start;
run;
data &stagedata;
set &ds1 &outds_mod;
run;
proc sort;
- by fmtname start;
+ by type fmtname start;
run;
%end;
/* mp abort needs to run outside of conditional blocks */
@@ -266,7 +287,7 @@ options ibufsize=&ibufsize;
%mp_storediffs(&libcat-FC
,&base_fmts
- ,FMTNAME START
+ ,TYPE FMTNAME START
,delds=&outds_del
,modds=&outds_mod
,appds=&outds_add
diff --git a/ddl/mddl_sas_cntlout.sas b/ddl/mddl_sas_cntlout.sas
index 3b4ffc4..18ce174 100644
--- a/ddl/mddl_sas_cntlout.sas
+++ b/ddl/mddl_sas_cntlout.sas
@@ -12,14 +12,20 @@
proc sql;
create table &libds(
- FMTNAME char(32) label='Format name'
+ TYPE char(1) label='Type of format'
+ ,FMTNAME char(32) label='Format name'
/*
to accommodate larger START values, mp_loadformat.sas will need the
SQL dependency removed (proc sql needs to accommodate 3 index values in
a 32767 ibufsize limit)
*/
,START char(10000) label='Starting value for format'
- ,END char(32767) label='Ending value for format'
+ /*
+ Keep lengths of START and END the same to avoid this err:
+ "Start is greater than end: -<."
+ Similar usage note: https://support.sas.com/kb/69/330.html
+ */
+ ,END char(10000) label='Ending value for format'
,LABEL char(32767) label='Format value label'
,MIN num length=3 label='Minimum length'
,MAX num length=3 label='Maximum length'
@@ -30,7 +36,6 @@ create table &libds(
,MULT num label='Multiplier'
,FILL char(1) label='Fill character'
,NOEDIT num length=3 label='Is picture string noedit?'
- ,TYPE char(1) label='Type of format'
,SEXCL char(1) label='Start exclusion'
,EEXCL char(1) label='End exclusion'
,HLO char(13) label='Additional information'
diff --git a/package-lock.json b/package-lock.json
index 33c52f5..e79f72b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -176,9 +176,9 @@
}
},
"node_modules/@types/node": {
- "version": "18.11.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
- "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+ "version": "20.3.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz",
+ "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==",
"dev": true
},
"node_modules/@types/prompts": {
@@ -198,9 +198,9 @@
"peer": true
},
"node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
"dev": true
},
"node_modules/accumulate-stream": {
@@ -220,9 +220,9 @@
"dev": true
},
"node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -310,7 +310,7 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"node_modules/axios": {
@@ -470,9 +470,9 @@
}
},
"node_modules/cli-spinners": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
- "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz",
+ "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==",
"dev": true,
"engines": {
"node": ">=6"
@@ -510,7 +510,7 @@
"node_modules/clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"dev": true,
"engines": {
"node": ">=0.8"
@@ -558,7 +558,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
"node_modules/consola": {
@@ -598,14 +598,27 @@
"dev": true
},
"node_modules/data-urls": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
- "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
"dev": true,
"dependencies": {
- "abab": "^2.0.3",
+ "abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0"
+ "whatwg-url": "^11.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/data-urls/node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
},
"engines": {
"node": ">=12"
@@ -629,9 +642,9 @@
}
},
"node_modules/decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
"dev": true
},
"node_modules/deep-is": {
@@ -641,18 +654,21 @@
"dev": true
},
"node_modules/defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"dev": true,
"dependencies": {
"clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
@@ -765,7 +781,7 @@
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"node_modules/find": {
@@ -828,7 +844,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
},
"node_modules/function-bind": {
@@ -847,15 +863,15 @@
}
},
"node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
@@ -867,9 +883,9 @@
}
},
"node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/has": {
@@ -926,9 +942,9 @@
"dev": true
},
"node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"dependencies": {
"agent-base": "6",
@@ -982,7 +998,7 @@
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"dependencies": {
"once": "^1.3.0",
@@ -1005,9 +1021,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -1179,7 +1195,7 @@
"node_modules/levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
"dev": true,
"dependencies": {
"prelude-ls": "~1.1.2",
@@ -1192,13 +1208,13 @@
"node_modules/lodash.groupby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
- "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=",
+ "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
"dev": true
},
"node_modules/lodash.uniqby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
+ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==",
"dev": true
},
"node_modules/log-symbols": {
@@ -1266,10 +1282,16 @@
"dev": true
},
"node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -1294,15 +1316,15 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz",
+ "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==",
"dev": true
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"dependencies": {
"wrappy": "1"
@@ -1418,7 +1440,7 @@
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -1445,7 +1467,7 @@
"node_modules/prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -1465,24 +1487,24 @@
}
},
"node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
"node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dev": true,
"dependencies": {
"inherits": "^2.0.3",
@@ -1496,7 +1518,7 @@
"node_modules/rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
"dev": true,
"dependencies": {
"resolve": "^1.1.6"
@@ -1515,12 +1537,12 @@
}
},
"node_modules/resolve": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
- "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -1615,9 +1637,9 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/sisteransi": {
@@ -1760,7 +1782,7 @@
"node_modules/type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
"dev": true,
"dependencies": {
"prelude-ls": "~1.1.2"
@@ -1781,7 +1803,7 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"node_modules/valid-url": {
@@ -1794,6 +1816,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
"dev": true,
"dependencies": {
"browser-process-hrtime": "^1.0.0"
@@ -1814,7 +1837,7 @@
"node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
"dependencies": {
"defaults": "^1.0.3"
@@ -1892,20 +1915,20 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
},
"node_modules/ws": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"dev": true,
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
@@ -1919,7 +1942,7 @@
"node_modules/xml": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
- "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=",
+ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
"dev": true
},
"node_modules/xml-name-validator": {
@@ -2122,9 +2145,9 @@
}
},
"@types/node": {
- "version": "18.11.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
- "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+ "version": "20.3.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz",
+ "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==",
"dev": true
},
"@types/prompts": {
@@ -2144,9 +2167,9 @@
"peer": true
},
"abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
"dev": true
},
"accumulate-stream": {
@@ -2168,9 +2191,9 @@
}
},
"acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz",
+ "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==",
"dev": true
},
"acorn-globals": {
@@ -2230,7 +2253,7 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"axios": {
@@ -2342,9 +2365,9 @@
}
},
"cli-spinners": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
- "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz",
+ "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==",
"dev": true
},
"cli-table": {
@@ -2370,7 +2393,7 @@
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"dev": true
},
"color-convert": {
@@ -2406,7 +2429,7 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
"consola": {
@@ -2445,14 +2468,26 @@
"dev": true
},
"data-urls": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
- "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
"dev": true,
"requires": {
- "abab": "^2.0.3",
+ "abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0"
+ "whatwg-url": "^11.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "requires": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ }
}
},
"debug": {
@@ -2465,9 +2500,9 @@
}
},
"decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
"dev": true
},
"deep-is": {
@@ -2477,9 +2512,9 @@
"dev": true
},
"defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"dev": true,
"requires": {
"clone": "^1.0.2"
@@ -2488,7 +2523,7 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true
},
"domexception": {
@@ -2564,7 +2599,7 @@
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"find": {
@@ -2607,7 +2642,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
},
"function-bind": {
@@ -2623,23 +2658,23 @@
"dev": true
},
"glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"has": {
@@ -2684,9 +2719,9 @@
"dev": true
},
"https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"requires": {
"agent-base": "6",
@@ -2717,7 +2752,7 @@
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"requires": {
"once": "^1.3.0",
@@ -2737,9 +2772,9 @@
"dev": true
},
"is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -2862,7 +2897,7 @@
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2",
@@ -2872,13 +2907,13 @@
"lodash.groupby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
- "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=",
+ "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
"dev": true
},
"lodash.uniqby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
+ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==",
"dev": true
},
"log-symbols": {
@@ -2928,9 +2963,9 @@
"dev": true
},
"nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"dev": true
},
"node-graphviz": {
@@ -2950,15 +2985,15 @@
}
},
"nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz",
+ "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"requires": {
"wrappy": "1"
@@ -3046,7 +3081,7 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true
},
"path-parse": {
@@ -3064,7 +3099,7 @@
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
"dev": true
},
"prompts": {
@@ -3078,21 +3113,21 @@
}
},
"psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
"punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true
},
"readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
@@ -3103,7 +3138,7 @@
"rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
"dev": true,
"requires": {
"resolve": "^1.1.6"
@@ -3116,12 +3151,12 @@
"dev": true
},
"resolve": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
- "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"requires": {
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -3178,9 +3213,9 @@
}
},
"signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"sisteransi": {
@@ -3298,7 +3333,7 @@
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2"
@@ -3313,7 +3348,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"valid-url": {
@@ -3343,7 +3378,7 @@
"wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
"requires": {
"defaults": "^1.0.3"
@@ -3400,20 +3435,20 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
},
"ws": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"dev": true,
"requires": {}
},
"xml": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
- "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=",
+ "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
"dev": true
},
"xml-name-validator": {
diff --git a/tests/base/mp_aligndecimal.test.sas b/tests/base/mp_aligndecimal.test.sas
new file mode 100644
index 0000000..721f340
--- /dev/null
+++ b/tests/base/mp_aligndecimal.test.sas
@@ -0,0 +1,46 @@
+/**
+ @file
+ @brief Testing mp_aligndecimal macro
+ @details Creates an aligned variable and checks the number of leading blanks
+
+ SAS Macros
+ @li mp_aligndecimal.sas
+ @li mp_assertcolvals.sas
+ @li mp_assertscope.sas
+
+**/
+
+
+
+/* target values */
+data work.checkds;
+ do checkval=' 0.56',' 123.45',' 123.4 ',' 1.2 ',' 0';
+ output;
+ end;
+run;
+
+/* raw values */
+data work.rawds;
+ set work.checkds;
+ tgtvar=cats(checkval);
+ drop checkval;
+run;
+%mp_assertcolvals(work.rawds.tgtvar,
+ checkvals=work.checkds.checkval,
+ desc=No values match (ready to align),
+ test=NOVAL
+)
+
+/* aligned values */
+%mp_assertscope(SNAPSHOT)
+data work.finalds;
+ set work.rawds;
+ %mp_aligndecimal(tgtvar,width=4)
+run;
+%mp_assertscope(COMPARE)
+
+%mp_assertcolvals(work.finalds.tgtvar,
+ checkvals=work.checkds.checkval,
+ desc=All values match (aligned),
+ test=ALLVALS
+)
diff --git a/tests/base/mp_loadformat.test.sas b/tests/base/mp_loadformat.test.sas
index 9c9be6d..9925784 100644
--- a/tests/base/mp_loadformat.test.sas
+++ b/tests/base/mp_loadformat.test.sas
@@ -1,9 +1,11 @@
/**
@file
@brief Testing mp_loadformat.sas macro
+ @details first test regular formats, then informats
SAS Macros
@li mddl_dc_difftable.sas
+ @li mp_aligndecimal.sas
@li mp_loadformat.sas
@li mp_assert.sas
@li mp_assertscope.sas
@@ -15,8 +17,10 @@ libname perm (work);
%mddl_dc_difftable(libds=perm.audit)
+/* set up regular formats */
data work.loadfmts;
- length fmtname $32;
+ /* matching start / end lengths (to baseds) are important */
+ length fmtname $32 start end $10000;
eexcl='Y';
type='N';
do i=1 to 100;
@@ -24,7 +28,9 @@ data work.loadfmts;
do j=1 to 100;
start=cats(j);
end=cats(j+1);
- label= cats('Dummy ',start);
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
+ label= cats('Numeric Format ',start);
output;
end;
end;
@@ -42,6 +48,8 @@ data work.stagedata;
else if _n_<350 then do;
start=cats(_n_);
end=cats(_n_+1);
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
label='newval'!!cats(_N_);
end;
else stop;
@@ -91,3 +99,118 @@ run;
desc=Test 1 - diffs were found,
outds=work.test_results
)
+
+/* set up a mix of formats */
+data work.loadfmts2;
+ length fmtname $32 start end $10000;
+ eexcl='Y';
+ type='J';
+ do i=1 to 3;
+ fmtname=cats('SASJS_CI_',i,'X');
+ do j=1 to 4;
+ start=cats(j);
+ end=start;
+ label= cats('Char INFORMAT ',start);
+ output;
+ end;
+ end;
+ type='I';
+ do i=1 to 3;
+ fmtname=cats('SASJS_NI_',i,'X');
+ do j=1 to 4;
+ start=cats(j);
+ end=cats(j+1);
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
+ label= cats(ranuni(0));
+ output;
+ end;
+ end;
+ type='N';
+ do i=1 to 3;
+ fmtname=cats('SASJS_NF_',i,'X');
+ do j=1 to 4;
+ start=cats(j);
+ end=cats(j+1);
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
+ label= cats('Numeric Format ',start);
+ output;
+ end;
+ end;
+ type='C';
+ do i=1 to 3;
+ fmtname=cats('SASJS_CF_',i,'X');
+ do j=1 to 4;
+ start=cats(j);
+ end=start;
+ label= cats('Char Format ',start);
+ output;
+ end;
+ end;
+ drop i j;
+run;
+proc format cntlin=work.loadfmts2 library=perm.testcat2;
+run;
+
+/* make some test data */
+data work.stagedata2;
+ set work.loadfmts2;
+ where type in ('I','J');
+ eexcl='Y';
+ if type='I' then do;
+ i+1;
+ if i<3 then deleteme='Yes';
+ else if i<7 then label= cats(ranuni(0)*100);
+ else if i<12 then do;
+ /* new values */
+ z=ranuni(0)*1000000;
+ start=cats(z);
+ end=cats(z+1);
+ %mp_aligndecimal(start,width=16)
+ %mp_aligndecimal(end,width=16)
+ label= cats(ranuni(0)*100);
+ end;
+ if i<12 then output;
+ end;
+ else do;
+ j+1;
+ if j<3 then deleteme='Yes';
+ else if j<7 then label= cats(ranuni(0)*100);
+ else if j<12 then do;
+ start= cats("NEWVAL",start);
+ end=start;
+ label= "NEWVAL "||cats(ranuni(0)*100);
+ end;
+ if j<12 then output;
+ end;
+
+run;
+
+%mp_loadformat(perm.testcat2
+ ,work.stagedata2
+ ,loadtarget=YES
+ ,auditlibds=perm.audit
+ ,locklibds=0
+ ,delete_col=deleteme
+ ,outds_add=add_test2
+ ,outds_del=del_test2
+ ,outds_mod=mod_test2
+ ,mdebug=1
+)
+
+%mp_assert(
+ iftrue=(%mf_nobs(del_test2)=4),
+ desc=Test 2 - delete obs,
+ outds=work.test_results
+)
+%mp_assert(
+ iftrue=(%mf_nobs(mod_test2)=8),
+ desc=Test 2 - mod obs,
+ outds=work.test_results
+)
+%mp_assert(
+ iftrue=(%mf_nobs(add_test2)=10),
+ desc=Test 2 - add obs,
+ outds=work.test_results
+)