From 6013897c5031b3e5a30b7483fe63bda172bf6071 Mon Sep 17 00:00:00 2001 From: Allan Bowe Date: Wed, 8 Sep 2021 15:30:51 +0300 Subject: [PATCH 1/3] feat: updating mf_getuniquefileref() to use native approach to get a unique fileref (which is 100 times faster than the old approach) --- base/mf_getuniquefileref.sas | 40 ++++++++++++------- .../mf_getuniquefileref.test.sas | 17 ++++++++ 2 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 tests/crossplatform/mf_getuniquefileref.test.sas diff --git a/base/mf_getuniquefileref.sas b/base/mf_getuniquefileref.sas index 01c3dd0..5aef3e4 100644 --- a/base/mf_getuniquefileref.sas +++ b/base/mf_getuniquefileref.sas @@ -8,30 +8,40 @@ %let fileref2=%mf_getuniquefileref(); %put &fileref1 &fileref2; - which returns: + which returns something similar to: -> mcref0 mcref1 +> #LN01295 #LN01297 - @param prefix= first part of fileref. Remember that filerefs can only be 8 - characters, so a 7 letter prefix would mean that `maxtries` should be 10. - @param maxtries= the last part of the libref. Provide an integer value. + A previous version of this macro worked by assigning sequential filerefs. + The current version uses the native "find a unique fileref" functionality + within the filename function, which is 100 times faster. + + @param prefix= Deprecated. Will be removed in a future release. + @param maxtries= Deprecated. Will be removed in a future release. @version 9.2 @author Allan Bowe **/ -%macro mf_getuniquefileref(prefix=mcref,maxtries=1000); - %local x fname; - %let x=0; - %do x=0 %to &maxtries; - %if %sysfunc(fileref(&prefix&x)) > 0 %then %do; - %let fname=&prefix&x; +%macro mf_getuniquefileref(prefix=0,maxtries=1000); + %local rc fname; + %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp)); %if &rc %then %put %sysfunc(sysmsg()); - &prefix&x - %*put &sysmacroname: Fileref &prefix&x was assigned and returned; - %return; + &fname %end; + %else %do; + %local x; + %let x=0; + %do x=0 %to &maxtries; + %if %sysfunc(fileref(&prefix&x)) > 0 %then %do; + %let fname=&prefix&x; + %let rc=%sysfunc(filename(fname,,temp)); + %if &rc %then %put %sysfunc(sysmsg()); + &prefix&x + %return; + %end; + %end; + %put unable to find available fileref in range &prefix.0-&maxtries; %end; - %put unable to find available fileref in range &prefix.0-&maxtries; %mend mf_getuniquefileref; \ No newline at end of file diff --git a/tests/crossplatform/mf_getuniquefileref.test.sas b/tests/crossplatform/mf_getuniquefileref.test.sas new file mode 100644 index 0000000..6bde5b0 --- /dev/null +++ b/tests/crossplatform/mf_getuniquefileref.test.sas @@ -0,0 +1,17 @@ +/** + @file + @brief Testing mf_getuniquefileref macro + +

SAS Macros

+ @li mf_getuniquefileref.sas + @li mp_assert.sas + +**/ + +%mp_assert( + iftrue=( + "%substr(%mf_getuniquefileref(),1,1)"="#" + ), + desc=Checking for a temp fileref, + outds=work.test_results +) From 3f69cf506ab38907e6a088637040a08c5fc3fa4a Mon Sep 17 00:00:00 2001 From: Allan Bowe Date: Wed, 8 Sep 2021 19:34:28 +0300 Subject: [PATCH 2/3] feat: mp_webin() macro for handling the _webin_xxx macro variables in SAS web services --- all.sas | 112 +++++++++++++++--- base/mf_getuniquefileref.sas | 51 ++++---- base/mp_webin.sas | 58 +++++++++ .../mf_getuniquefileref.test.sas | 23 +++- tests/crossplatform/mp_webin.test.sas | 39 ++++++ 5 files changed, 244 insertions(+), 39 deletions(-) create mode 100644 base/mp_webin.sas create mode 100644 tests/crossplatform/mp_webin.test.sas diff --git a/all.sas b/all.sas index eac75d8..ab9009c 100644 --- a/all.sas +++ b/all.sas @@ -703,39 +703,60 @@ https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md#functionex /** @file @brief Assigns and returns an unused fileref - @details + @details Using the native approach for assigning filerefs fails as some + procedures (such as proc http) do not recognise the temporary names (starting + with a hash), returning a message such as: + + > ERROR 22-322: Expecting a name. + + This macro works by attempting a random fileref (with a prefix), seeing if it + is already assigned, and if not - returning the fileref. + + If your process can accept filerefs with the hash (#) prefix, then set + `prefix=0` to revert to the native approach - which is significantly faster + when there are a lot of filerefs in a session. + Use as follows: %let fileref1=%mf_getuniquefileref(); - %let fileref2=%mf_getuniquefileref(); + %let fileref2=%mf_getuniquefileref(prefix=0); %put &fileref1 &fileref2; - which returns: + which returns filerefs similar to: -> mcref0 mcref1 +> _7432233 #LN00070 - @param prefix= first part of fileref. Remember that filerefs can only be 8 - characters, so a 7 letter prefix would mean that `maxtries` should be 10. - @param maxtries= the last part of the libref. Provide an integer value. + @param [in] prefix= (_) first part of fileref. Remember that filerefs can only + be 8 characters, so a 7 letter prefix would mean `maxtries` should be 10. + if using zero (0) as the prefix, a native assignment is used. + @param [in] maxtries= (1000) the last part of the libref. Must be an integer. @version 9.2 @author Allan Bowe **/ -%macro mf_getuniquefileref(prefix=mcref,maxtries=1000); - %local x fname; - %let x=0; - %do x=0 %to &maxtries; - %if %sysfunc(fileref(&prefix&x)) > 0 %then %do; - %let fname=&prefix&x; +%macro mf_getuniquefileref(prefix=_,maxtries=1000); + %local rc fname; + %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp)); %if &rc %then %put %sysfunc(sysmsg()); - &prefix&x - %*put &sysmacroname: Fileref &prefix&x was assigned and returned; - %return; + &fname %end; + %else %do; + %local x len; + %let len=%eval(8-%length(&prefix)); + %let x=0; + %do x=0 %to &maxtries; + %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); + %if %sysfunc(fileref(&fname)) > 0 %then %do; + %let rc=%sysfunc(filename(fname,,temp)); + %if &rc %then %put %sysfunc(sysmsg()); + &fname + %return; + %end; + %end; + %put unable to find available fileref after &maxtries attempts; %end; - %put unable to find available fileref in range &prefix.0-&maxtries; %mend mf_getuniquefileref;/** @file @brief Returns an unused libref @@ -7367,6 +7388,63 @@ alter table &libds modify &var char(&len); %mend mp_validatecol; /** + @file + @brief Fix the `_WEBIN` variables provided to SAS web services + @details When uploading files to SAS Stored Processes or Viya Jobs a number + of global macro variables are automatically created - however there are some + differences in behaviour both between SAS 9 and Viya, and also between a + single file upload and a multi-file upload. + + This macro "straightens" up the global macro variables to make it easier / + simpler to write code that works in both environments and with a variable + number of file inputs. + + After running this macro, the following global variables will *always* exist: + @li `_WEBIN_FILE_COUNT` + @li `_WEBIN_FILENAME1` + @li `_WEBIN_FILEREF1` + @li `_WEBIN_NAME1` + + Usage: + + %mp_webin() + + This was created as a macro procedure (over a macro function) as it will also + use the filename statement in Viya environments (where `_webin_fileuri` is + provided). + +

SAS Macros

+ @li mf_getplatform.sas + +**/ + +%macro mp_webin(); + +/* prepare global variables */ +%global _webin_file_count + _webin_filename _webin_filename1 + _webin_fileref _webin_fileref1 + _webin_fileuri _webin_fileuri1 + _webin_name _webin_name1 + ; + +/* create initial versions */ +%let _webin_file_count=%eval(&_webin_file_count+0); +%let _webin_filename1=%sysfunc(coalescec(&_webin_filename1,&_webin_filename)); +%let _webin_fileref1=%sysfunc(coalescec(&_webin_fileref1,&_webin_fileref)); +%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri)); +%let _webin_name1=%sysfunc(coalescec(&_webin_name1,&_webin_name)); + + +/* If Viya, create temporary fileref(s) */ +%local i; +%if %mf_getplatform()=SASVIYA %then %do i=1 %to &_webin_file_count; + %let _webin_fileref&i=%mf_getuniquefileref(prefix=0); + filename &&_webin_fileref&i filesrvc "&&_webin_fileuri&i"; +%end; + + +%mend mp_webin;/** @file @brief Creates a zip file @details For DIRECTORY usage, will ignore subfolders. For DATASET usage, diff --git a/base/mf_getuniquefileref.sas b/base/mf_getuniquefileref.sas index 5aef3e4..8c11725 100644 --- a/base/mf_getuniquefileref.sas +++ b/base/mf_getuniquefileref.sas @@ -1,29 +1,39 @@ /** @file @brief Assigns and returns an unused fileref - @details + @details Using the native approach for assigning filerefs fails as some + procedures (such as proc http) do not recognise the temporary names (starting + with a hash), returning a message such as: + + > ERROR 22-322: Expecting a name. + + This macro works by attempting a random fileref (with a prefix), seeing if it + is already assigned, and if not - returning the fileref. + + If your process can accept filerefs with the hash (#) prefix, then set + `prefix=0` to revert to the native approach - which is significantly faster + when there are a lot of filerefs in a session. + Use as follows: %let fileref1=%mf_getuniquefileref(); - %let fileref2=%mf_getuniquefileref(); + %let fileref2=%mf_getuniquefileref(prefix=0); %put &fileref1 &fileref2; - which returns something similar to: + which returns filerefs similar to: -> #LN01295 #LN01297 +> _7432233 #LN00070 - A previous version of this macro worked by assigning sequential filerefs. - The current version uses the native "find a unique fileref" functionality - within the filename function, which is 100 times faster. - - @param prefix= Deprecated. Will be removed in a future release. - @param maxtries= Deprecated. Will be removed in a future release. + @param [in] prefix= (_) first part of fileref. Remember that filerefs can only + be 8 characters, so a 7 letter prefix would mean `maxtries` should be 10. + if using zero (0) as the prefix, a native assignment is used. + @param [in] maxtries= (1000) the last part of the libref. Must be an integer. @version 9.2 @author Allan Bowe **/ -%macro mf_getuniquefileref(prefix=0,maxtries=1000); +%macro mf_getuniquefileref(prefix=_,maxtries=1000); %local rc fname; %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp)); @@ -31,17 +41,18 @@ &fname %end; %else %do; - %local x; + %local x len; + %let len=%eval(8-%length(&prefix)); %let x=0; %do x=0 %to &maxtries; - %if %sysfunc(fileref(&prefix&x)) > 0 %then %do; - %let fname=&prefix&x; - %let rc=%sysfunc(filename(fname,,temp)); - %if &rc %then %put %sysfunc(sysmsg()); - &prefix&x - %return; + %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); + %if %sysfunc(fileref(&fname)) > 0 %then %do; + %let rc=%sysfunc(filename(fname,,temp)); + %if &rc %then %put %sysfunc(sysmsg()); + &fname + %return; + %end; %end; - %end; - %put unable to find available fileref in range &prefix.0-&maxtries; + %put unable to find available fileref after &maxtries attempts; %end; %mend mf_getuniquefileref; \ No newline at end of file diff --git a/base/mp_webin.sas b/base/mp_webin.sas new file mode 100644 index 0000000..1c6675f --- /dev/null +++ b/base/mp_webin.sas @@ -0,0 +1,58 @@ +/** + @file + @brief Fix the `_WEBIN` variables provided to SAS web services + @details When uploading files to SAS Stored Processes or Viya Jobs a number + of global macro variables are automatically created - however there are some + differences in behaviour both between SAS 9 and Viya, and also between a + single file upload and a multi-file upload. + + This macro "straightens" up the global macro variables to make it easier / + simpler to write code that works in both environments and with a variable + number of file inputs. + + After running this macro, the following global variables will *always* exist: + @li `_WEBIN_FILE_COUNT` + @li `_WEBIN_FILENAME1` + @li `_WEBIN_FILEREF1` + @li `_WEBIN_NAME1` + + Usage: + + %mp_webin() + + This was created as a macro procedure (over a macro function) as it will also + use the filename statement in Viya environments (where `_webin_fileuri` is + provided). + +

SAS Macros

+ @li mf_getplatform.sas + +**/ + +%macro mp_webin(); + +/* prepare global variables */ +%global _webin_file_count + _webin_filename _webin_filename1 + _webin_fileref _webin_fileref1 + _webin_fileuri _webin_fileuri1 + _webin_name _webin_name1 + ; + +/* create initial versions */ +%let _webin_file_count=%eval(&_webin_file_count+0); +%let _webin_filename1=%sysfunc(coalescec(&_webin_filename1,&_webin_filename)); +%let _webin_fileref1=%sysfunc(coalescec(&_webin_fileref1,&_webin_fileref)); +%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri)); +%let _webin_name1=%sysfunc(coalescec(&_webin_name1,&_webin_name)); + + +/* If Viya, create temporary fileref(s) */ +%local i; +%if %mf_getplatform()=SASVIYA %then %do i=1 %to &_webin_file_count; + %let _webin_fileref&i=%mf_getuniquefileref(prefix=0); + filename &&_webin_fileref&i filesrvc "&&_webin_fileuri&i"; +%end; + + +%mend mp_webin; \ No newline at end of file diff --git a/tests/crossplatform/mf_getuniquefileref.test.sas b/tests/crossplatform/mf_getuniquefileref.test.sas index 6bde5b0..04331fb 100644 --- a/tests/crossplatform/mf_getuniquefileref.test.sas +++ b/tests/crossplatform/mf_getuniquefileref.test.sas @@ -1,6 +1,17 @@ /** @file @brief Testing mf_getuniquefileref macro + @details To test performance you can also use the following macro: + + %macro x(prefix); + %let now=%sysfunc(datetime()); + %do x=1 %to 1000; + %let rc=%mf_getuniquefileref(prefix=&prefix); + %end; + %put %sysevalf(%sysfunc(datetime())-&now); + %mend; + %x(_) + %x(0)

SAS Macros

@li mf_getuniquefileref.sas @@ -10,8 +21,16 @@ %mp_assert( iftrue=( - "%substr(%mf_getuniquefileref(),1,1)"="#" + "%substr(%mf_getuniquefileref(prefix=0),1,1)"="#" ), - desc=Checking for a temp fileref, + desc=Checking for a natively assigned fileref, + outds=work.test_results +) + +%mp_assert( + iftrue=( + "%substr(%mf_getuniquefileref(),1,1)"="_" + ), + desc=Checking for a default fileref, outds=work.test_results ) diff --git a/tests/crossplatform/mp_webin.test.sas b/tests/crossplatform/mp_webin.test.sas new file mode 100644 index 0000000..18cf2b5 --- /dev/null +++ b/tests/crossplatform/mp_webin.test.sas @@ -0,0 +1,39 @@ +/** + @file + @brief Testing mp_webin macro + +

SAS Macros

+ @li mp_webin.sas + @li mp_assert.sas + +**/ + +/* force SAS9 tests as we don't have a valid URI available */ +%macro mf_getplatform(); + SAS9 +%mend mf_getplatform; + +/* TEST 1 */ +%let _webin_file_count=1; +%let _webin_filename=test; +%mp_webin() + +%mp_assert( + iftrue=( + %symexist(_WEBIN_FILEREF1) + ), + desc=Checking if the macvar exists, + outds=work.test_results +) + +/* TEST 2 */ +%global _WEBIN_FILENAME1; +%mp_assert( + iftrue=( + %str(&_WEBIN_FILENAME1)=%str(test) + ), + desc=Checking if the macvar exists, + outds=work.test_results +) + + From b5944181e14cea3f38978d9ed24e12a0a15fc781 Mon Sep 17 00:00:00 2001 From: Allan Bowe Date: Wed, 8 Sep 2021 19:35:27 +0300 Subject: [PATCH 3/3] chore(dependencies): bumping cli --- package-lock.json | 543 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 358 insertions(+), 187 deletions(-) diff --git a/package-lock.json b/package-lock.json index c17710b..70483f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,13 +7,13 @@ "name": "@sasjs/core", "license": "MIT", "devDependencies": { - "@sasjs/cli": "^2.37.2" + "@sasjs/cli": "^2.37.8" } }, "node_modules/@sasjs/adapter": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-2.10.0.tgz", - "integrity": "sha512-GbvyIgbODnAJaBaz/Tz8/IwcujNOsZcwzbIuKQtG5y13BzgVPtx/e7b2TAhdoBqd+8uVh0CdrSDfOV/SuvPurg==", + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-2.10.4.tgz", + "integrity": "sha512-9b3WGZUzRgszZVyPfrabSx6TycL4JFFXQR/RQKsFCDDwT8UgLGfJ4JmgaGCSmGCcsqML/Q41QipdgWu1M/QA3g==", "dev": true, "dependencies": { "@sasjs/utils": "^2.27.1", @@ -28,23 +28,23 @@ } }, "node_modules/@sasjs/cli": { - "version": "2.37.2", - "resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-2.37.2.tgz", - "integrity": "sha512-Bcm8UFN9Y/ZON4T31Gu9mf1REn1pZoStHFVrix/yp7mchFt5rrrY5RbIqO/AI1jzhShSVg9P7oU4VPJrqki+SA==", + "version": "2.37.8", + "resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-2.37.8.tgz", + "integrity": "sha512-V1FGK0ByS5v5+xOX5J1rlQDOXSA37YLL18etEUQOmWK5X9R5tbK4LPIx/pEjLyfZcCHddrm+0nGzRroC715Ilg==", "dev": true, "dependencies": { - "@sasjs/adapter": "2.10.0", - "@sasjs/core": "2.35.4", + "@sasjs/adapter": "2.10.4", + "@sasjs/core": "2.42.0", "@sasjs/lint": "1.11.2", - "@sasjs/utils": "2.27.1", - "chalk": "4.1.1", + "@sasjs/utils": "2.28.0", + "chalk": "4.1.2", "csv-stringify": "5.6.2", "dotenv": "10.0.0", "esm": "3.2.25", "find": "0.3.0", "get-installed-path": "4.0.8", "js-base64": "3.6.1", - "jsdom": "16.6.0", + "jsdom": "17.0.0", "jwt-decode": "3.1.2", "lodash.groupby": "4.6.0", "lodash.uniqby": "4.7.0", @@ -52,16 +52,17 @@ "ora": "5.4.1", "rimraf": "3.0.2", "shelljs": "0.8.4", - "xml": "1.0.1" + "xml": "1.0.1", + "yargs": "17.1.1" }, "bin": { "sasjs": "build/index.js" } }, "node_modules/@sasjs/core": { - "version": "2.35.4", - "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.35.4.tgz", - "integrity": "sha512-Exr3+yRdvacKvbXQoi1RfGHi5NtZUkc7RwFNkemHTFXLYaIzPI8CGSCaQmKkwM1UteOJly2e2pw2YT6kHNY1NA==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.42.0.tgz", + "integrity": "sha512-EISPPCEv+vB3Nqp03NUaIvMZwEnggzGJeEpVfm2Sb504ySN1I2xiJ8bOHXIzvvYP5N/V9X8bXe1raLYnnt8HGA==", "dev": true }, "node_modules/@sasjs/lint": { @@ -74,9 +75,9 @@ } }, "node_modules/@sasjs/utils": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.27.1.tgz", - "integrity": "sha512-CYTQwEj89cc7H3tGiQQcyDkZYaWRc1HZJpOF8o2RHYS37fIAOy0SyyJdq6mcQ74Nb1u5AmFXPFIvnRCMEcTYeQ==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.28.0.tgz", + "integrity": "sha512-aZAbBDSjvW2TCY1lkuGqqiyWtR4W8GFpCNCUKa72VIkl4zwTE/pnSHQ+v8QilGDSHSPbPEsJGaBaldMGwoI12w==", "dev": true, "dependencies": { "@types/fs-extra": "^9.0.11", @@ -141,9 +142,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz", - "integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -226,12 +227,12 @@ "dev": true }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "node_modules/axios-cookiejar-support": { @@ -330,9 +331,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -381,6 +382,17 @@ "node": ">= 0.2.0" } }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -442,9 +454,9 @@ "dev": true }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "node_modules/cssstyle": { @@ -472,23 +484,23 @@ "dev": true }, "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", + "integrity": "sha512-4AefxbTTdFtxDUdh0BuMBs2qJVL25Mow2zlcuuePegQwgD6GEmQao42LLEeksOui8nL4RcNEugIpFP7eRd33xg==", "dev": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "whatwg-url": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -503,15 +515,15 @@ } }, "node_modules/decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/defaults": { @@ -562,6 +574,21 @@ "node": ">=10" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", @@ -652,9 +679,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", "dev": true, "funding": [ { @@ -711,6 +738,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-installed-path": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/get-installed-path/-/get-installed-path-4.0.8.tgz", @@ -934,6 +970,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -992,21 +1037,21 @@ "dev": true }, "node_modules/jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-17.0.0.tgz", + "integrity": "sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==", "dev": true, "dependencies": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.4.1", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", + "data-urls": "^3.0.0", + "decimal.js": "^10.3.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", - "form-data": "^3.0.0", + "form-data": "^4.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -1021,12 +1066,12 @@ "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "whatwg-url": "^9.0.0", + "ws": "^8.0.0", "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "canvas": "^2.5.0" @@ -1037,20 +1082,6 @@ } } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1091,12 +1122,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/lodash.groupby": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", @@ -1126,21 +1151,21 @@ } }, "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" }, "engines": { "node": ">= 0.6" @@ -1354,6 +1379,15 @@ "node": ">= 0.10" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -1494,6 +1528,20 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -1653,17 +1701,16 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", - "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "dev": true, "dependencies": { - "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { @@ -1687,6 +1734,23 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1694,12 +1758,12 @@ "dev": true }, "node_modules/ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.1.tgz", + "integrity": "sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -1731,13 +1795,49 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } } }, "dependencies": { "@sasjs/adapter": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-2.10.0.tgz", - "integrity": "sha512-GbvyIgbODnAJaBaz/Tz8/IwcujNOsZcwzbIuKQtG5y13BzgVPtx/e7b2TAhdoBqd+8uVh0CdrSDfOV/SuvPurg==", + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@sasjs/adapter/-/adapter-2.10.4.tgz", + "integrity": "sha512-9b3WGZUzRgszZVyPfrabSx6TycL4JFFXQR/RQKsFCDDwT8UgLGfJ4JmgaGCSmGCcsqML/Q41QipdgWu1M/QA3g==", "dev": true, "requires": { "@sasjs/utils": "^2.27.1", @@ -1749,23 +1849,23 @@ } }, "@sasjs/cli": { - "version": "2.37.2", - "resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-2.37.2.tgz", - "integrity": "sha512-Bcm8UFN9Y/ZON4T31Gu9mf1REn1pZoStHFVrix/yp7mchFt5rrrY5RbIqO/AI1jzhShSVg9P7oU4VPJrqki+SA==", + "version": "2.37.8", + "resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-2.37.8.tgz", + "integrity": "sha512-V1FGK0ByS5v5+xOX5J1rlQDOXSA37YLL18etEUQOmWK5X9R5tbK4LPIx/pEjLyfZcCHddrm+0nGzRroC715Ilg==", "dev": true, "requires": { - "@sasjs/adapter": "2.10.0", - "@sasjs/core": "2.35.4", + "@sasjs/adapter": "2.10.4", + "@sasjs/core": "2.42.0", "@sasjs/lint": "1.11.2", - "@sasjs/utils": "2.27.1", - "chalk": "4.1.1", + "@sasjs/utils": "2.28.0", + "chalk": "4.1.2", "csv-stringify": "5.6.2", "dotenv": "10.0.0", "esm": "3.2.25", "find": "0.3.0", "get-installed-path": "4.0.8", "js-base64": "3.6.1", - "jsdom": "16.6.0", + "jsdom": "17.0.0", "jwt-decode": "3.1.2", "lodash.groupby": "4.6.0", "lodash.uniqby": "4.7.0", @@ -1773,13 +1873,14 @@ "ora": "5.4.1", "rimraf": "3.0.2", "shelljs": "0.8.4", - "xml": "1.0.1" + "xml": "1.0.1", + "yargs": "17.1.1" } }, "@sasjs/core": { - "version": "2.35.4", - "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.35.4.tgz", - "integrity": "sha512-Exr3+yRdvacKvbXQoi1RfGHi5NtZUkc7RwFNkemHTFXLYaIzPI8CGSCaQmKkwM1UteOJly2e2pw2YT6kHNY1NA==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.42.0.tgz", + "integrity": "sha512-EISPPCEv+vB3Nqp03NUaIvMZwEnggzGJeEpVfm2Sb504ySN1I2xiJ8bOHXIzvvYP5N/V9X8bXe1raLYnnt8HGA==", "dev": true }, "@sasjs/lint": { @@ -1792,9 +1893,9 @@ } }, "@sasjs/utils": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.27.1.tgz", - "integrity": "sha512-CYTQwEj89cc7H3tGiQQcyDkZYaWRc1HZJpOF8o2RHYS37fIAOy0SyyJdq6mcQ74Nb1u5AmFXPFIvnRCMEcTYeQ==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.28.0.tgz", + "integrity": "sha512-aZAbBDSjvW2TCY1lkuGqqiyWtR4W8GFpCNCUKa72VIkl4zwTE/pnSHQ+v8QilGDSHSPbPEsJGaBaldMGwoI12w==", "dev": true, "requires": { "@types/fs-extra": "^9.0.11", @@ -1853,9 +1954,9 @@ "dev": true }, "acorn": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz", - "integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "acorn-globals": { @@ -1913,12 +2014,12 @@ "dev": true }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "axios-cookiejar-support": { @@ -1981,9 +2082,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2014,6 +2115,17 @@ "colors": "1.0.3" } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -2063,9 +2175,9 @@ "dev": true }, "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "cssstyle": { @@ -2092,35 +2204,35 @@ "dev": true }, "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", + "integrity": "sha512-4AefxbTTdFtxDUdh0BuMBs2qJVL25Mow2zlcuuePegQwgD6GEmQao42LLEeksOui8nL4RcNEugIpFP7eRd33xg==", "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "whatwg-url": "^9.0.0" } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "defaults": { @@ -2161,6 +2273,18 @@ "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", @@ -2223,9 +2347,9 @@ } }, "follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", "dev": true }, "form-data": { @@ -2262,6 +2386,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-installed-path": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/get-installed-path/-/get-installed-path-4.0.8.tgz", @@ -2427,6 +2557,12 @@ "has": "^1.0.3" } }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -2470,21 +2606,21 @@ "dev": true }, "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-17.0.0.tgz", + "integrity": "sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==", "dev": true, "requires": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.4.1", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", + "data-urls": "^3.0.0", + "decimal.js": "^10.3.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", - "form-data": "^3.0.0", + "form-data": "^4.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -2499,22 +2635,9 @@ "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "whatwg-url": "^9.0.0", + "ws": "^8.0.0", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } } }, "jsonfile": { @@ -2549,12 +2672,6 @@ "type-check": "~0.3.2" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash.groupby": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", @@ -2578,18 +2695,18 @@ } }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "mimic-fn": { @@ -2752,6 +2869,12 @@ "resolve": "^1.1.6" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -2851,6 +2974,17 @@ "safe-buffer": "~5.2.0" } }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -2985,12 +3119,11 @@ "dev": true }, "whatwg-url": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", - "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "dev": true, "requires": { - "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } @@ -3010,6 +3143,17 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3017,9 +3161,9 @@ "dev": true }, "ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.1.tgz", + "integrity": "sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ==", "dev": true, "requires": {} }, @@ -3040,6 +3184,33 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/package.json b/package.json index e4a838e..2e523d5 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,6 @@ "prepare": "git rev-parse --git-dir && git config core.hooksPath ./.git-hooks || true" }, "devDependencies": { - "@sasjs/cli": "^2.37.2" + "@sasjs/cli": "^2.37.8" } }