diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..9dff263 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,47 @@ +name: SASjs Server Executable Release + +on: + push: + branches: + - master + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Dependencies WEB + working-directory: ./web + run: npm ci + + - name: Build WEB + working-directory: ./web + run: npm run build + env: + CI: true + + - name: Install Dependencies API + working-directory: ./api + run: npm ci + + - name: Build Executables + working-directory: ./api + run: npm run exe + env: + CI: true + + - name: Create Tag with Release + - uses: Klemensas/action-autotag@stable + with: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: | + ./executables/api-linux + ./executables/api-macos + ./executables/api-win.exe + token: ${{ secrets.GH_TOKEN }} diff --git a/.gitignore b/.gitignore index 4fe91fa..3d08c5d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ node_modules/ sas/ tmp/ build/ +sasjsbuild/ certificates/ executables/ .env diff --git a/README.md b/README.md index 9dd1780..49374fd 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,11 @@ Configuration is made in the `configuration` section of `package.json`: ### Using dockers: There is `.env.example` file present at root of the project. [for Production] + There is `.env.example` file present at `./api` of the project. [for Development] + There is `.env.example` file present at `./web` of the project. [for Development] + Remember to provide enviornment variables. #### Development diff --git a/api/package-lock.json b/api/package-lock.json index e6dd55e..370089b 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -8,7 +8,8 @@ "name": "api", "version": "0.0.1", "dependencies": { - "@sasjs/utils": "^2.33.1", + "@sasjs/core": "^2.48.6", + "@sasjs/utils": "2.34.1", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "express": "^4.17.1", @@ -18,7 +19,6 @@ "mongoose-sequence": "^5.3.1", "morgan": "^1.10.0", "multer": "^1.4.3", - "shelljs": "^0.8.4", "swagger-ui-express": "^4.1.6", "tsoa": "^3.14.0" }, @@ -35,7 +35,6 @@ "@types/morgan": "^1.9.3", "@types/multer": "^1.4.7", "@types/node": "^15.12.2", - "@types/shelljs": "^0.8.9", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "dotenv": "^10.0.0", @@ -1049,15 +1048,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -1560,10 +1550,15 @@ "@octokit/openapi-types": "^7.2.3" } }, + "node_modules/@sasjs/core": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.48.6.tgz", + "integrity": "sha512-5kCf4TdCVOYve4wSHVTi+db34hknDwvY2C/JVEPHT6T3CkQ5cnwRVPSFz/1WzXzcVvdUi4ag5xd9SDOsU12oWA==" + }, "node_modules/@sasjs/utils": { - "version": "2.33.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.33.1.tgz", - "integrity": "sha512-QQqI9+G/riMrbNSjambYwaJwGY3om2f3N9z9tNxBSva+W0g3JaOl4qeOqpRS91KhOmNhrLMCohg6jScMCz3YFQ==", + "version": "2.34.1", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.34.1.tgz", + "integrity": "sha512-hd1qieH3d7+xH96n5DpRGTEazeAhYyBBKCdnKhOXMgF2TZVoHFdRs5REfT88CKza6DHBGRVGnIVm5ORGP4cVLg==", "hasInstallScript": true, "dependencies": { "@types/fs-extra": "^9.0.11", @@ -1572,8 +1567,11 @@ "cli-table": "^0.3.6", "consola": "^2.15.0", "csv-stringify": "^5.6.5", + "find": "0.3.0", "fs-extra": "^10.0.0", "jwt-decode": "^3.1.2", + "lodash.groupby": "4.6.0", + "lodash.uniqby": "4.7.0", "prompts": "^2.4.1", "rimraf": "^3.0.2", "valid-url": "^1.0.9" @@ -1935,15 +1933,15 @@ "dev": true }, "node_modules/@tsoa/cli": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-3.14.0.tgz", - "integrity": "sha512-J+gdps63Ckdx27YYcZnex1A+Cb+QdWLEGiF/GpqXlPJd+tcwKo9jIGNkvSEY+3JY8Jg5jOgaV3ZcuxIHe01wMg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-3.14.1.tgz", + "integrity": "sha512-Bhir7MGg86Og/S0w2ADJyKIaZiJ6cEzD7hYAJvr2Nc3mfFHVh1KvARtH7qOu7KFouX9l59rsFIRZS9SbO364aw==", "dependencies": { "@tsoa/runtime": "^3.13.0", "deepmerge": "^4.2.2", "fs-extra": "^8.1.0", "glob": "^7.1.6", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "merge": "^2.1.0", "minimatch": "^3.0.4", "typescript": "^4.1.2", @@ -2244,16 +2242,6 @@ "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -2322,15 +2310,6 @@ "@types/yargs-parser": "*" } }, - "node_modules/@types/jest/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@types/jest/node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -2431,12 +2410,6 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "node_modules/@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -2539,16 +2512,6 @@ "@types/node": "*" } }, - "node_modules/@types/shelljs": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", - "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", - "dev": true, - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -2735,26 +2698,12 @@ } }, "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "string-width": "^4.1.0" } }, "node_modules/ansi-escapes": { @@ -2785,11 +2734,12 @@ } }, "node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -3619,15 +3569,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -4933,6 +4874,14 @@ "node": ">= 0.8" } }, + "node_modules/find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "dependencies": { + "traverse-chain": "~0.1.0" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -5820,14 +5769,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/into-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", @@ -5938,6 +5879,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -7975,6 +7917,11 @@ "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -8025,8 +7972,7 @@ "node_modules/lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" }, "node_modules/lowercase-keys": { "version": "1.0.1", @@ -8926,25 +8872,28 @@ } }, "node_modules/npm": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.16.0.tgz", - "integrity": "sha512-UUnKcjS7qFhZT90iZY/ZWz/jwF+rS0fIohDf41T6/SRXEqut0aav+1NkL6g6GqQGpIVBzpZc75BDfpq4PhfXBg==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", + "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", "bundleDependencies": [ + "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/ci-detect", "@npmcli/config", + "@npmcli/map-workspaces", + "@npmcli/package-json", "@npmcli/run-script", "abbrev", "ansicolors", "ansistyles", "archy", - "byte-size", "cacache", "chalk", "chownr", "cli-columns", "cli-table3", "columnify", + "fastest-levenshtein", "glob", "graceful-fs", "hosted-git-info", @@ -8952,7 +8901,6 @@ "init-package-json", "is-cidr", "json-parse-even-better-errors", - "leven", "libnpmaccess", "libnpmdiff", "libnpmexec", @@ -8973,6 +8921,7 @@ "node-gyp", "nopt", "npm-audit-report", + "npm-install-checks", "npm-package-arg", "npm-pick-manifest", "npm-profile", @@ -9000,73 +8949,76 @@ ], "dev": true, "dependencies": { - "@npmcli/arborist": "^2.6.1", - "@npmcli/ci-detect": "^1.2.0", - "@npmcli/config": "^2.2.0", - "@npmcli/run-script": "^1.8.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "archy": "~1.0.0", - "byte-size": "^7.0.1", - "cacache": "^15.2.0", - "chalk": "^4.1.0", - "chownr": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.6.0", - "columnify": "~1.5.4", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "hosted-git-info": "^4.0.2", - "ini": "^2.0.0", - "init-package-json": "^2.0.3", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "leven": "^3.1.0", - "libnpmaccess": "^4.0.2", - "libnpmdiff": "^2.0.4", - "libnpmexec": "^1.2.0", - "libnpmfund": "^1.1.0", - "libnpmhook": "^6.0.2", - "libnpmorg": "^2.0.2", - "libnpmpack": "^2.0.1", - "libnpmpublish": "^4.0.1", - "libnpmsearch": "^3.1.1", - "libnpmteam": "^2.0.3", - "libnpmversion": "^1.2.0", - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^7.1.2", - "nopt": "^5.0.0", - "npm-audit-report": "^2.1.5", - "npm-package-arg": "^8.1.4", - "npm-pick-manifest": "^6.1.1", - "npm-profile": "^5.0.3", - "npm-registry-fetch": "^11.0.0", - "npm-user-validate": "^1.0.1", - "npmlog": "~4.1.2", - "opener": "^1.5.2", - "pacote": "^11.3.3", - "parse-conflict-json": "^1.1.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^3.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "tar": "^6.1.0", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^1.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^2.0.2", - "write-file-atomic": "^3.0.3" + "@isaacs/string-locale-compare": "*", + "@npmcli/arborist": "*", + "@npmcli/ci-detect": "*", + "@npmcli/config": "*", + "@npmcli/map-workspaces": "*", + "@npmcli/package-json": "*", + "@npmcli/run-script": "*", + "abbrev": "*", + "ansicolors": "*", + "ansistyles": "*", + "archy": "*", + "cacache": "*", + "chalk": "*", + "chownr": "*", + "cli-columns": "*", + "cli-table3": "*", + "columnify": "*", + "fastest-levenshtein": "*", + "glob": "*", + "graceful-fs": "*", + "hosted-git-info": "*", + "ini": "*", + "init-package-json": "*", + "is-cidr": "*", + "json-parse-even-better-errors": "*", + "libnpmaccess": "*", + "libnpmdiff": "*", + "libnpmexec": "*", + "libnpmfund": "*", + "libnpmhook": "*", + "libnpmorg": "*", + "libnpmpack": "*", + "libnpmpublish": "*", + "libnpmsearch": "*", + "libnpmteam": "*", + "libnpmversion": "*", + "make-fetch-happen": "*", + "minipass": "*", + "minipass-pipeline": "*", + "mkdirp": "*", + "mkdirp-infer-owner": "*", + "ms": "*", + "node-gyp": "*", + "nopt": "*", + "npm-audit-report": "*", + "npm-install-checks": "*", + "npm-package-arg": "*", + "npm-pick-manifest": "*", + "npm-profile": "*", + "npm-registry-fetch": "*", + "npm-user-validate": "*", + "npmlog": "*", + "opener": "*", + "pacote": "*", + "parse-conflict-json": "*", + "qrcode-terminal": "*", + "read": "*", + "read-package-json": "*", + "read-package-json-fast": "*", + "readdir-scoped-modules": "*", + "rimraf": "*", + "semver": "*", + "ssri": "*", + "tar": "*", + "text-table": "*", + "tiny-relative-date": "*", + "treeverse": "*", + "validate-npm-package-name": "*", + "which": "*", + "write-file-atomic": "*" }, "bin": { "npm": "bin/npm-cli.js", @@ -9088,37 +9040,54 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "2.6.2", + "version": "2.9.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@isaacs/string-locale-compare": "^1.0.1", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/map-workspaces": "^1.0.2", "@npmcli/metavuln-calculator": "^1.1.0", "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", "@npmcli/run-script": "^1.8.2", "bin-links": "^2.2.1", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "^8.1.5", "npm-pick-manifest": "^6.1.0", "npm-registry-fetch": "^11.0.0", - "pacote": "^11.2.6", + "pacote": "^11.3.5", "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.0", + "ssri": "^8.0.1", "treeverse": "^1.0.4", "walk-up-path": "^1.0.0" }, @@ -9136,7 +9105,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "2.2.0", + "version": "2.3.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9163,8 +9132,18 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "2.0.9", + "version": "2.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9196,7 +9175,7 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "1.0.3", + "version": "1.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -9246,6 +9225,15 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + } + }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "1.3.2", "dev": true, @@ -9256,14 +9244,13 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "1.8.5", + "version": "1.8.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" } @@ -9387,13 +9374,16 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "1.1.5", + "version": "1.1.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/npm/node_modules/asap": { @@ -9498,21 +9488,13 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/byte-size": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/npm/node_modules/cacache": { - "version": "15.2.0", + "version": "15.3.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -9542,7 +9524,7 @@ "license": "Apache-2.0" }, "node_modules/npm/node_modules/chalk": { - "version": "4.1.1", + "version": "4.1.2", "dev": true, "inBundle": true, "license": "MIT", @@ -9708,6 +9690,15 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/npm/node_modules/colors": { "version": "1.4.0", "dev": true, @@ -9777,7 +9768,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.1", + "version": "4.3.2", "dev": true, "inBundle": true, "license": "MIT", @@ -9928,6 +9919,12 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.12", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/forever-agent": { "version": "0.6.1", "dev": true, @@ -9962,51 +9959,23 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "2.7.4", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/aproba": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, "node_modules/npm/node_modules/getpass": { @@ -10019,7 +9988,7 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "7.1.7", + "version": "7.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10039,7 +10008,7 @@ } }, "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.6", + "version": "4.2.8", "dev": true, "inBundle": true, "license": "ISC" @@ -10234,16 +10203,15 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "2.0.3", + "version": "2.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.1", - "npm-package-arg": "^8.1.2", + "npm-package-arg": "^8.1.5", "promzard": "^0.3.0", "read": "~1.0.1", - "read-package-json": "^3.0.1", + "read-package-json": "^4.1.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^3.0.0" @@ -10280,7 +10248,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.4.0", + "version": "2.7.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10312,12 +10280,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -10404,15 +10366,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/leven": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/libnpmaccess": { "version": "4.0.3", "dev": true, @@ -10439,8 +10392,8 @@ "binary-extensions": "^2.2.0", "diff": "^5.0.0", "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.1", - "pacote": "^11.3.0", + "npm-package-arg": "^8.1.4", + "pacote": "^11.3.4", "tar": "^6.1.0" }, "engines": { @@ -10448,7 +10401,7 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "1.2.0", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10560,7 +10513,7 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "1.2.0", + "version": "1.2.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10585,7 +10538,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "9.0.2", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10604,7 +10557,7 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", + "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" }, "engines": { @@ -10612,7 +10565,7 @@ } }, "node_modules/npm/node_modules/mime-db": { - "version": "1.48.0", + "version": "1.49.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10621,12 +10574,12 @@ } }, "node_modules/npm/node_modules/mime-types": { - "version": "2.1.31", + "version": "2.1.32", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" }, "engines": { "node": ">= 0.6" @@ -10645,7 +10598,7 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "3.1.3", + "version": "3.1.5", "dev": true, "inBundle": true, "license": "ISC", @@ -10669,7 +10622,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "1.3.3", + "version": "1.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -10815,6 +10768,66 @@ "node": ">= 10.12.0" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm/node_modules/nopt": { "version": "5.0.0", "dev": true, @@ -10831,13 +10844,13 @@ } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "3.0.2", + "version": "3.0.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", + "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, @@ -10885,7 +10898,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "8.1.4", + "version": "8.1.5", "dev": true, "inBundle": true, "license": "ISC", @@ -10964,15 +10977,28 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/npmlog": { - "version": "4.1.2", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/npm/node_modules/number-is-nan": { @@ -11036,12 +11062,12 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "11.3.4", + "version": "11.3.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.0.1", + "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", @@ -11088,12 +11114,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/performance-now": { "version": "2.1.0", "dev": true, @@ -11106,12 +11126,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", "dev": true, @@ -11209,7 +11223,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/read-package-json": { - "version": "3.0.1", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "ISC", @@ -11224,7 +11238,7 @@ } }, "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.2", + "version": "2.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -11237,18 +11251,17 @@ } }, "node_modules/npm/node_modules/readable-stream": { - "version": "2.3.7", + "version": "3.6.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/npm/node_modules/readdir-scoped-modules": { @@ -11321,19 +11334,6 @@ "node": ">=0.8" } }, - "node_modules/npm/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", "dev": true, @@ -11359,8 +11359,22 @@ } }, "node_modules/npm/node_modules/safe-buffer": { - "version": "5.1.2", + "version": "5.2.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "inBundle": true, "license": "MIT" }, @@ -11398,7 +11412,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/smart-buffer": { - "version": "4.1.0", + "version": "4.2.0", "dev": true, "inBundle": true, "license": "MIT", @@ -11422,17 +11436,17 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "5.0.0", + "version": "6.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" }, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/npm/node_modules/spdx-correct": { @@ -11462,7 +11476,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.9", + "version": "3.0.10", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -11505,12 +11519,12 @@ } }, "node_modules/npm/node_modules/string_decoder": { - "version": "1.1.1", + "version": "1.3.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/npm/node_modules/string-width": { @@ -11578,7 +11592,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.1.0", + "version": "6.1.11", "dev": true, "inBundle": true, "license": "ISC", @@ -12108,7 +12122,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -12529,15 +12544,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -12825,17 +12831,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -12904,6 +12899,7 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -13154,9 +13150,9 @@ } }, "node_modules/semver-regex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz", - "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", + "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", "dev": true, "engines": { "node": ">=8" @@ -13238,22 +13234,6 @@ "node": ">=8" } }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -13656,15 +13636,6 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string-length/node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -13691,15 +13662,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -13762,6 +13724,14 @@ "node": ">=6" } }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -14125,9 +14095,9 @@ } }, "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "node_modules/to-fast-properties": { @@ -14220,6 +14190,11 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "node_modules/traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -14230,9 +14205,9 @@ } }, "node_modules/trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", + "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14330,11 +14305,11 @@ "dev": true }, "node_modules/tsoa": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-3.14.0.tgz", - "integrity": "sha512-V4XBQ63Hk3LrkNGuZqMvJaLcwjUf/B3zaEwBr7gFPrYjPr/eRU8xXbdEcp3XoI90gakdcHG6gCNd/RqifrhaUQ==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-3.14.1.tgz", + "integrity": "sha512-fcGYucvQnjPEvKgxGdcsdJdsknS5JA9I/f/W30AN/yiyyMWWLvq2stM7c0gxEBAB5ICNa2dXx0sZtaQ1llwi8w==", "dependencies": { - "@tsoa/cli": "^3.14.0", + "@tsoa/cli": "^3.14.1", "@tsoa/runtime": "^3.13.0" }, "bin": { @@ -14775,15 +14750,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -15728,12 +15694,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -16141,10 +16101,15 @@ "@octokit/openapi-types": "^7.2.3" } }, + "@sasjs/core": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.48.6.tgz", + "integrity": "sha512-5kCf4TdCVOYve4wSHVTi+db34hknDwvY2C/JVEPHT6T3CkQ5cnwRVPSFz/1WzXzcVvdUi4ag5xd9SDOsU12oWA==" + }, "@sasjs/utils": { - "version": "2.33.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.33.1.tgz", - "integrity": "sha512-QQqI9+G/riMrbNSjambYwaJwGY3om2f3N9z9tNxBSva+W0g3JaOl4qeOqpRS91KhOmNhrLMCohg6jScMCz3YFQ==", + "version": "2.34.1", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.34.1.tgz", + "integrity": "sha512-hd1qieH3d7+xH96n5DpRGTEazeAhYyBBKCdnKhOXMgF2TZVoHFdRs5REfT88CKza6DHBGRVGnIVm5ORGP4cVLg==", "requires": { "@types/fs-extra": "^9.0.11", "@types/prompts": "^2.0.13", @@ -16152,8 +16117,11 @@ "cli-table": "^0.3.6", "consola": "^2.15.0", "csv-stringify": "^5.6.5", + "find": "0.3.0", "fs-extra": "^10.0.0", "jwt-decode": "^3.1.2", + "lodash.groupby": "4.6.0", + "lodash.uniqby": "4.7.0", "prompts": "^2.4.1", "rimraf": "^3.0.2", "valid-url": "^1.0.9" @@ -16432,15 +16400,15 @@ "dev": true }, "@tsoa/cli": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-3.14.0.tgz", - "integrity": "sha512-J+gdps63Ckdx27YYcZnex1A+Cb+QdWLEGiF/GpqXlPJd+tcwKo9jIGNkvSEY+3JY8Jg5jOgaV3ZcuxIHe01wMg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-3.14.1.tgz", + "integrity": "sha512-Bhir7MGg86Og/S0w2ADJyKIaZiJ6cEzD7hYAJvr2Nc3mfFHVh1KvARtH7qOu7KFouX9l59rsFIRZS9SbO364aw==", "requires": { "@tsoa/runtime": "^3.13.0", "deepmerge": "^4.2.2", "fs-extra": "^8.1.0", "glob": "^7.1.6", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "merge": "^2.1.0", "minimatch": "^3.0.4", "typescript": "^4.1.2", @@ -16705,16 +16673,6 @@ "@types/node": "*" } }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -16780,12 +16738,6 @@ "@types/yargs-parser": "*" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -16864,12 +16816,6 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -16971,16 +16917,6 @@ "@types/node": "*" } }, - "@types/shelljs": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", - "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -17139,25 +17075,12 @@ } }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-escapes": { @@ -17178,9 +17101,10 @@ } }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -17830,12 +17754,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -18889,6 +18807,14 @@ "unpipe": "~1.0.0" } }, + "find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "requires": { + "traverse-chain": "~0.1.0" + } + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -19553,11 +19479,6 @@ "side-channel": "^1.0.4" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, "into-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", @@ -19632,6 +19553,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -21170,6 +21092,11 @@ "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -21220,8 +21147,7 @@ "lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" }, "lowercase-keys": { "version": "1.0.1", @@ -21895,110 +21821,128 @@ "dev": true }, "npm": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.16.0.tgz", - "integrity": "sha512-UUnKcjS7qFhZT90iZY/ZWz/jwF+rS0fIohDf41T6/SRXEqut0aav+1NkL6g6GqQGpIVBzpZc75BDfpq4PhfXBg==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", + "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", "dev": true, "requires": { - "@npmcli/arborist": "^2.6.1", - "@npmcli/ci-detect": "^1.2.0", - "@npmcli/config": "^2.2.0", - "@npmcli/run-script": "^1.8.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "archy": "~1.0.0", - "byte-size": "^7.0.1", - "cacache": "^15.2.0", - "chalk": "^4.1.0", - "chownr": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.6.0", - "columnify": "~1.5.4", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "hosted-git-info": "^4.0.2", - "ini": "^2.0.0", - "init-package-json": "^2.0.3", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "leven": "^3.1.0", - "libnpmaccess": "^4.0.2", - "libnpmdiff": "^2.0.4", - "libnpmexec": "^1.2.0", - "libnpmfund": "^1.1.0", - "libnpmhook": "^6.0.2", - "libnpmorg": "^2.0.2", - "libnpmpack": "^2.0.1", - "libnpmpublish": "^4.0.1", - "libnpmsearch": "^3.1.1", - "libnpmteam": "^2.0.3", - "libnpmversion": "^1.2.0", - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^7.1.2", - "nopt": "^5.0.0", - "npm-audit-report": "^2.1.5", - "npm-package-arg": "^8.1.4", - "npm-pick-manifest": "^6.1.1", - "npm-profile": "^5.0.3", - "npm-registry-fetch": "^11.0.0", - "npm-user-validate": "^1.0.1", - "npmlog": "~4.1.2", - "opener": "^1.5.2", - "pacote": "^11.3.3", - "parse-conflict-json": "^1.1.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^3.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "tar": "^6.1.0", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^1.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^2.0.2", - "write-file-atomic": "^3.0.3" + "@isaacs/string-locale-compare": "*", + "@npmcli/arborist": "*", + "@npmcli/ci-detect": "*", + "@npmcli/config": "*", + "@npmcli/map-workspaces": "*", + "@npmcli/package-json": "*", + "@npmcli/run-script": "*", + "abbrev": "*", + "ansicolors": "*", + "ansistyles": "*", + "archy": "*", + "cacache": "*", + "chalk": "*", + "chownr": "*", + "cli-columns": "*", + "cli-table3": "*", + "columnify": "*", + "fastest-levenshtein": "*", + "glob": "*", + "graceful-fs": "*", + "hosted-git-info": "*", + "ini": "*", + "init-package-json": "*", + "is-cidr": "*", + "json-parse-even-better-errors": "*", + "libnpmaccess": "*", + "libnpmdiff": "*", + "libnpmexec": "*", + "libnpmfund": "*", + "libnpmhook": "*", + "libnpmorg": "*", + "libnpmpack": "*", + "libnpmpublish": "*", + "libnpmsearch": "*", + "libnpmteam": "*", + "libnpmversion": "*", + "make-fetch-happen": "*", + "minipass": "*", + "minipass-pipeline": "*", + "mkdirp": "*", + "mkdirp-infer-owner": "*", + "ms": "*", + "node-gyp": "*", + "nopt": "*", + "npm-audit-report": "*", + "npm-install-checks": "*", + "npm-package-arg": "*", + "npm-pick-manifest": "*", + "npm-profile": "*", + "npm-registry-fetch": "*", + "npm-user-validate": "*", + "npmlog": "*", + "opener": "*", + "pacote": "*", + "parse-conflict-json": "*", + "qrcode-terminal": "*", + "read": "*", + "read-package-json": "*", + "read-package-json-fast": "*", + "readdir-scoped-modules": "*", + "rimraf": "*", + "semver": "*", + "ssri": "*", + "tar": "*", + "text-table": "*", + "tiny-relative-date": "*", + "treeverse": "*", + "validate-npm-package-name": "*", + "which": "*", + "write-file-atomic": "*" }, "dependencies": { + "@gar/promisify": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, "@npmcli/arborist": { - "version": "2.6.2", + "version": "2.9.0", "bundled": true, "dev": true, "requires": { + "@isaacs/string-locale-compare": "^1.0.1", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/map-workspaces": "^1.0.2", "@npmcli/metavuln-calculator": "^1.1.0", "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", "@npmcli/run-script": "^1.8.2", "bin-links": "^2.2.1", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "^8.1.5", "npm-pick-manifest": "^6.1.0", "npm-registry-fetch": "^11.0.0", - "pacote": "^11.2.6", + "pacote": "^11.3.5", "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.0", + "ssri": "^8.0.1", "treeverse": "^1.0.4", "walk-up-path": "^1.0.0" } @@ -22009,7 +21953,7 @@ "dev": true }, "@npmcli/config": { - "version": "2.2.0", + "version": "2.3.0", "bundled": true, "dev": true, "requires": { @@ -22028,8 +21972,17 @@ "ansi-styles": "^4.3.0" } }, + "@npmcli/fs": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, "@npmcli/git": { - "version": "2.0.9", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { @@ -22053,7 +22006,7 @@ } }, "@npmcli/map-workspaces": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "dev": true, "requires": { @@ -22092,6 +22045,14 @@ "bundled": true, "dev": true }, + "@npmcli/package-json": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, "@npmcli/promise-spawn": { "version": "1.3.2", "bundled": true, @@ -22101,13 +22062,12 @@ } }, "@npmcli/run-script": { - "version": "1.8.5", + "version": "1.8.6", "bundled": true, "dev": true, "requires": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" } @@ -22194,12 +22154,12 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.5", + "version": "1.1.6", "bundled": true, "dev": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "readable-stream": "^3.6.0" } }, "asap": { @@ -22280,16 +22240,12 @@ "bundled": true, "dev": true }, - "byte-size": { - "version": "7.0.1", - "bundled": true, - "dev": true - }, "cacache": { - "version": "15.2.0", + "version": "15.3.0", "bundled": true, "dev": true, "requires": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -22315,7 +22271,7 @@ "dev": true }, "chalk": { - "version": "4.1.1", + "version": "4.1.2", "bundled": true, "dev": true, "requires": { @@ -22421,6 +22377,11 @@ "bundled": true, "dev": true }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, "colors": { "version": "1.4.0", "bundled": true, @@ -22473,7 +22434,7 @@ } }, "debug": { - "version": "4.3.1", + "version": "4.3.2", "bundled": true, "dev": true, "requires": { @@ -22582,6 +22543,11 @@ "bundled": true, "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "bundled": true, + "dev": true + }, "forever-agent": { "version": "0.6.1", "bundled": true, @@ -22606,43 +22572,19 @@ "dev": true }, "gauge": { - "version": "2.7.4", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "aproba": "^1.0.3", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" } }, "getpass": { @@ -22654,7 +22596,7 @@ } }, "glob": { - "version": "7.1.7", + "version": "7.2.0", "bundled": true, "dev": true, "requires": { @@ -22667,7 +22609,7 @@ } }, "graceful-fs": { - "version": "4.2.6", + "version": "4.2.8", "bundled": true, "dev": true }, @@ -22805,15 +22747,14 @@ "dev": true }, "init-package-json": { - "version": "2.0.3", + "version": "2.0.5", "bundled": true, "dev": true, "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^8.1.2", + "npm-package-arg": "^8.1.5", "promzard": "^0.3.0", "read": "~1.0.1", - "read-package-json": "^3.0.1", + "read-package-json": "^4.1.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^3.0.0" @@ -22838,7 +22779,7 @@ } }, "is-core-module": { - "version": "2.4.0", + "version": "2.7.0", "bundled": true, "dev": true, "requires": { @@ -22860,11 +22801,6 @@ "bundled": true, "dev": true }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "isexe": { "version": "2.0.0", "bundled": true, @@ -22931,11 +22867,6 @@ "bundled": true, "dev": true }, - "leven": { - "version": "3.1.0", - "bundled": true, - "dev": true - }, "libnpmaccess": { "version": "4.0.3", "bundled": true, @@ -22957,13 +22888,13 @@ "binary-extensions": "^2.2.0", "diff": "^5.0.0", "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.1", - "pacote": "^11.3.0", + "npm-package-arg": "^8.1.4", + "pacote": "^11.3.4", "tar": "^6.1.0" } }, "libnpmexec": { - "version": "1.2.0", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { @@ -23046,7 +22977,7 @@ } }, "libnpmversion": { - "version": "1.2.0", + "version": "1.2.1", "bundled": true, "dev": true, "requires": { @@ -23066,7 +22997,7 @@ } }, "make-fetch-happen": { - "version": "9.0.2", + "version": "9.1.0", "bundled": true, "dev": true, "requires": { @@ -23084,21 +23015,21 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", + "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, "mime-db": { - "version": "1.48.0", + "version": "1.49.0", "bundled": true, "dev": true }, "mime-types": { - "version": "2.1.31", + "version": "2.1.32", "bundled": true, "dev": true, "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "minimatch": { @@ -23110,7 +23041,7 @@ } }, "minipass": { - "version": "3.1.3", + "version": "3.1.5", "bundled": true, "dev": true, "requires": { @@ -23126,7 +23057,7 @@ } }, "minipass-fetch": { - "version": "1.3.3", + "version": "1.4.1", "bundled": true, "dev": true, "requires": { @@ -23223,6 +23154,57 @@ "semver": "^7.3.2", "tar": "^6.0.2", "which": "^2.0.2" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "nopt": { @@ -23234,12 +23216,12 @@ } }, "normalize-package-data": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true, "requires": { "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", + "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } @@ -23274,7 +23256,7 @@ "dev": true }, "npm-package-arg": { - "version": "8.1.4", + "version": "8.1.5", "bundled": true, "dev": true, "requires": { @@ -23332,14 +23314,25 @@ "dev": true }, "npmlog": { - "version": "4.1.2", + "version": "5.0.1", "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + } } }, "number-is-nan": { @@ -23379,11 +23372,11 @@ } }, "pacote": { - "version": "11.3.4", + "version": "11.3.5", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^2.0.1", + "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", @@ -23419,11 +23412,6 @@ "bundled": true, "dev": true }, - "path-parse": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, "performance-now": { "version": "2.1.0", "bundled": true, @@ -23434,11 +23422,6 @@ "bundled": true, "dev": true }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, "promise-all-reject-late": { "version": "1.0.1", "bundled": true, @@ -23505,7 +23488,7 @@ "dev": true }, "read-package-json": { - "version": "3.0.1", + "version": "4.1.1", "bundled": true, "dev": true, "requires": { @@ -23516,7 +23499,7 @@ } }, "read-package-json-fast": { - "version": "2.0.2", + "version": "2.0.3", "bundled": true, "dev": true, "requires": { @@ -23525,17 +23508,13 @@ } }, "readable-stream": { - "version": "2.3.7", + "version": "3.6.0", "bundled": true, "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdir-scoped-modules": { @@ -23597,15 +23576,6 @@ } } }, - "resolve": { - "version": "1.20.0", - "bundled": true, - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "retry": { "version": "0.12.0", "bundled": true, @@ -23620,7 +23590,7 @@ } }, "safe-buffer": { - "version": "5.1.2", + "version": "5.2.1", "bundled": true, "dev": true }, @@ -23648,7 +23618,7 @@ "dev": true }, "smart-buffer": { - "version": "4.1.0", + "version": "4.2.0", "bundled": true, "dev": true }, @@ -23662,13 +23632,13 @@ } }, "socks-proxy-agent": { - "version": "5.0.0", + "version": "6.1.0", "bundled": true, "dev": true, "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, "spdx-correct": { @@ -23695,7 +23665,7 @@ } }, "spdx-license-ids": { - "version": "3.0.9", + "version": "3.0.10", "bundled": true, "dev": true }, @@ -23724,11 +23694,11 @@ } }, "string_decoder": { - "version": "1.1.1", + "version": "1.3.0", "bundled": true, "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "string-width": { @@ -23777,7 +23747,7 @@ } }, "tar": { - "version": "6.1.0", + "version": "6.1.11", "bundled": true, "dev": true, "requires": { @@ -24184,7 +24154,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-to-regexp": { "version": "0.1.7", @@ -24495,12 +24466,6 @@ "react-is": "^17.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -24714,14 +24679,6 @@ "picomatch": "^2.2.1" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -24778,6 +24735,7 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -24955,9 +24913,9 @@ } }, "semver-regex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz", - "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", + "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", "dev": true }, "send": { @@ -25023,16 +24981,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -25371,12 +25319,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -25399,12 +25341,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -25452,6 +25388,13 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } } }, "strip-bom": { @@ -25722,9 +25665,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { @@ -25795,6 +25738,11 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -25802,9 +25750,9 @@ "dev": true }, "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", + "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true }, "ts-jest": { @@ -25861,11 +25809,11 @@ "dev": true }, "tsoa": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-3.14.0.tgz", - "integrity": "sha512-V4XBQ63Hk3LrkNGuZqMvJaLcwjUf/B3zaEwBr7gFPrYjPr/eRU8xXbdEcp3XoI90gakdcHG6gCNd/RqifrhaUQ==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-3.14.1.tgz", + "integrity": "sha512-fcGYucvQnjPEvKgxGdcsdJdsknS5JA9I/f/W30AN/yiyyMWWLvq2stM7c0gxEBAB5ICNa2dXx0sZtaQ1llwi8w==", "requires": { - "@tsoa/cli": "^3.14.0", + "@tsoa/cli": "^3.14.1", "@tsoa/runtime": "^3.13.0" } }, @@ -26204,12 +26152,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", diff --git a/api/package.json b/api/package.json index 4742b51..c30b568 100644 --- a/api/package.json +++ b/api/package.json @@ -4,26 +4,32 @@ "description": "Api of SASjs server", "main": "./src/server.ts", "scripts": { - "prestart": "npm run swagger", - "prestart:prod": "npm run swagger", + "initial": "npm run swagger && npm run compileSysInit", + "prestart": "npm run initial", + "prestart:prod": "npm run initial", + "prebuild": "npm run initial", "start": "nodemon ./src/server.ts", "start:prod": "nodemon ./src/prod-server.ts", "build": "rimraf build && tsc", "swagger": "tsoa spec", "semantic-release": "semantic-release -d", "prepare": "[ -d .git ] && git config core.hooksPath ./.git-hooks || true", - "test": "mkdir -p tmp && mkdir -p ../web/build && jest --coverage", + "test": "mkdir -p tmp && mkdir -p ../web/build && jest --silent --coverage", "lint:fix": "npx prettier --write \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"", "lint": "npx prettier --check \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"", "package:lib": "npm run build && cp ./package.json build && cp README.md build && cd build && npm version \"5.0.0\" && npm pack", - "exe": "npm run build && npm run public:copy && npm run web:copy && pkg .", + "exe": "npm run build && npm run exe:copy && pkg .", + "exe:copy": "npm run public:copy && npm run sasjsbuild:copy && npm run web:copy", "public:copy": "cp -r ./public/ ./build/public/", - "web:copy": "rimraf web && mkdir web && cp -r ../web/build/ ./web/build/" + "sasjsbuild:copy": "cp -r ./sasjsbuild/ ./build/sasjsbuild/", + "web:copy": "rimraf web && mkdir web && cp -r ../web/build/ ./web/build/", + "compileSysInit": "ts-node ./scripts/compileSysInit.ts" }, "bin": "./build/src/server.js", "pkg": { "assets": [ "./build/public/**/*", + "./build/sasjsbuild/**/*", "./web/build/**/*" ], "targets": [ @@ -40,7 +46,8 @@ }, "author": "Analytium Ltd", "dependencies": { - "@sasjs/utils": "^2.33.1", + "@sasjs/core": "^2.48.6", + "@sasjs/utils": "2.34.1", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "express": "^4.17.1", @@ -50,7 +57,6 @@ "mongoose-sequence": "^5.3.1", "morgan": "^1.10.0", "multer": "^1.4.3", - "shelljs": "^0.8.4", "swagger-ui-express": "^4.1.6", "tsoa": "^3.14.0" }, @@ -64,7 +70,6 @@ "@types/morgan": "^1.9.3", "@types/multer": "^1.4.7", "@types/node": "^15.12.2", - "@types/shelljs": "^0.8.9", "@types/supertest": "^2.0.11", "@types/swagger-ui-express": "^4.1.3", "dotenv": "^10.0.0", diff --git a/api/public/swagger.yaml b/api/public/swagger.yaml index 03e1461..4795851 100644 --- a/api/public/swagger.yaml +++ b/api/public/swagger.yaml @@ -364,7 +364,7 @@ components: type: string log: type: string - result: + _webout: type: string message: type: string @@ -981,7 +981,7 @@ paths: application/json: schema: type: string - description: "Trigger a SAS program using it's location in the _program parameter.\nEnable debugging using the _debug parameter.\nAdditional URL parameters are turned into SAS macro variables.\nAny files provided are placed into the session and\ncorresponding _WEBIN_XXX variables are created." + description: "Trigger a SAS program using it's location in the _program parameter.\r\nEnable debugging using the _debug parameter.\r\nAdditional URL parameters are turned into SAS macro variables.\r\nAny files provided are placed into the session and\r\ncorresponding _WEBIN_XXX variables are created." summary: 'Execute Stored Program, return raw content' tags: - STP @@ -1005,7 +1005,7 @@ paths: application/json: schema: $ref: '#/components/schemas/ExecuteReturnJsonResponse' - description: "Trigger a SAS program using it's location in the _program parameter.\nEnable debugging using the _debug parameter.\nAdditional URL parameters are turned into SAS macro variables.\nAny files provided are placed into the session and\ncorresponding _WEBIN_XXX variables are created." + description: "Trigger a SAS program using it's location in the _program parameter.\r\nEnable debugging using the _debug parameter.\r\nAdditional URL parameters are turned into SAS macro variables.\r\nAny files provided are placed into the session and\r\ncorresponding _WEBIN_XXX variables are created." summary: 'Execute Stored Program, return JSON' tags: - STP diff --git a/api/scripts/compileSysInit.ts b/api/scripts/compileSysInit.ts new file mode 100644 index 0000000..2aa5443 --- /dev/null +++ b/api/scripts/compileSysInit.ts @@ -0,0 +1,35 @@ +import path from 'path' +import { + createFile, + loadDependenciesFile, + readFile, + SASJsFileType +} from '@sasjs/utils' +import { apiRoot, sysInitCompiledPath } from '../src/utils' + +const macroCorePath = path.join(apiRoot, 'node_modules', '@sasjs', 'core') + +const compiledSystemInit = async (systemInit: string) => + 'options ps=max;\n' + + (await loadDependenciesFile({ + fileContent: systemInit, + type: SASJsFileType.job, + programFolders: [], + macroFolders: [], + buildSourceFolder: '', + macroCorePath + })) + +const createSysInitFile = async () => { + console.log('macroCorePath', macroCorePath) + const systemInitContent = await readFile( + path.join(__dirname, 'systemInit.sas') + ) + + await createFile( + path.join(sysInitCompiledPath), + await compiledSystemInit(systemInitContent) + ) +} + +createSysInitFile() diff --git a/api/scripts/systemInit.sas b/api/scripts/systemInit.sas new file mode 100644 index 0000000..0b07025 --- /dev/null +++ b/api/scripts/systemInit.sas @@ -0,0 +1,13 @@ +/** + @file + @brief The systemInit program + @details This program is inserted into every sasjs/server program invocation, + _before_ any user-provided content. + +

SAS Macros

+ @li mcf_stpsrv_header.sas + +**/ + + +%mcf_stpsrv_header(wrap=YES, insert_cmplib=YES) diff --git a/api/src/controllers/internal/Execution.ts b/api/src/controllers/internal/Execution.ts index 29ca4b9..c19d2e1 100644 --- a/api/src/controllers/internal/Execution.ts +++ b/api/src/controllers/internal/Execution.ts @@ -18,10 +18,6 @@ export class ExecutionController { let program = await readFile(programPath) - Object.keys(vars).forEach( - (key: string) => (program = `%let ${key}=${vars[key]};\n${program}`) - ) - const sessionController = getSessionController() const session = await sessionController.getSession() @@ -38,7 +34,12 @@ export class ExecutionController { preProgramVariables?.accessToken ?? 'accessToken' ) - program = ` + const varStatments = Object.keys(vars).reduce( + (computed: string, key: string) => + `${computed}%let ${key}=${vars[key]};\n`, + '' + ) + const preProgramVarStatments = ` %let _sasjs_tokenfile=${tokenFile}; %let _sasjs_username=${preProgramVariables?.username}; %let _sasjs_userid=${preProgramVariables?.userId}; @@ -47,8 +48,17 @@ export class ExecutionController { %let _sasjs_apipath=/SASjsApi/stp/execute; %let _metaperson=&_sasjs_displayname; %let _metauser=&_sasjs_username; -%let sasjsprocessmode=Stored Program; -filename _webout "${weboutPath}"; +%let sasjsprocessmode=Stored Program;` + + program = ` +/* runtime vars */ +${varStatments} +filename _webout "${weboutPath}" mod; + +/* dynamic user-provided vars */ +${preProgramVarStatments} + +/* actual job code */ ${program}` // if no files are uploaded filesNamesMap will be undefined @@ -91,6 +101,7 @@ ${program}` typeof vars._debug === 'string' ? parseInt(vars._debug) : vars._debug let debugResponse: string | undefined + if ((debugValue && debugValue >= 131) || session.crashed) { debugResponse = `${webout}

SAS Log

${log}
` } @@ -98,7 +109,16 @@ ${program}` session.inUse = false sessionController.deleteSession(session) - if (returnJson) return { result: debugResponse ?? webout, log } + if (returnJson) { + const response: any = { + webout: webout + } + if ((debugValue && debugValue >= 131) || session.crashed) { + response.log = log + } + + return response + } return debugResponse ?? webout } diff --git a/api/src/controllers/internal/Session.ts b/api/src/controllers/internal/Session.ts index 56a6e58..4b17fd6 100644 --- a/api/src/controllers/internal/Session.ts +++ b/api/src/controllers/internal/Session.ts @@ -2,12 +2,17 @@ import path from 'path' import { Session } from '../../types' import { promisify } from 'util' import { execFile } from 'child_process' -import { getTmpSessionsFolderPath, generateUniqueFileName } from '../../utils' +import { + getTmpSessionsFolderPath, + generateUniqueFileName, + sysInitCompiledPath +} from '../../utils' import { deleteFolder, createFile, fileExists, - generateTimestamp + generateTimestamp, + readFile } from '@sasjs/utils' const execFilePromise = promisify(execFile) @@ -52,9 +57,13 @@ export class SessionController { // we clean them up after a predefined period, if unused this.scheduleSessionDestroy(session) + // Place compiled system init code to autoexec + const compiledSystemInitContent = await readFile(sysInitCompiledPath) + // the autoexec file is executed on SAS startup const autoExecPath = path.join(sessionFolder, 'autoexec.sas') - await createFile(autoExecPath, autoExecContent) + const contentForAutoExec = `/* compiled systemInit */\n${compiledSystemInitContent}\n/* autoexec */\n${autoExecContent}` + await createFile(autoExecPath, contentForAutoExec) // create empty code.sas as SAS will not start without a SYSIN const codePath = path.join(session.path, 'code.sas') diff --git a/api/src/controllers/stp.ts b/api/src/controllers/stp.ts index 460ad0d..632b576 100644 --- a/api/src/controllers/stp.ts +++ b/api/src/controllers/stp.ts @@ -14,7 +14,6 @@ import { import { ExecutionController } from './internal' import { PreProgramVars } from '../types' import { getTmpFilesFolderPath, makeFilesNamesMap } from '../utils' -import { request } from 'https' interface ExecuteReturnJsonPayload { /** @@ -26,7 +25,7 @@ interface ExecuteReturnJsonPayload { interface ExecuteReturnJsonResponse { status: string log?: string - result?: string + _webout?: string message?: string } @@ -121,7 +120,7 @@ const executeReturnJson = async ( ) return { status: 'success', - result: jsonResult.result, + _webout: jsonResult.webout, log: jsonResult.log } } catch (err: any) { diff --git a/api/src/routes/web/web.ts b/api/src/routes/web/web.ts index 6a366dc..c9d1dd3 100644 --- a/api/src/routes/web/web.ts +++ b/api/src/routes/web/web.ts @@ -1,4 +1,4 @@ -import { fileExists, readFile } from '@sasjs/utils' +import { readFile } from '@sasjs/utils' import express from 'express' import path from 'path' import { getWebBuildFolderPath } from '../../utils' @@ -12,22 +12,23 @@ const codeToInject = ` ` webRouter.get('/', async (_, res) => { - const indexHtmlPath = path.join(getWebBuildFolderPath(), 'index.html') - if (!(await fileExists(indexHtmlPath))) { + let content: string + try { + const indexHtmlPath = path.join(getWebBuildFolderPath(), 'index.html') + content = await readFile(indexHtmlPath) + } catch (_) { return res.send('Web Build is not present') } const { MODE } = process.env if (MODE?.trim() !== 'server') { - const content = await readFile(indexHtmlPath) - const injectedContent = content.replace('', `${codeToInject}`) res.setHeader('Content-Type', 'text/html') return res.send(injectedContent) } - res.sendFile(indexHtmlPath) + return res.send(content) }) export default webRouter diff --git a/api/src/utils/connectDB.ts b/api/src/utils/connectDB.ts index e785735..1ba640a 100644 --- a/api/src/utils/connectDB.ts +++ b/api/src/utils/connectDB.ts @@ -3,33 +3,30 @@ import mongoose from 'mongoose' import { configuration } from '../../package.json' import { getDesktopFields } from '.' import { populateClients } from '../routes/api/auth' -import shelljs from 'shelljs' export const connectDB = async () => { - shelljs.exec(`sasjs v`) - - const { MODE } = process.env - if (MODE?.trim() !== 'server') { - console.log('Running in Destop Mode, no DB to connect.') - - const { sasLoc, driveLoc } = await getDesktopFields() - - process.sasLoc = sasLoc - process.driveLoc = driveLoc - - return - } else { - const { SAS_PATH } = process.env - const sasDir = SAS_PATH ?? configuration.sasPath - - process.sasLoc = path.join(sasDir, 'sas') - } - - console.log('sasLoc: ', process.sasLoc) - // NOTE: when exporting app.js as agent for supertest // we should exlcude connecting to the real database if (process.env.NODE_ENV !== 'test') { + const { MODE } = process.env + if (MODE?.trim() !== 'server') { + console.log('Running in Destop Mode, no DB to connect.') + + const { sasLoc, driveLoc } = await getDesktopFields() + + process.sasLoc = sasLoc + process.driveLoc = driveLoc + + return + } else { + const { SAS_PATH } = process.env + const sasDir = SAS_PATH ?? configuration.sasPath + + process.sasLoc = path.join(sasDir, 'sas') + } + + console.log('sasLoc: ', process.sasLoc) + mongoose.connect(process.env.DB_CONNECT as string, async (err) => { if (err) throw err diff --git a/api/src/utils/file.ts b/api/src/utils/file.ts index 14c25bb..e9d7731 100644 --- a/api/src/utils/file.ts +++ b/api/src/utils/file.ts @@ -1,8 +1,16 @@ import path from 'path' import { getRealPath } from '@sasjs/utils' +export const apiRoot = path.join(__dirname, '..', '..') +export const codebaseRoot = path.join(apiRoot, '..') +export const sysInitCompiledPath = path.join( + apiRoot, + 'sasjsbuild', + 'systemInitCompiled.sas' +) + export const getWebBuildFolderPath = () => - path.join(__dirname, '..', '..', '..', 'web', 'build') + path.join(codebaseRoot, 'web', 'build') export const getTmpFolderPath = () => process.driveLoc ?? getRealPath(path.join(process.cwd(), 'tmp'))