diff --git a/package-lock.json b/package-lock.json index 7f4e9b96..931ba233 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,1763 @@ { "name": "jbossorg", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "jbossorg", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@patternfly/pfe-avatar": "^1.0.0-prerelease.56", + "@patternfly/pfe-band": "^1.0.0-prerelease.56", + "@patternfly/pfe-card": "^1.0.0-prerelease.56", + "@patternfly/pfe-cta": "^1.0.0-prerelease.56", + "@patternfly/pfe-datetime": "^1.0.0-prerelease.56", + "@patternfly/pfe-icon": "^1.0.0-prerelease.56", + "@patternfly/pfe-styles": "^1.0.0-prerelease.56", + "asciidoctor": "^2.2.0", + "dateformat": "^3.0.3", + "feed": "^4.2.1", + "feedparser": "^2.2.10", + "fs-extra": "^9.0.1", + "html-to-text": "^6.0.0", + "jsdom": "^16.4.0", + "node-fetch": "^2.6.1", + "typescript": "^3.9.7", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">12.0.0" + } + }, + "node_modules/@asciidoctor/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.0.tgz", + "integrity": "sha512-WN/mFuU4SeWaDqpGvRwAf+Tq2T8NQkVVpZ3Ne1/ZRxDKElzFkqq8bGbmxSMWmMVzC+H9ZO1YxxbOjhWEiNvpOA==", + "dependencies": { + "asciidoctor-opal-runtime": "0.3.0", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/@patternfly/pfe-avatar": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-avatar/-/pfe-avatar-1.0.0-prerelease.56.tgz", + "integrity": "sha512-vTKiGKOLgfpMX0nRHUumEdT8mXU2qEz3qkOTtyGBryzVm/M1aAZ764cDmYrNQj7XZVg+uSebxgt7bFO6hpW0Hg==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-band": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-band/-/pfe-band-1.0.0-prerelease.56.tgz", + "integrity": "sha512-3RxyBUt8OZnx+i0D+fUe/nGvYO5wmbZcLzNvkp2f3YReOFTrlP6SqB6A++hlnjjYh/TqcOLbckyloPWx59YKag==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-card": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-card/-/pfe-card-1.0.0-prerelease.56.tgz", + "integrity": "sha512-CBeRB/1eVzpXw6Y/hnp9/5AwF0FwCU/7xwfLrRDiN4krmEVcsjlYX4V8ugEiZBybgrXx3PtPpJZ5uPQMqrfLkA==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-cta": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-cta/-/pfe-cta-1.0.0-prerelease.56.tgz", + "integrity": "sha512-tj2el/fjTVTQbd74H35FqkQbcE3HZDCTGRzaBThI1Fd92KywokouybF322Xi/sbQpKqmBhNrDYKfBb4PQQpF7g==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-datetime": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-datetime/-/pfe-datetime-1.0.0-prerelease.56.tgz", + "integrity": "sha512-FxaQzRnK/4fl0wnXIJ/PSb7su0i9Fxtw2akduVXHVe4AzQC2CZUMLgj43YgVkZL/8rthwo7aHIUIimRF15ekZA==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-icon": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-icon/-/pfe-icon-1.0.0-prerelease.56.tgz", + "integrity": "sha512-gChgwaGHVpYqlLQjSUJlfyPWTfleX2I44O/IlCEGiFvChP4zI7kUPDREiGK3VV8h04Pc38EtthesBiStooq6gQ==", + "dependencies": { + "@patternfly/pfelement": "^1.0.0-prerelease.56" + } + }, + "node_modules/@patternfly/pfe-styles": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfe-styles/-/pfe-styles-1.0.0-prerelease.56.tgz", + "integrity": "sha512-Wv/FOg9djvAu77hRrwPigVgBETIVMJDa8Odg9IteBXEGlVnnsWotRx4FjUtfEDVLjn9dyJjkx5iJd4oWV11drA==" + }, + "node_modules/@patternfly/pfelement": { + "version": "1.0.0-prerelease.56", + "resolved": "https://registry.npmjs.org/@patternfly/pfelement/-/pfelement-1.0.0-prerelease.56.tgz", + "integrity": "sha512-YT+BJ8QLSJUxdhaaPwtoAjwHeunUaZY2y+i/48lMNmO1iGLghmpsH5J6awTZxH4oaIKwQ1MmSBHe7CvzpIrIpw==" + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-indexofobject": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz", + "integrity": "sha1-qqEo5iybPDWAlFaMIZ/2T+SJ1Co=" + }, + "node_modules/asciidoctor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/asciidoctor/-/asciidoctor-2.2.0.tgz", + "integrity": "sha512-w5oBMYPaA5RP/Qlv6XQzWE7kSf8d9sLMRBItcU+nn7E/FF9yGLUd1p/dzqWiu600KyNHBpp8Ml/VTaGjUm6LrQ==", + "dependencies": { + "@asciidoctor/cli": "3.4.0", + "@asciidoctor/core": "2.2.0" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.0.tgz", + "integrity": "sha512-YapVwl2qbbs6sIe1dvAlMpBzQksFVTSa2HOduOKFNhZlE9bNmn+moDgGVvjWPbzMPo/g8gItyTHfWB2u7bQxag==", + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/asciidoctor/node_modules/@asciidoctor/cli": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@asciidoctor/cli/-/cli-3.4.0.tgz", + "integrity": "sha512-jOtxA0I6zB+6z+GGwm9+xhlmGTqCTkFPE902L6fauFlE6v7LxjhLYNxvjDVyn0zMrFLybvoSRcAnM3DcticNoQ==", + "dependencies": { + "yargs": "15.3.1" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "@asciidoctor/core": "^2.0.0-rc.1" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "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=" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz", + "integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz", + "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/feed": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", + "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/feedparser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/feedparser/-/feedparser-2.2.10.tgz", + "integrity": "sha512-WoAOooa61V8/xuKMi2pEtK86qQ3ZH/M72EEGdqlOTxxb3m6ve1NPvZcmPFs3wEDfcBbFLId2GqZ4YjsYi+h1xA==", + "dependencies": { + "addressparser": "^1.0.1", + "array-indexofobject": "~0.0.1", + "lodash.assign": "^4.2.0", + "lodash.get": "^4.4.2", + "lodash.has": "^4.5.2", + "lodash.uniq": "^4.5.0", + "mri": "^1.1.5", + "readable-stream": "^2.3.7", + "sax": "^1.2.4" + }, + "bin": { + "feedparser": "bin/feedparser.js" + }, + "engines": { + "node": ">= 10.18.1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "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==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-to-text": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-6.0.0.tgz", + "integrity": "sha512-r0KNC5aqCAItsjlgtirW6RW25c92Ee3ybQj8z//4Sl4suE3HIPqM4deGpYCUJULLjtVPEP1+Ma+1ZeX1iMsCiA==", + "dependencies": { + "deepmerge": "^4.2.2", + "he": "^1.2.0", + "htmlparser2": "^4.1.0", + "lodash": "^4.17.20", + "minimist": "^1.2.5" + }, + "bin": { + "html-to-text": "bin/cli.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/html-to-text/node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/jsdom": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "dependencies": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mri": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", + "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "engines": { + "node": ">=8.11" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@asciidoctor/core": { "version": "2.2.0", @@ -1088,16 +2843,6 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1113,6 +2858,16 @@ } } }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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", @@ -1280,7 +3035,8 @@ "ws": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "requires": {} }, "xml-js": { "version": "1.6.11", diff --git a/src/content/posts-aggregator/1.json b/src/content/posts-aggregator/1.json index e8a0d571..41aee27e 100644 --- a/src/content/posts-aggregator/1.json +++ b/src/content/posts-aggregator/1.json @@ -1,13 +1,13 @@ { - "title": "How to initialize an Array in Java in 4 simple ways", - "link": "http://www.mastertheboss.com/java/4-ways-to-initialize-an-array-in-java/", + "title": "Improvements to the GraphQL-Java integration", + "link": "https://vertx.io/blog/vertx-web-graphql-java-improvements", "author": [ { - "name": "F.Marchioni", + "name": "Thomas Segismont", "avatar": null } ], - "date": "2023-02-15T07:17:47.000Z", - "feed_title": "Mastertheboss", - "content": "This article discusses about array initialization in Java, showing multiple ways to initialize an array, some of them you probably don’t know! How to declare an array in Java Firstly, some background. Java classifies types as primitive types, user-defined types, and array types. An array type is a region of memory that stores values in ... The post appeared first on ." + "date": "2023-03-09T00:00:00.000Z", + "feed_title": "Vert.x", + "content": "Vert.x 4.4 ships several improvements to the GraphQL-Java integration." } \ No newline at end of file diff --git a/src/content/posts-aggregator/10.json b/src/content/posts-aggregator/10.json index b8c9dd19..49c2c5cd 100644 --- a/src/content/posts-aggregator/10.json +++ b/src/content/posts-aggregator/10.json @@ -1,13 +1,13 @@ { - "title": "Synchronize your KIE Sandbox workspace with Bitbucket or GitHub", - "link": "https://blog.kie.org/2023/02/synchronize-your-kie-sandbox-workspace-with-bitbucket-or-github.html", + "title": "Configuring OpenId Authorization with Keycloak", + "link": "http://www.mastertheboss.com/keycloak/configuring-openid-authorization-with-keycloak/", "author": [ { - "name": "Jan Stastny", + "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-08T18:31:37.000Z", - "feed_title": "KIE Community", - "content": "1 INTRODUCTION  KIE Sandbox now brings the possibility to synchronize your changes not only with GitHub, but also Bitbucket.  > Bitbucket has several variants of their offering. Only support for Bitbucket > Cloud is available, namely bitbucket.org – a publicly hosted instance. Other > Bitbucket variants, being it Bitbucket Server or Bitbucket Data Center are not > supported, due to significant differences in provided APIs. Support for enterprise instances of Bitbucket Cloud will arrive in future.  2 CONNECTING TO AN ACCOUNT  AUTHORIZATION  For KIE Sandbox to be able to communicate with a given git instance, it needs to be provided a way to authenticate with. In the case of Bitbucket, the supported way is to use a so-called App password, in the case of GitHub, its name is Personal Access Token. They are long-lasting OAuth2 tokens with selected scopes that enable the actions in KIE Sandbox when working with our workspace.  List of related OAuth2 scopes:  -------------------------------------------------------------------------------- Bitbucket scopeDescriptionFor the initial authentication and user details retrieval (e.g., uuid of the user)  Read access to repositories of given user.Write access to all the repositories the authorizing user has access to. To create repositories Read access to all the snippets the authorizing user has access to.  Write access to all the snippets the authorizing user can edit Required Bitbucket OAuth2 scopes () -------------------------------------------------------------------------------- GitHub scopeDescription(no-scope)Implicit read access to public repositories and Gists. repoFull access to public and private repositories.gistGrants write access to Gists.  Required GitHub OAuth2 scopes () -------------------------------------------------------------------------------- KIE SANDBOX CONNECTED ACCOUNTS  Once we have a token, we need to configure the KIE Sandbox to make it available in there.   You can configure the authentication in advance by visiting the Connected Accounts section in the top panel. KIE Sandbox serves as a modal where the user needs to specify required values. In the case of Bitbucket, it is a username and the app password OAuth2 token. This is a difference compared to GitHub, where the token itself carries the user information and is sufficient for authentication on its own.  After the addition, you should see the account information together with usage statistics in your current instance of KIE Sandbox.   Once you connect the account, it’s available in your workspaces through the Authentication source section in the Share dropdown. Where you can also connect to another account by using the respective link from the dropdown, which serves as a shortcut to the Connected Accounts section mentioned earlier.  3 COLLABORATION IS KEY (KIE)  It’s always better to share. And with KIE Sandbox sharing is as easy as a single click to synchronize your changes with the remote location.  > KIE Sandbox does not aspire at replacing the interaction with the existing git > tools or git vendor UI, rather it simplifies most common operations vital for > the smooth experience when modelling your assets.  COLLABORATE OVER AN EXISTING REPOSITORY  The ability to import projects and later synchronize your local changes back into the original location makes KIE Sandbox collaborative experience a breeze.  IMPORT FROM URL  It all starts with a URL. You can import existing projects on KIE Sandbox main screen by pasting their respective URL into the From URL widget. Once it’s confirmed as supported, the widget itself queries git-related information to be used and presents it to the user allowing to override the identified defaults, e.g., to change a branch to be checked out (click Change… if you want to do so).  After the project is imported, you’re taken into its workspace which is readily configured with the respective Authentication source, so you’re ready to Push or Pull without any further action.  SUPPORTED IMPORT URL OPTIONS  HostnameURL Contextbitbucket.org /:workspace/:repo   /:workspace/:repo/src/:tree   /:workspace/:repo/src/:tree/:path  /:workspace/workspace/snippets/:snippet_id/:snippet_name  /:workspace/workspace/snippets/:snippet_id/:snippet_name#file-:path  /snippets/:workspace/:snippet_id/:snippet_name.git github.com /:org/:repo  /:org/:repo/tree/:tree  /:org/:repo/tree/:tree/:path* raw.githubusercontent.com/:org/:repo/:tree/:path* gist.github.com or gist.githubusercontent.com /:user/:gistId/  /:user/:gistId/raw/:fileId/:fileName  /:gistId  SHARING LOCAL PROJECTS WITH THE WORLD  Having created a complex project including several models, now you wonder how to get those to your colleagues? No need to download and send by email, just create a brand-new git repository based on your workspace contents. By picking a different Authentication source, you can select between all your connected git vendor accounts.  PICK AN AUTHENTICATION SOURCE  The first step is to decide which Authentication source we’d like to use to share our workspace. Choice defines the actions allowed with the workspace further on.  Editor toolbar reflects this decision in its Share dropdown, where only actions applicable to your setup are available upon Authentication source selection.    Once you pick any of these options, your project is transformed into git-based workspace. Though there are some differences in how you can synchronize the contents, see them described below.  CREATE A GIT REPOSITORY  Create a repository by clicking on the respective button provided in the Share dropdown. Afterwards a modal appears where you can specify an intended location, repository name, and its visibility.  Location must be specified using a dynamically populated select field. The list of options is possible to be reload using the sync icon to its right.  In the case of GitHub, we can choose between creating the repository under our user location and creating in a GitHub organization that we are members of.   In the case of Bitbucket we select from either personal or shared workspaces. The repository name text field is populated with the value matching your workspace name, so if you’ve configured your workspace thoroughly, you should be all set. Though you are free to specify the name that suits your needs, with just a few limitations on the characters allowed guarded by validation. The Public and Private checkboxes define the repository visibility.  After the repository is created, you’re taken back into workspace, which is readily configured with the respective Authentication source, so you’re ready to Push or Pull without any further action.  CREATE A BITBUCKET SNIPPET OR GITHUB GIST  Do you hesitate to create a separate repository for something you were just doodling? Then share it just as a Bitbucket Snippet or GitHub Gist. Both these options provide you with the ability to push or pull changes, share by URL, etc.  After clicking the respective button, a new Modal dialog is displayed. We must specify  * a location under which the item will be created.  * In the case of GitHub Gist, the only option is the user account itself, it is not supported by GitHub to create a Gist in an organization. The select field is thus displayed as disabled.  * On the other hand, Bitbucket allows us to create Snippets generally in any workspace, as long as we have necessary permissions.  * Visibility of the item being created.  After confirming the dialog, the modal stays displayed until the operation is completed. After that notification alert with the newly created item is displayed. When the creation succeeds, you’re taken back into the workspace, which is now configured accordingly.  In comparison to the regular git repository Sync options above, you now have just a single operation listed there – update.  This action allows you to promote the changes back into the original location.  There is no choice to pull, i.e., update your workspace based on changes done either in Gist or Snippet. If you need a more flexible approach, let’s head for the following section.  TURN GIST OR SNIPPET INTO A REGULAR GIT REPOSITORY  Working with a Snippet or Gist and you’re finally satisfied with the models? Or do you want a more flexible workflow requiring updating your workspace with remote changes?  Turn your project into a regular git repository – the Share dropdown option is still there for Gist or Snippet–based workspaces. You’re not even limited to the same Authentication source here, e.g., for a GitHub Gist based workspace, you can easily share it as a Bitbucket repository afterwards, given that you have both accounts connected.  SUMMARY  * ✅We’ve seen how users can integrate KIE Sandbox into their git-based workflow.  * 💥KIE Sandbox now supports GitHub and Bitbucket Cloud.  * 💥Toolbar buttons now reflect the currently selected Authentication provider.  * 💥GitHub Repositories can also be created in GitHub organizations.  The post appeared first on ." + "date": "2023-03-01T16:50:13.000Z", + "feed_title": "Mastertheboss", + "content": "OpenID Connect is a widely-used authentication protocol that allows users to authenticate themselves to a relying party (RP) website or application using their existing credentials from an identity provider (IDP). While OpenID Connect is primarily an authentication protocol, it also provides some support for authorization through the use of client resources and policies. In this ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/11.json b/src/content/posts-aggregator/11.json index ecffe4fe..de11a69b 100644 --- a/src/content/posts-aggregator/11.json +++ b/src/content/posts-aggregator/11.json @@ -1,13 +1,14 @@ { - "title": "CloudEvents labeling and classification with Drools", - "link": "https://blog.kie.org/2023/02/cloudevents-labeling-and-classification-with-drools.html", + "title": "Keycloak 21.0.1 released", + "link": "https://www.keycloak.org/2023/03/keycloak-2101-released", "author": [ { - "name": "Matteo Mortari", + "name": null, "avatar": null } ], - "date": "2023-02-08T15:40:00.000Z", - "feed_title": "KIE Community", - "content": "This blog post is a quick update on a demo in labeling CNCF’s CloudEvents. INTRODUCTION Categorizing events is a general, common use-case; in the context of this post, we will delve into labeling CNCF’s CloudEvents for Intelligent Response Management (IRM) which can find application in several ways. One way is to categorize and prioritize different types of events based on their urgency or importance; for example: a SRE team might label an event as \"critical\" if it involves a major service outage, or \"low priority\" if it is a minor issue of a sub-system that can be resolved at a later time. This allows the team to quickly respond to the most pressing issues and allocate resources accordingly. Additionally, labeling events can also be used to track and analyze patterns in a system (or cluster) behaviors, which can help to identify potential problems before they occur and improve the overall reliability of the system by implementing corrective actions preventively. This demo make use of several technologies: * and YaRD for the rule definition and evaluation * for cloud native based decisioning * for cloud native Java development on top of Kubernetes * –this is the format of the event data that we want to process * Kafka as an event broker * PostgreSQL as our data store; we’re using specifically PostgreSQL for very interesting query capabilities that this RDBMS can offer * to define our custom types on top of PostgreSQL * extension * for the web-based GUI ARCHITECTURE The following is a high level diagram of the overall architecture for this demo: On the left hand side, the incoming CloudEvents instance that we want to process by labeling, is received by the endpoint which represents one of the possible inputs for this application. The CloudEvents instance is then immediately placed on a kafka topic, which is used to better isolate the ingress portion of this application from the rest of the processing pipeline. The processing pipeline starts with a labeling processor: this is the component responsible for applying the rules to enrich the CloudEvents instance with the required and applicable labels. As a result, the received message is now enriched with labeling and it gets persisted inside the data store. PostgreSQL is used specifically here as it provides hierarchical labels via ltree data type and related query capabilities, which are very useful in categorization applications such as this one. These advanced query capabilities are also foundational to potentially re-process the same CloudEvents instance, after some further augmentation or additional manual labeling. In the context of this article, the web-based GUI is provisional and will be used only as a practical demonstrator for the rich query capabilities. WALKTHROUGH A CloudEvents instance is submitted to this application, for example: { \"specversion\": \"1.0\", \"id\": \"matteo-8eb9-43b2-9313-22133f2c747a\", \"source\": \"example\", \"type\": \"demo20220715contextlabel.demotype\", \"data\": { \"host\": \"basedidati.milano.local\", \"diskPerc\": 70, \"memPerc\": 50, \"cpuPerc\": 20 } } The data context of the CloudEvents instance pertains to some host which came under supervision due to resource load. We now want to classify this context/case, using some labels. We may have more than one label. Each label is hierarchical (root.branch1.branch2.leaf). We want to classify the hostname based on its relevance to the department, unit, person or team responsible for it. To do so, a simple decision table provides an easy solution. For example, we can classify the hostname based on geographical location or determine the type of server based on the hostname. Ultimately, we might want to setup a labeling rule for who’s on call, something like the following decision table using : type: DecisionTable inputs: ['.location', '.type'] rules: - when: ['startswith(\"location.emea\")', '. == \"type.db\"'] then: '\"oncall.EMEA.dbadm\"' - when: ['startswith(\"location.emea\") | not', '. == \"type.db\"'] then: '\"oncall.CORP.dbadm\"' - when: ['true', '. == \"type.nas\"'] then: '\"oncall.CORP.it\"' For example, a CloudEvents context may be labeled as follows: * type.db * location.emea.italy.milan * oncall.EMEA.dbadm For the PostgreSQL DDL we currently have: Table \"public.cecase\" Column | Type | Collation | Nullable | Default ---------+------------------------+-----------+----------+--------- id | bigint | | not null | ceuuid | character varying(255) | | | context | jsonb | | | mytag | ltree[] | | | Indexes: \"cecase_pkey\" PRIMARY KEY, btree (id) \"mytag_gist_idx\" gist (mytag) \"mytag_idx\" btree (mytag) Please notice we’re taking advantage here of PostgreSQL’s jsonb for storing the original CloudEvents context, and ltree[] data type for searching ad-hoc with indexing the hierarchical labels. The latter is extremely helpful also to setup queries making use of and ~ operators for PostgreSQL which performs on the ltree data type, showcased below. As the data flows into the application, we can use the provisional web-based GUI which provide a convenient way to consume the backend REST API(s) developed on Quarkus: In the screenshot above, you can access all the records from the table, where the labels have been applied by the rule definition. We can browse by having at least one label having the specified parent, with a query like: SELECT * FROM cecase WHERE mytag <@ 'oncall.CORP' For example, if we want all the records having at least a label for the oncall.CORP rooting: We can browse by having at least one label having the specified ltree, with a query like” SELECT * FROM cecase WHERE mytag ~ *.emea.* For example, if we want all the records having at least a label for the .emea. (a branch named emea in any point in the hierarchical label): Don’t forget to check out the video linked above, as it demonstrates the demo working live as the data is being sent to the application! If you want to checkout the source, here is the code repo:   These advanced query capabilities offered by PostgreSQL can be used as a foundation to identify events due to reprocessing, manual inspection, triggering a workflow, etc. …but that is maybe subject for a second iteration on this demo… CONCLUSIONS This demo showcases the power of combining declarative logic, persistence and other technologies to process and label CloudEvents effectively! We defined our logic using a combination of expression and rules in the form of decision tables, combined with the use of PostgreSQL as a data store thanks to its advanced query capabilities, allowing for a more efficient and effective handling of the events. We hope you enjoyed our demo and look forward to hearing your feedback! The post appeared first on ." + "date": "2023-03-01T00:00:00.000Z", + "feed_title": "Keycloak Blog", + "feed_avatar": "https://www.gravatar.com/avatar/87fe00619f08c241da8dfb23d907ffa2?s=50", + "content": "To download the release go to . MIGRATION FROM 20.0 Before you upgrade remember to backup your database. If you are not on the previous release refer to for a complete list of migration changes. ALL RESOLVED ISSUES BUGS * Duplicated set-cookie headers sent causing issues with proxies keycloak authentication * MigrateT021_0_0 fails with NPE if adminTheme is not configured explictly keycloak core * When upgrading from v20.0.2 to v21.0.0 I get a NPE on Theme keycloak core UPGRADING Before you upgrade remember to backup your database and check the for anything that may have changed." } \ No newline at end of file diff --git a/src/content/posts-aggregator/12.json b/src/content/posts-aggregator/12.json index da3c95e9..1d28dec0 100644 --- a/src/content/posts-aggregator/12.json +++ b/src/content/posts-aggregator/12.json @@ -1,14 +1,13 @@ { - "title": "How does Knative project compare to Dapr?", - "link": "http://www.ofbizian.com/2023/02/how-does-knative-project-compare-to-dapr.html", + "title": "How to solve javax.net.ssl.SSLHandshakeException", + "link": "http://www.mastertheboss.com/java/how-to-solve-javax-net-ssl-sslhandshakeexception/", "author": [ { - "name": "Unknown", + "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-08T10:30:00.003Z", - "feed_title": "OFBizian", - "feed_avatar": "https://www.gravatar.com/avatar/279246bd111a7c211134179eddb94afa?s=50", - "content": "HOW DOES KNATIVE PROJECT COMPARE TO DAPR? Both and projects help create and run cloud-native applications on Kubernetes, but differ in important aspects. I thought I'd quickly share where these projects overlap and complement each other from a user point of view. If you prefer, you can read this post as a twitter too. Dapr vs Knative TLDR: Knative extends Kubernetes with serverless containers (scaling to and from 0) and helps you connect applications declaratively. Dapr helps developers implement reliable connected distributed applications quickly.  COMMUNITY Knative originated from Google, whereas Dapr from Microsoft. Today both projects are incubating at CNCF. Both projects have growing communities and are within top 20 active CNCF projects (Dapr #10 and Knative #17) Community statistics See the full CNCF project statistics . PRIMARY FOCUS AREA ➤Knative extends Kubernetes with serverless containers by taking care of runtine networking (sync/async), autoscaling (to/from zero), and app revision tracking. ➤Dapr helps developers create reliable connected distributed applications quickly. It doesn’t manage the lifecycle of the application, instead it runs next to the applications. TARGET USER ➤Knative serving can be used by Ops to auto-scale and release apps (with traffic splitting). Knative eventing and functions can be used by devs to build, deploy apps, and connect external systems and event-driven containers.  ➤Dapr is toolkit designed primarily for developers. Developers use APIs & SDKs to interact with Dapr and offload responsibilities such as: pub/sub, state access, stateful service invocation, resiliency, etc. There are design time and runtime benefits for architects and operations teams respectively as described . SUPPORTED PLATFORMS ➤Knative runs only on top of Kubernetes and a network layer such as Kourier, Istio, Contour. ➤Dapr can run on Kubernetes, as well as on-premises and edge devices (such as the ). For local dev, Knative requires Kubernetes, whereas Dapr can also run on Docker, or as a single binary only. DEPLOYMENT MODEL Both projects have operator, helm chats, CLI that help with installation and operating the control planes on Kubernetes.  ➤On the data plane side, Dapr is a sidecar that gets injected into the application pod. The application interacts with Dapr over well-defined APIs... ➤Knative dictates how the application is defined and run on Kubernetes by creating deployments, pods, configmaps, and networking configurations. It injects a transparent sidecar into every pod to measure network activity. And has an activator to hold off requests while scaling from zero. DEVELOPER EXPERIENCE ➤Knative uses Kubernetes CRDs for defining an app (called Knative Service) composed of container, configuration, revision. It also offers CRDs that can define how events (CloudEvents) flow between these services, subscribe to a broker. And functions-centric CLI. ➤Dapr offers HTTP and gRPC APIs for Service invocation, Pub/Sub, State, Workflows, Bindings, Configuration, Secrets, Distributed lock, called building blocks. Devs use an HTTP/gRPC client, or SDKs for 8+ languages to interact with the above APIs. OPERATIONAL EXPERIENCE ➤Knative serving helps Ops with releasing, auto-scaling, configuring services. Knative eventing with abstracting the broker.  ➤Dapr helps Ops with monitoring, securing, and increasing resiliency of services, as well as cloud infrastructure abstraction. TOP FEATURES ➤Knative Scale to 0 Autoscaling Traffic splitting App definition Pub/sub Connectors Function CLI ➤Dapr Pub/sub Service-to-service interaction with resiliency, key/value access, Actors, Connectors, Security (mTLS, Auth), Config/Secrets, Workflows, Distributed Lock APIs. FEATURE OVERLAP The primary overlap is around pub/sub capabilities. Both projects offer async interactions between applications by abstracting the broker & using CloudEvents format. Both projects have connectors and ability to subscribe apps to the broker.  ➤Knative defines these w/ CRDs & over HTTP.  ➤Dapr supports HTTP/gRPC, using CRDs and code. SWEET SPOT ➤Knative: autoscaling containers (to and from zero). ➤Dapr: event-driven and stateful service interactions. Upcoming hot feature:  ➤Knative: function development.  ➤Dapr: workflows based orchestration. SUMMARY Those are the key differences between Dapr and Knative I'm aware of.  If you know other differences, share those on the twitter . We are actively working on both projects and exploring how they complement each other and integrate with the greater CNCF ." + "date": "2023-02-26T14:56:42.000Z", + "feed_title": "Mastertheboss", + "content": "If you’re encountering the “handshake_failure through SSLHandshakeException” error, it means there is an issue with the SSL/TLS handshake between the client and server. This can be caused by a variety of reasons such as outdated SSL/TLS protocol version, missing SSL/TLS certificates, or incorrect SSL/TLS configurations. To connect securely to a server, you first need to ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/13.json b/src/content/posts-aggregator/13.json index 92d193f1..9aac7fae 100644 --- a/src/content/posts-aggregator/13.json +++ b/src/content/posts-aggregator/13.json @@ -1,13 +1,13 @@ { - "title": "How to print logs in JSON format in WildFly", - "link": "http://www.mastertheboss.com/jbossas/jboss-log/how-to-print-logs-in-json-format-in-wildfly/", + "title": "8 Things you can do with JBang but you can’t with Shell", + "link": "http://www.mastertheboss.com/java/jbang-vs-jshell/", "author": [ { "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-06T09:32:44.000Z", + "date": "2023-02-26T09:12:35.000Z", "feed_title": "Mastertheboss", - "content": "This article discusses the configuration you can apply in WildFly to enable logging in JSON format. We will learn how to do that natively in WildFly or using a Log4j custom configuration. Strategies for logging in JSON There are several use cases in which logging in JSON format can be useful. For example: Use cases ... The post appeared first on ." + "content": "Using Java as scripting language has become a popular option in the last few years thanks to the JShell tool. In this article we will learn how the JBang scripting tool can take your Java scripting power at another level. Automatic fetching of dependencies The most impressing feature of JBang is dependency management. You can ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/14.json b/src/content/posts-aggregator/14.json index 70a6a090..a0c013d7 100644 --- a/src/content/posts-aggregator/14.json +++ b/src/content/posts-aggregator/14.json @@ -1,13 +1,13 @@ { - "title": "How to compress logs in WildFly", - "link": "http://www.mastertheboss.com/jbossas/jboss-log/how-to-compress-logs-in-wildfly/", + "title": "JBang: Create Java scripts like a pro", + "link": "http://www.mastertheboss.com/java/java-scripting-with-jbang/", "author": [ { "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-06T09:12:23.000Z", + "date": "2023-02-26T09:00:09.000Z", "feed_title": "Mastertheboss", - "content": "This article shows how to enable logs compression in WildFly by setting the appropriate suffix in your Periodic Rotating File Handler. In the second part of this tutorial we will learn how to compress logs using Log4j instead. Compressing Logs natively with WildFly Logs are an essential part of any software application, as they help ... The post appeared first on ." + "content": "JBang is a scripting tool which allows to run Java application with minimal set up, without the need of having a project configuration. In this tutorial we will learn how to use it to run a simple Java application and then we will be looking at a more complex example, which starts a Quarkus application. ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/15.json b/src/content/posts-aggregator/15.json index 060c709d..97b929b0 100644 --- a/src/content/posts-aggregator/15.json +++ b/src/content/posts-aggregator/15.json @@ -1,13 +1,13 @@ { - "title": "How to set the SameSite attribute in Java Web applications", - "link": "http://www.mastertheboss.com/web/jboss-web-server/how-to-set-the-samesite-attribute-in-java-web-applications/", + "title": "Quarkus Reactive REST made easy", + "link": "http://www.mastertheboss.com/soa-cloud/quarkus/reactive-rest-with-quarkus-made-easy/", "author": [ { "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-06T07:43:46.000Z", + "date": "2023-02-25T10:10:09.000Z", "feed_title": "Mastertheboss", - "content": "This short article describes how you can set the SameSite property in HTTP Cookies for Web applications, with special focus on WildFly‘s Web server, which is Undertow. What is SameSite ? SameSite is a property that you can set in HTTP cookies to avoid false cross-site request (CSRF) attacks in web applications: When SameSite is ... The post appeared first on ." + "content": "Quarkus JAX RS implementation has improved a lot since its first release. Within this tutorial we will show some new features which are available in Quarkus starting from the new reactive REST paradigm. Quarkus uses SmallRye Mutiny for as main Reactive library. In our first tutorial, we have discussed how to use Mutiny to deliver ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/16.json b/src/content/posts-aggregator/16.json index cc8a774b..7d32d4eb 100644 --- a/src/content/posts-aggregator/16.json +++ b/src/content/posts-aggregator/16.json @@ -1,13 +1,13 @@ { - "title": "Keycloak tutorial for beginners", - "link": "http://www.mastertheboss.com/keycloak/introduction-to-keycloak/", + "title": "Kogito 1.34.0 released!", + "link": "https://blog.kie.org/2023/02/kogito-1-34-0-released.html", "author": [ { - "name": "F.Marchioni", + "name": "Cristiano Nicolai", "avatar": null } ], - "date": "2023-02-02T16:15:12.000Z", - "feed_title": "Mastertheboss", - "content": "Keycloak is an Identity and Access Management Server for Modern Applications and Services. In this Keycloak tutorial we will learn how to set up Keycloak and configure it to authenticate/authorize Enterprise applications. Keycloak update (2023) Keycloak is available in two distributions: Legacy distribution (which uses WildFly as runtime engine). Quarkus distribution (which uses Quarkus as ... The post appeared first on ." + "date": "2023-02-23T14:28:34.000Z", + "feed_title": "KIE Community", + "content": "We are glad to announce that the Kogito 1.34.0 release is now available! This goes hand in hand with , release. From a feature point of view, we have included a series of new features and bug fixes, including: * [] Let Kogito Serverless Workflow Image Builder default to quarkus dev mode * [KOGITO-8489] Async API now support using the same channel for publishing/subscribing * [KOGITO-7982] Terminate=true is no longer needed in the end state for a workflow containing event states. * [KOGITO-8249] Added workflow timeout support * [KOGITO-8499] End state can now publish several events rather than one. * [KOGITO-8330] ForEach state properly supports subprocess actions, passing the iteration param to them.  * [] Enhance dataindex for custom support to Primitive Datatypes Long/Float/Double * [] Job Service New Public API including runtime addons * [] Camel Routes integration in Serverless Workflow. To know more, see this .  KNOWN ISSUES * Kogito Operator does not handle new Keycloak Operator, see For more details head to the complete . All artifacts are available now: * Kogito runtime artifacts are available on Maven Central. * Kogito examples can be found . * Kogito images are available on . * Kogito operator is available in the in OpenShift and Kubernetes. * Kogito tooling 0.26.0 artifacts are available at the . A detailed changelog for 1.34.0 can be found in . New to Kogito? Check out our website . Click the \"Get Started\" button. The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/17.json b/src/content/posts-aggregator/17.json index 2d0d3dc5..8a95c104 100644 --- a/src/content/posts-aggregator/17.json +++ b/src/content/posts-aggregator/17.json @@ -1,13 +1,14 @@ { - "title": "How to use a Datasource in Quarkus", - "link": "http://www.mastertheboss.com/soa-cloud/quarkus/how-to-use-a-datasource-in-quarkus/", + "title": "Keycloak 21.0.0 released", + "link": "https://www.keycloak.org/2023/02/keycloak-2100-released", "author": [ { - "name": "F.Marchioni", + "name": null, "avatar": null } ], - "date": "2023-02-02T10:13:18.000Z", - "feed_title": "Mastertheboss", - "content": "Agroal is a connection pool implementation that can be used with Quarkus to manage database connections. In this tutorial, we will go over how to use the DataSource in a Quarkus application. First, you’ll need to add the Agroal extension to your Quarkus application. You can do this by adding the following dependency to your ... The post appeared first on ." + "date": "2023-02-23T00:00:00.000Z", + "feed_title": "Keycloak Blog", + "feed_avatar": "https://www.gravatar.com/avatar/87fe00619f08c241da8dfb23d907ffa2?s=50", + "content": "To download the release go to . MIGRATION FROM 20.0 Before you upgrade remember to backup your database. If you are not on the previous release refer to for a complete list of migration changes. ALL RESOLVED ISSUES BUGS * Duplicated set-cookie headers sent causing issues with proxies keycloak authentication * MigrateT021_0_0 fails with NPE if adminTheme is not configured explictly keycloak core * When upgrading from v20.0.2 to v21.0.0 I get a NPE on Theme keycloak core UPGRADING Before you upgrade remember to backup your database and check the for anything that may have changed." } \ No newline at end of file diff --git a/src/content/posts-aggregator/18.json b/src/content/posts-aggregator/18.json index 65f2362f..fd4412f7 100644 --- a/src/content/posts-aggregator/18.json +++ b/src/content/posts-aggregator/18.json @@ -1,13 +1,13 @@ { - "title": "New Feature: Dashbuilder editor with IntelliSense capabilities", - "link": "https://blog.kie.org/2023/02/new-feature-dashbuilder-editor-with-intellisense-capabilities.html", + "title": "Kubernetes-Native Development with Quarkus and Eclipse JKube", + "link": "https://quarkus.io/blog/kubernetes-native-development-with-quarkus-and-eclipse-jkube/", "author": [ { - "name": "Ajay Jaganathan", + "name": "Eric Deandrea", "avatar": null } ], - "date": "2023-02-01T14:02:58.000Z", - "feed_title": "KIE Community", - "content": "We are pleased to announce that the dashbuilder editor now ships with auto-complete capabilities! This enhances the user experience by providing suggestions and helps to reduce the errors made while authoring the dashbuilder specification.  Let’s go through the new features in the below section: AUTO-COMPLETE SUGGESTIONS: While typing out a particular word or pressing ctrl+space, the editor provides the list of possible values for that particular context. The user can select the appropriate one from the list of possible values and automatically complete it. If any required field is missing, it also prompts the user with error messages. Below is a short video of the auto-complete capability in action. Autocomplete while authoring CREATING A SAMPLE DASHBUILDER SPECIFICATION(CODE LENS): When starting with an empty file, the editor provides a code lens to auto-fill the file with a sample dashbuilder specification. This gives the user some boilerplate code to start authoring the specification. Below is a sample video of the code lens feature in action. Codelens in action CONCLUSION These features are implemented to reduce the complexity of authoring a dashboard and the errors made while doing it. These features are available in all of our extensions! Stay tuned to learn more about the new features planned for . The post appeared first on ." + "date": "2023-02-23T00:00:00.000Z", + "feed_title": "Quarkus", + "content": "Table of Contents Introduction What is Eclipse JKube Remote Development? Eclipse JKube Remote Development and Quarkus Wrap-Up This article explains what Eclipse JKube Remote Development is and how can it help developers build Kubernetes-native applications with Quarkus. Introduction As mentioned in my previous article, Kubernetes-native inner loop development with Quarkus,..." } \ No newline at end of file diff --git a/src/content/posts-aggregator/19.json b/src/content/posts-aggregator/19.json index 20e4dd3a..a898dee3 100644 --- a/src/content/posts-aggregator/19.json +++ b/src/content/posts-aggregator/19.json @@ -1,13 +1,13 @@ { - "title": "Quarkus 2.16.1.Final released - Maintenance release", - "link": "https://quarkus.io/blog/quarkus-2-16-1-final-released/", + "title": "Using MicroProfile OpenAPI with RESTEasy", + "link": "https://resteasy.dev/2023/02/20/resteasy-microprofile-openapi/", "author": [ { - "name": "Guillaume Smet", + "name": "阿男", "avatar": null } ], - "date": "2023-02-01T00:00:00.000Z", - "feed_title": "Quarkus", - "content": "We released Quarkus 2.16.1.Final, our first maintenance release for the 2.16 release train. As usual, it contains bugfixes and documentation improvements. It should be a safe upgrade for anyone already using 2.16. For people using Micrometer, the format used to export metrics has changed in 2.16 (for the Prometheus format),..." + "date": "2023-02-23T00:00:00.000Z", + "feed_title": "WildFly", + "content": "" } \ No newline at end of file diff --git a/src/content/posts-aggregator/2.json b/src/content/posts-aggregator/2.json index d5f70346..aff63dd5 100644 --- a/src/content/posts-aggregator/2.json +++ b/src/content/posts-aggregator/2.json @@ -1,13 +1,13 @@ { - "title": "Apache Maven Faqs for Java Developers", - "link": "http://www.mastertheboss.com/jboss-frameworks/jboss-maven/apache-maven-faqs/", + "title": "Serverless Logic Web Tools support to OpenAPI and AsyncAPI specifications", + "link": "https://blog.kie.org/2023/03/serverless-logic-web-tools-support-to-openapi-and-asyncapi-specifications.html", "author": [ { - "name": "F.Marchioni", + "name": "Saravana Balaji", "avatar": null } ], - "date": "2023-02-15T07:13:02.000Z", - "feed_title": "Mastertheboss", - "content": "Welcome to our tutorial on Apache Maven FAQs! Apache Maven is a popular build automation tool used for Java projects. It helps developers manage project dependencies, build, test, and deploy projects. In this tutorial, we will cover some frequently asked questions about Maven and provide helpful answers and explanations. Overview of Apache Maven Apache Maven ... The post appeared first on ." + "date": "2023-03-08T12:47:26.000Z", + "feed_title": "KIE Community", + "content": "While editing Serverless Workflow files, you can register OpenAPI endpoints and AsyncAPI channels and pass them as functions. These functions will be available on the Serverless Workflow Editor’s Service Catalog Explorer. This article explains how one can link OpenAPI and AsyncAPI specifications and have their functions available through autocomplete. This feature is available both on Serverless Logic Web Tools and the VS Code extension. On Web tools, the API specifications can be linked via external registries. SERVICE CATALOG IN WEB TOOLS You can access the Serverless Logic Web Tools. Before creating a workflow, you must download and start the Extended Services. STARTING EXTENDED SERVICES Procedure: 1. In the Serverless Logic Web Tools web application, click on the cogwheel (⚙️) in the top-right corner and go to the “KIE Sandbox Extended Services” tab. 2. Select the “Click to setup” option. 3. Select your operating system from the dropdown. 4. Click on the “Download” option highlighted. 5. The kie_sandbox_extended_services__. file will be downloaded. Follow the instructions provided therein for moving the downloaded app. 6. Click the next button and follow the instructions provided there to open the application. Some of the features in Serverless Logic Web Tools require integration with Red Hat OpenShift Application and Data Services. Now, in the Red Hat OpenShift application and Data Services, let us create a service account. CREATING A SERVICE ACCOUNT You can create or use a service account from your Red Hat OpenShift Application and Data Services console and add the service account to the Serverless Logic Web Tools. Prerequisites * You have access to the Red Hat OpenShift Application and Data Services console. Procedure 1. To create a service account in Red Hat Openshift Application and Data Services, perform the following steps: 1. Go to. 2. Click “Create Service Account.” 3. Enter a service account name in the Short description field of the Create a Service Account window. 2. Click Create. 1. A modal displaying your client ID and client secret appears. 2. Copy and save the client ID and client secret. 3. Check that I have copied the client ID and secret checkboxes, and click Close. 3. If you already have a service account, find your client ID and client secret. 4. In the Serverless Logic Web Tools, click on the cogwheel (⚙️) in the top-right corner and go to the Service Account tab. 5. Enter your client ID and client secret in the respective fields. 6. Click Apply. 7. The content in the Service Account tab updates and displays Your Service Account information as a set message. CREATING A SERVICE REGISTRY You can create or use a Service Registry instance from your Red Hat OpenShift Application and Data Services console and add the Service Registry to Serverless Logic Web Tools. Prerequisites * You have access to the Red Hat OpenShift Application and Data Services console. * You have created a service account. Procedure: 1. To create a Service Registry instance in Red Hat Openshift Application and Data Services console, perform the following steps: 1. Go to the. 2. Click the “Create Service Registry Instance” button. 2. Enter a Service Registry instance name in the Create a Service Registry Instance window and click Create. 1. The list of Service Registry instances updates with your instance. 2. Find the Service Registry instance you created in the list and click on it. 3. Go to the Settings tab and click on “Grant access.” 4. In the drop-down, select the service account you created in the previous procedure. 5. Select a role for your service account. 6. Click Save. 7. Click on the menu in the top-right corner of the screen. 3. Click Connection. 1. A drawer opens, containing the required connection and authentication information. 2. Copy the value of the Core Registry API. 4. If you already have a Service Registry, find the value of the Core Registry API of your Service Registry. 5. In the Serverless Logic Web Tools web application, click on the cogwheel (⚙️) in the top-right corner and go to the Service Registry tab. 6. Enter a name for your registry. You can enter the same name that you used while creating the Service Registry instance. 7. Enter the value of the Core Registry API and click Apply. 8. The Service Registry tab’s content updates and displays your Service Registry information in a predefined message. UPLOAD THE API SPECIFICATION Once you have the Service account and Service registry created, you are set to upload the API specification file, which could be an OpenAPI or an AsyncAPI. Procedure: 1. On the OpenShift Application Console, go to the Service Registry instance that you created. 2. Click the Upload Artifact button, and a modal window opens. 3. On the modal, enter the group and artifacts ID, which are mandatory fields for usage in the Serverless Workflow Web Tools. 4. You can choose type from the dropdown menu, or you can leave the default option Auto-Detect alone. 5. In the artifact section, you can browse or drag and drop the API specification file, or you can also copy-paste the content directly into the text area. 6. Finally, click “upload.” ACCESSING THE SERVICE CATALOG ON WEB TOOLS When you have all the prerequisites ready, it is possible to create a workflow and try the Service Catalog feature. You can create a new workflow by clicking the JSON or YAML button on the home page. An untitled document will be opened. You can click on the Create a Serverless Workflow option to generate a basic template workflow. Just above the functions property, there will be an Add Function option. When you click that option, a side widget containing a list of function suggestions will appear. These functions are extracted from the API specification files that you uploaded on the Red Hat OpenShift Application Console. When you select a particular function, it will automatically generate auto-filled name, operation, and type properties. That is all for now, soon we will have an article demonstrating the Service Catalog in the Serverless Workflow Editor VS Code extension. Stay tuned! The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/20.json b/src/content/posts-aggregator/20.json index ec9da18d..20e77b62 100644 --- a/src/content/posts-aggregator/20.json +++ b/src/content/posts-aggregator/20.json @@ -1,13 +1,13 @@ { - "title": "Serverless Workflow Validations", - "link": "https://blog.kie.org/2023/01/serverless-workflow-validations.html", + "title": "How to use Mockito to supercharge your Java Testing", + "link": "http://www.mastertheboss.com/various-stuff/testing-java/how-to-use-mockito-to-supercharge-your-java-testing/", "author": [ { - "name": "Saravana Balaji", + "name": "F.Marchioni", "avatar": null } ], - "date": "2023-01-27T19:24:27.000Z", - "feed_title": "KIE Community", - "content": "Writing a Serverless Workflow that matches with the specification’s rules and schema can require some documentation reading, which demands a few hours. To facilitate that, we have implemented a validation mechanism on our Serverless Workflow Editor, that checks your JSON and YAML files against Serverless Workflow specifications schema and also provides some custom validations in addition to it, that will be detailed below. REQUIREMENTS * (1.66.0+) * (0.26.0) The contains a ready-to-use online version of the Serverless Workflow Editor, where this new feature can be tried by using one of the provided samples or creating a new workflow. SERVERLESS WORKFLOW LANGUAGE SERVICE AND VALIDATION The validation mechanism consists of a dedicated language service for Serverless Workflow, which uses existing JSON and YAML language services as a base and is customized on top of it with the Serverless Workflow specification validation. This feature is provided in both Serverless Logic Web Tools and the built-in editor in the . The validated rules include schema validation and some custom validations, which helps in validating extensive Serverless Workflow nodes like functions, states, events etc. The validation results are highlighted immediately in the editor with a proper message when you hover the error. They can also be seen at the problems section in VS Code or Web Tools. CREATE AND VALIDATE A SERVERLESS WORKFLOW FILE Let’s create a fresh Serverless Workflow from scratch and see how validation works. Create a new file with the \".sw.json” extension. After opening the file in the editor, it will contain an option “Create a Serverless Workflow” at the top. When clicked, it will create a Serverless Workflow specification template, which can also be achieved by using the keyboard shortcut Ctrl + Space. Your workflow can be built on top of this template. You can also check out some interesting Serverless Workflow examples from the repository. SCHEMA VALIDATION The schema validation in Serverless Workflow language service matches the workflow against the schema as per the specification v0.8 released by CNCF. This validation does some strict type checks on every property of the workflow. CUSTOM VALIDATION Serverless Workflow Editor offers some custom validations, which validates the values assigned to Serverless Workflow nodes like functions, states, events etc. This check also includes validating refs like eventRefs, functionRefs, subFlowRefs etc, which comes in handy in assigning the correct references to every property. Let us see how the editor implies custom validations with the example of functions node. VALIDATING FUNCTION NODE First let’s understand the FunctionRef definition a bit. FunctionRef definition can have two types, either string or object. If string, it defines the name of the referenced function from the functions array. \"functions\": [ { \"name\": \"myFunction\", \"operation\": \"localhost#operation\", \"type\": \"rest } ], \"states\": [ { \"name\": \"CheckInbox\", \"type\": \"operation\", \"actionMode\": \"sequential\", \"actions\": [ { \"functionRef\": \"myFunction\" } ], \"transition\": \"SendTextForHighPriority\" } ] Similarly, If you need to define parameters in your functionRef definition, you can define it with its object type which has the properties like refName, arguments, selectionSet, invoke. \"functions\": [ { \"name\": \"checkFundsAvailabe\", \"operation\": \"localhost#operation\", \"type\": \"rest } ], \"state\": [ { \"refName\": \"checkFundsAvailabe\", \"arguments\": { \"account\": { \"id\": \"${ .accountId }\" }, \"forAmount\": \"${ .payment.amount }\", \"insufficientMessage\": \"The requested amount is not available.\" } } ] The editor automatically does this extensive validation by the time you enter a value in its properties. It checks if the referenced function name is already part of the functions array and displays a warning if it is not present. VALIDATING OTHER PROMINENT NODES Similar to the functions node, the editor also validates workflow nodes like Auth, Retries, Subflows, Events, States and others. The type checks of these nodes are done by schema validation, while the references passed are validated by the custom validations implemented in addition to it. The detected errors are highlighted immediately in the editor on both Web Tools and the VS Code extension. That is all for now, the extension is already available at the . And stay tuned for our next releases! The post appeared first on ." + "date": "2023-02-22T18:45:13.000Z", + "feed_title": "Mastertheboss", + "content": "Mockito is a powerful and easy-to-use mocking framework for Java applications. With Mockito, you can easily create mock objects that simulate the behavior of real objects in your application, without actually invoking their methods. We will show at first how to plug Mockito in JUnit Tests. Then, we will integrate Mockito in Quarkus Tests. Mockito ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/3.json b/src/content/posts-aggregator/3.json index 89589b1d..bcd066cc 100644 --- a/src/content/posts-aggregator/3.json +++ b/src/content/posts-aggregator/3.json @@ -1,13 +1,13 @@ { - "title": "Kogito 1.33.0 released!", - "link": "https://blog.kie.org/2023/02/kogito-1-33-0-released.html", + "title": "Quarkus 3.0.0.Alpha5 released - now with Hibernate ORM 6, new Dev UI and more!", + "link": "https://quarkus.io/blog/quarkus-3-0-0-alpha5-released/", "author": [ { - "name": "Cristiano Nicolai", + "name": "Max Rydahl Andersen", "avatar": null } ], - "date": "2023-02-13T00:58:30.000Z", - "feed_title": "KIE Community", - "content": "We are glad to announce that the Kogito 1.33.0 release is now available! This goes hand in hand with , release. From a feature point of view, we have included a series of new features and bug fixes, including: * Quarkus 2.16 integration * Infinispan upgrade to version 14.0.4 * Keycloack upgrade to version 20.0.2 * New Data Index addons that allow running indexing capabilities as part of Kogito runtimes. For more details, visit the complete .  This includes the following new addons as Quarkus extensions: * kogito-addons-quarkus-data-index-infinispan * kogito-addons-quarkus-data-index-mongodb * kogito-addons-quarkus-data-index-inmemory * Kogito-addons-quarkus-data-index-postgresql * Integration with AsyncAPI quarkiverse extension * Flyway added to help migrate Data Index schema based on Oracle database with Kogito upgrade. * Serverless Workflow can now integrate with Camel Routes defined within the same Maven project. See this blog post for more information.  For more details head to the complete . All artifacts are available now: * Kogito runtime artifacts are available on Maven Central. * Kogito examples can be found . * Kogito images are available on . * Kogito operator is available in the in OpenShift and Kubernetes. * Kogito tooling 0.26.0 artifacts are available at the . A detailed changelog for 1.33.0 can be found in . New to Kogito? Check out our website . Click the \"Get Started\" button. The post appeared first on ." + "date": "2023-03-08T00:00:00.000Z", + "feed_title": "Quarkus", + "content": "We are in the process of getting Quarkus 3 ready - with the last alpha, we got our main branch to Jakarta EE 10 to let us getting more things integrated and tested faster. This time we move from Hibernate 5 to Hibernate 6 - which will cause breakages thus..." } \ No newline at end of file diff --git a/src/content/posts-aggregator/4.json b/src/content/posts-aggregator/4.json index 0bca0119..51633968 100644 --- a/src/content/posts-aggregator/4.json +++ b/src/content/posts-aggregator/4.json @@ -1,13 +1,13 @@ { - "title": "Quarkus Newsletter #29 - February", - "link": "https://quarkus.io/blog/quarkus-newsletter-29/", + "title": "Openshift Cheatsheet for DevOps", + "link": "http://www.mastertheboss.com/soa-cloud/openshift/openshift-cheatsheet/", "author": [ { - "name": "James Cobb", + "name": "F.Marchioni", "avatar": null } ], - "date": "2023-02-13T00:00:00.000Z", - "feed_title": "Quarkus", - "content": "Read the February newletter to get the latest articles, blogs and insights on Quarkus. Read \"Deploy serverless Java apps with Quarkus on Azure Functions\" to learn about Quarkus Funqy and its built-in support for the Azure Functions HTTP trigger for Java by Glenn Gailey, Christopher McClister, Daniel Oh, Carolyn McSharry,..." + "date": "2023-03-06T14:05:59.000Z", + "feed_title": "Mastertheboss", + "content": "In this article you will find a comprehensive Openshift Container Platform cheat sheet for System Administrators and Developers. Login and Configuration Firstly, let’s check the most common commands for Login and Configuration in OpenShift: #login with a user oc login https://192.168.99.100:8443 -u developer -p developer #login as system admin oc login -u system:admin #User Information ... The post appeared first on ." } \ No newline at end of file diff --git a/src/content/posts-aggregator/5.json b/src/content/posts-aggregator/5.json index db9dd033..aab57ebd 100644 --- a/src/content/posts-aggregator/5.json +++ b/src/content/posts-aggregator/5.json @@ -1,13 +1,13 @@ { - "title": "Serverless Workflow integration with Camel Routes", - "link": "https://blog.kie.org/2023/02/serverless-workflow-integration-camel-routes.html", + "title": "Quarkus 2.16.4.Final released - Maintenance release", + "link": "https://quarkus.io/blog/quarkus-2-16-4-final-released/", "author": [ { - "name": "Ricardo Zanini", + "name": "Guillaume Smet", "avatar": null } ], - "date": "2023-02-10T17:58:06.000Z", - "feed_title": "KIE Community", - "content": "A recent addition to the Kogito Serverless Workflow is the ability to call ! WHEN TO USE CAMEL ROUTES that provides to integrate with virtually any technology stack. Kogito Serverless Workflow offers a few ways to make calls to remote services that expose standard interfaces such as OpenAPI and AsyncAPI. Sometimes, you might need to make calls to legacy systems or specific services that require additional configuration, schema, or data structures so that the standard interfaces might not suffice. For example, you might need to call a from the workflow. Without additional Java implementation in your Kogito workflow application, you won’t be able to make requests to this SOAP service directly. What if you could explicitly declare in your workflow definition that your function is a call to a Camel route in your project context? HOW THE INTEGRATION WORKS Kogito Serverless Workflow has a new add-on capable of producing messages to a Camel Route within the same application instance. For example, you have a Camel route in your project that can interface with a SOAP WebService like this one: NumberToWords Then, from the workflow definition, you can declare a function that produces messages to this route: { \"functions\": [ { \"name\": \"callSoap\", \"type\": \"custom\", \"operation\": \"camel:direct:numberToWords\" } ] } Notice the new custom function with a new operation type. The operation is a URI scheme composed of the constant \"camel:\", the \"direct:\" endpoint, and its name. Kogito Serverless Workflow only supports producing messages to a endpoint at this time. To use this function in the State definition, you can refer to the function as you usually would: { \"states\": [ { \"name\": \"start\", \"type\": \"operation\", \"actions\": [ { \"functionRef\": { \"refName\": \"callSoap\", \"arguments\": { \"body\": \"${ .number }\", \"headers\": { \"header1\": \"value1\", \"header2\": \"value2\"} } } } ], \"end\": true } ]} The function arguments can have optional attributes, \"body\" and \"headers.\" These arguments will be constructed as part of the handled internally by the Kogito engine. The body can be any valid JSON object and the headers must be a key/value pair. Your route is responsible for properly handling the message. In the example above, the body is the number contained in the JSON payload. The route response must be a valid Java bean object that can be serialized to JSON or a primitive type. Note that a JSON string is a valid output. The data will be merged into the workflow context data in the response attribute, for example: { \"fruit\": \"orange\", \"response\": { \"number\": 10 } } , you will find more information about this scenario and the complete project example. FINAL THOUGHTS The Camel Kogito add-on complements our work of integrating with the. In the use case described in this post, the Camel route is tightly coupled to the workflow. If you need to reuse the route or have more complex interface interactions (such as a REST endpoint), you should use Camel-K and interact with the services via OpenAPI interfaces. Overall, this new feature introduced by Kogito Serverless Workflow can solve many use cases and enable integration with any service interface or data format supported by Camel. It’s a new way of interacting with services that don’t have standard interfaces or formats available, all within the same application. In a world where many companies are looking to modernize their architecture and lift to the cloud, we believe this new feature can help them through the journey. Leave a comment or open a thread on our if you have any questions. The post appeared first on ." + "date": "2023-03-06T00:00:00.000Z", + "feed_title": "Quarkus", + "content": "While we are working hard on finalizing our 3.0 release, we are still baking maintenance releases for 2.16, and, today, here comes Quarkus 2.16.4.Final, our fourth maintenance release for the 2.16 release train. As usual, it contains bugfixes and documentation improvements. It should be a safe upgrade for anyone already..." } \ No newline at end of file diff --git a/src/content/posts-aggregator/6.json b/src/content/posts-aggregator/6.json index 96c0fe2c..f31904ec 100644 --- a/src/content/posts-aggregator/6.json +++ b/src/content/posts-aggregator/6.json @@ -1,13 +1,14 @@ { - "title": "Express Hibernate Queries as Type-Safe Java Streams", - "link": "https://quarkus.io/blog/jpastreamer-extension/", + "title": "The Ultimate Beginners Guide to Rules and Processes", + "link": "http://www.schabell.org/2023/03/ultimate-beginners-guide-to-rules-and-processes.html", "author": [ { - "name": "Julia Gustafsson", + "name": "Eric D. Schabell", "avatar": null } ], - "date": "2023-02-10T00:00:00.000Z", - "feed_title": "Quarkus", - "content": "Writing Hibernate queries using the Criteria API can be anything but intuitive and comes at the expense of wordiness. In this article, you will learn how the JPAStreamer Quarkus extension facilitates type-safe Hibernate queries without unnecessary complexity. As much as the JPA Criteria builder is expressive, JPA queries are often..." + "date": "2023-03-03T06:00:00.005Z", + "feed_title": "Eric D. Schabell", + "feed_avatar": "https://www.gravatar.com/avatar/c4b562a3796ce4736927992c6daa4567?s=50", + "content": " There are so many ways and so much content out there to get you started with open source rules and process automation tooling by Red Hat, so where do you start?  The goal of this guide is to provide you with a learning path through this content as a way to get started from download, to installation, to quick starts, to hands-on workshops, and all the way to using this technology for your cloud-native development projects. You'll walk away from this guide with a learning path mapped out through content that's enjoyable to work with and can help you get started on your rules and process automation projects today. There is a way to start from the beginning and walk a path to rules and process automation proficiency, outlined as follows: 1. Choosing the rules or process automation path 2. Obtain the tooling (downloads) 3. Quick start projects (installs, cloud-native, demos) 4. Published content collections 5. Video collections 6. Free hands-on workshops To get started on your learning path just  below: " } \ No newline at end of file diff --git a/src/content/posts-aggregator/7.json b/src/content/posts-aggregator/7.json index f8575aa2..36d81592 100644 --- a/src/content/posts-aggregator/7.json +++ b/src/content/posts-aggregator/7.json @@ -1,13 +1,13 @@ { - "title": "DataCater uses Quarkus to make Data Streaming more accessible", - "link": "https://quarkus.io/blog/datacater-uses-quarkus-to-make-data-streaming-accessible/", + "title": "Eclipse Vert.x 4.4.0 released!", + "link": "https://vertx.io/blog/eclipse-vert-x-4-4-0", "author": [ { - "name": "Stefan Sprenger", + "name": "Julien Viet", "avatar": null } ], - "date": "2023-02-09T00:00:00.000Z", - "feed_title": "Quarkus", - "content": "This article gives a brief overview of the data streaming platform DataCater, discusses how we moved from Scala Play! and Kafka Streams to Quarkus, and presents why we think that Quarkus is an exceptional framework for developing cloud-native Java applications. What is DataCater? DataCater is a real-time, cloud-native data pipeline..." + "date": "2023-03-02T00:00:00.000Z", + "feed_title": "Vert.x", + "content": "Eclipse Vert.x version 4.4.0 has just been released. It comes with a set of new exciting features!" } \ No newline at end of file diff --git a/src/content/posts-aggregator/8.json b/src/content/posts-aggregator/8.json index a5aee6f4..5f204683 100644 --- a/src/content/posts-aggregator/8.json +++ b/src/content/posts-aggregator/8.json @@ -1,13 +1,13 @@ { - "title": "Eclipse Vert.x 4.3.8 released!", - "link": "https://vertx.io/blog/eclipse-vert-x-4-3-8", + "title": "What's new in Vert.x 4.4", + "link": "https://vertx.io/blog/whats-new-in-vert-x-4-4", "author": [ { "name": "Julien Viet", "avatar": null } ], - "date": "2023-02-09T00:00:00.000Z", + "date": "2023-03-02T00:00:00.000Z", "feed_title": "Vert.x", - "content": "Eclipse Vert.x version 4.3.8 has just been released. It fixes quite a few bugs that have been reported by the community and provides a couple of features." + "content": "See an overview of all new and exciting features in Vert.x 4.4, including a new OpenAPI implementation and io_uring support" } \ No newline at end of file diff --git a/src/content/posts-aggregator/9.json b/src/content/posts-aggregator/9.json index 6fe6e630..f14b850d 100644 --- a/src/content/posts-aggregator/9.json +++ b/src/content/posts-aggregator/9.json @@ -1,13 +1,13 @@ { - "title": "Quarkus 2.16.2.Final released - Maintenance release", - "link": "https://quarkus.io/blog/quarkus-2-16-2-final-released/", + "title": "Q1 2023 RESTEasy Quarterly Releases", + "link": "https://resteasy.github.io/2023/03/01/resteasy-releases/", "author": [ { - "name": "Guillaume Smet", + "name": null, "avatar": null } ], - "date": "2023-02-09T00:00:00.000Z", - "feed_title": "Quarkus", - "content": "Today, we released Quarkus 2.16.2.Final, our second maintenance release for the 2.16 release train. As usual, it contains bugfixes and documentation improvements. It should be a safe upgrade for anyone already using 2.16. If you are not already using 2.16, please refer to our migration guide. Full changelog You can..." + "date": "2023-03-01T18:11:11.000Z", + "feed_title": "Resteasy", + "content": "" } \ No newline at end of file