diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..306951e22 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +**/ci-install.sh diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 60002337d..a38dc2230 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,18 +10,28 @@ on: jobs: Unit-Tests: runs-on: ubuntu-20.04 + strategy: + max-parallel: 10 + matrix: + node-version: [ 18.x, 20.x ] + language-variant: [ 'csharp-httpclient', 'csharp-restsharp', 'curl', 'dart-dio', 'dart-http', 'golang', 'http', + 'java-okhttp', 'java-unirest', 'js-fetch', 'js-jquery', 'js-xhr', 'kotlin-okhttp', 'libcurl', + 'nodejs-axios', 'nodejs-native', 'nodejs-request', 'nodejs-unirest', 'objective-c', 'ocaml-cohttp', + 'php-curl', 'php-guzzle', 'php-httprequest2', 'php-pecl-http', 'powershell-restmethod', + 'python-http.client', 'python-requests', 'r-httr', 'r-rcurl', 'ruby', 'rust-reqwest', + 'shell-httpie', 'shell-wget', 'swift' ] steps: - name: Get Code uses: actions/checkout@v3 - - name: Setup Node JS + - name: Use Node JS ${{ matrix.node-version }} uses: actions/setup-node@v1 with: - node-version: '12.x' - - name: Install system dependencies - run: npm run cirequirements + node-version: ${{ matrix.node-version }} - name: Install package dependencies run: npm install + - name: Install system dependencies + run: npm run cirequirements ${{ matrix.language-variant }} - name: Install dependencies for individual codegens run: npm run deepinstall dev - name: Run tests - run: npm run test \ No newline at end of file + run: npm run test ${{ matrix.language-variant }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be0c3407..ee23edad7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [v2.0.0] - 2025-03-10 + +### Breaking Changes + +- Dropped support for node < v18. + ## [v1.14.2] - 2025-02-21 ### Fixed @@ -196,7 +202,9 @@ v1.0.0 (May 29, 2020) - Add ES6 syntax support for NodeJS Request, NodeJS Native and NodeJS Unirest - Fix snippet generation for powershell and jquery, where form data params had no type field -[Unreleased]: https://github.com/postmanlabs/postman-code-generators/compare/v1.14.2...HEAD +[Unreleased]: https://github.com/postmanlabs/postman-code-generators/compare/v2.0.0...HEAD + +[v2.0.0]: https://github.com/postmanlabs/postman-code-generators/compare/v1.14.2...v2.0.0 [v1.14.2]: https://github.com/postmanlabs/postman-code-generators/compare/v1.14.1...v1.14.2 diff --git a/codegens/csharp-httpclient/test/ci-install.sh b/codegens/csharp-httpclient/test/ci-install.sh new file mode 100755 index 000000000..0b4d8c311 --- /dev/null +++ b/codegens/csharp-httpclient/test/ci-install.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -ev; # stop on error + +sudo apt-get update +echo "Installing dependencies required for tests in codegens/csharp-httpclient" +# Install latest .net6.0 sdk +pushd ./codegens/csharp-httpclient &>/dev/null; + wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + sudo apt-get install apt-transport-https + sudo apt-get update + sudo apt-get install dotnet-sdk-6.0 + dotnet new console -o testProject -f net6.0 + # no extra packages needed +popd &>/dev/null; diff --git a/codegens/csharp-restsharp/test/ci-install.sh b/codegens/csharp-restsharp/test/ci-install.sh new file mode 100755 index 000000000..9bc29ba6d --- /dev/null +++ b/codegens/csharp-restsharp/test/ci-install.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -ev; # stop on error + +sudo apt-get update +echo "Installing dependencies required for tests in codegens/csharp-restsharp" +pushd ./codegens/csharp-restsharp &>/dev/null; + wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + sudo apt-get install apt-transport-https + sudo apt-get update + sudo apt-get install dotnet-sdk-6.0 + dotnet new console -o testProject -f net6.0 + pushd ./testProject &>/dev/null; + dotnet add package RestSharp --version 112.0.0 + popd &>/dev/null; +popd &>/dev/null; + +sudo apt-get install -y mono-complete diff --git a/codegens/curl/test/ci-install.sh b/codegens/curl/test/ci-install.sh new file mode 100755 index 000000000..881fb5bac --- /dev/null +++ b/codegens/curl/test/ci-install.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing curl" +sudo apt-get install -y curl diff --git a/codegens/dart-dio/test/ci-install.sh b/codegens/dart-dio/test/ci-install.sh new file mode 100755 index 000000000..f63b1d8e7 --- /dev/null +++ b/codegens/dart-dio/test/ci-install.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/dart-dio" +pushd ./codegens/dart-dio &>/dev/null; + wget -q https://storage.googleapis.com/dart-archive/channels/stable/release/3.0.4/linux_packages/dart_3.0.4-1_amd64.deb + sudo dpkg -i dart_3.0.4-1_amd64.deb + echo '''name: test +version: 1.0.0 +environment: + sdk: ^3.0.3 +dependencies: + dio: ^5.2.0 + ''' > pubspec.yaml + dart pub get +popd &>/dev/null; diff --git a/codegens/dart-http/test/ci-install.sh b/codegens/dart-http/test/ci-install.sh new file mode 100755 index 000000000..40f651496 --- /dev/null +++ b/codegens/dart-http/test/ci-install.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/dart-http" +pushd ./codegens/dart-http &>/dev/null; + wget -q https://storage.googleapis.com/dart-archive/channels/stable/release/3.0.4/linux_packages/dart_3.0.4-1_amd64.deb + sudo dpkg -i dart_3.0.4-1_amd64.deb + echo '''name: test +version: 1.0.0 +environment: + sdk: ^3.0.3 +dependencies: + http: ^1.0.0 +''' > pubspec.yaml + dart pub get +popd &>/dev/null; diff --git a/codegens/http/npm-shrinkwrap.json b/codegens/http/npm-shrinkwrap.json index 202549a1d..012296db7 100644 --- a/codegens/http/npm-shrinkwrap.json +++ b/codegens/http/npm-shrinkwrap.json @@ -42,23 +42,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz", + "integrity": "sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==", "requires": { "charset": "^1.0.0" } @@ -72,9 +64,9 @@ } }, "postman-collection": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", - "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-5.0.0.tgz", + "integrity": "sha512-1LK795Atv/ZX3jK1MCTx9KCBz0rAiIJJhTLqnJ4AsXLiLSqJuAH1w5jI1CQzHVLpPFg6E8Rl4tQIhF0eBgKNQQ==", "requires": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -82,19 +74,19 @@ "iconv-lite": "0.6.3", "liquid-json": "0.3.1", "lodash": "4.17.21", - "mime-format": "2.0.1", + "mime-format": "2.0.2", "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", + "postman-url-encoder": "3.0.6", + "semver": "7.7.1", "uuid": "8.3.2" } }, "postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.6.tgz", + "integrity": "sha512-uOlnZW+4Cmpbfbuq02hdj1hSpcIFmQxlAwsO6dflwUIVpt9+1duYVxXv3ikf+wHrAO8Wy98uVKnnuR8R0Qpdng==", "requires": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" } }, "punycode": { @@ -108,22 +100,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/codegens/http/package.json b/codegens/http/package.json index 4815f0b80..1264eb0af 100644 --- a/codegens/http/package.json +++ b/codegens/http/package.json @@ -21,7 +21,7 @@ "license": "Apache-2.0", "homepage": "https://github.com/postmanlabs/code-generators/tree/master/codegens/http", "dependencies": { - "postman-collection": "^4.4.0" + "postman-collection": "^5.0.0" }, "scripts": { "test": "node npm/test.js", diff --git a/codegens/java-okhttp/test/ci-install.sh b/codegens/java-okhttp/test/ci-install.sh new file mode 100755 index 000000000..f1f1c04c0 --- /dev/null +++ b/codegens/java-okhttp/test/ci-install.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/java-okhttp" +pushd ./codegens/java-okhttp &>/dev/null; + sudo add-apt-repository ppa:openjdk-r/ppa -y + sudo rm -rf /var/lib/apt/lists/* + sudo apt-get update + sudo apt-get install -y openjdk-8-jdk + unzip test/unit/fixtures/dependencies.zip +popd &>/dev/null; diff --git a/codegens/java-unirest/test/ci-install.sh b/codegens/java-unirest/test/ci-install.sh new file mode 100755 index 000000000..d89197a6b --- /dev/null +++ b/codegens/java-unirest/test/ci-install.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/java-unirest" +pushd ./codegens/java-unirest &>/dev/null; + unzip test/unit/fixtures/dependencies.zip +popd &>/dev/null; diff --git a/codegens/js-fetch/npm-shrinkwrap.json b/codegens/js-fetch/npm-shrinkwrap.json index 25b7bf96e..cf9011a0e 100644 --- a/codegens/js-fetch/npm-shrinkwrap.json +++ b/codegens/js-fetch/npm-shrinkwrap.json @@ -4,57 +4,58 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", "dev": true }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "fetch-blob": "^3.1.2" } }, - "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==", + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true }, - "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==", + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, "requires": { - "mime-db": "1.44.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node-fetch2": { + "version": "npm:node-fetch@2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -66,6 +67,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/codegens/js-fetch/package.json b/codegens/js-fetch/package.json index 43122bfe5..4d75fe9fe 100644 --- a/codegens/js-fetch/package.json +++ b/codegens/js-fetch/package.json @@ -28,8 +28,9 @@ "homepage": "https://github.com/postmanlabs/code-generators/tree/master/codegens/js-fetch", "dependencies": {}, "devDependencies": { - "form-data": "2.5.1", - "node-fetch": "2.6.7" + "formdata-node": "6.0.3", + "node-fetch2": "npm:node-fetch@2.7.0", + "node-fetch": "3.3.2" }, "engines": { "node": ">=8" diff --git a/codegens/js-fetch/test/newman/newman.test.js b/codegens/js-fetch/test/newman/newman.test.js index 3cc6da264..77c99ab38 100644 --- a/codegens/js-fetch/test/newman/newman.test.js +++ b/codegens/js-fetch/test/newman/newman.test.js @@ -1,9 +1,9 @@ var runNewmanTest = require('../../../../test/codegen/newman/newmanTestUtil').runNewmanTest, - convert = require('../../lib/index').convert; + convert = require('../../lib/index').convert, + NODE_VERSION = process.versions.node.split('.')[0]; describe('Convert for different types of request', function () { - var testSnippet = 'var fetch = require(\'node-fetch\'),\nFormData = require(\'form-data\'),\n', - testConfig = { + var testConfig = { compileScript: null, runScript: 'node snippet.js', fileName: 'snippet.js', @@ -11,9 +11,23 @@ describe('Convert for different types of request', function () { }, options = { multiLine: true - }; - testSnippet += 'Headers = require(\'node-fetch\').Headers,\n'; - testSnippet += 'URLSearchParams = require(\'url\').URLSearchParams;\n\n'; + }, + testSnippet; + + if (NODE_VERSION < 21) { + testSnippet = 'var fetch = require(\'node-fetch2\');\n'; + } + else { + testSnippet = 'var fetch = (...args) => import(\'node-fetch\').then(({default: fetch}) => fetch(...args));'; + } + + if (NODE_VERSION < 21) { + // Newer node versions ship with built-in FormData, Headers and URLSearchParams class + testSnippet += '\nvar FormData = require(\'formdata-node\').FormData,\n'; + testSnippet += 'Headers = require(\'node-fetch2\').Headers,\n'; + testSnippet += 'URLSearchParams = require(\'url\').URLSearchParams;\n\n'; + } + testConfig.headerSnippet = testSnippet; runNewmanTest(convert, options, testConfig); }); diff --git a/codegens/kotlin-okhttp/test/ci-install.sh b/codegens/kotlin-okhttp/test/ci-install.sh new file mode 100755 index 000000000..1a4cf8853 --- /dev/null +++ b/codegens/kotlin-okhttp/test/ci-install.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/kotlin-okhttp" +pushd ./codegens/kotlin-okhttp &>/dev/null; + sudo add-apt-repository ppa:openjdk-r/ppa -y + sudo rm -rf /var/lib/apt/lists/* + sudo apt-get update + sudo apt-get install -y openjdk-8-jdk + sudo snap install --classic kotlin + unzip test/unit/fixtures/dependencies.zip +popd &>/dev/null; diff --git a/codegens/libcurl/test/ci-install.sh b/codegens/libcurl/test/ci-install.sh new file mode 100755 index 000000000..de2331a32 --- /dev/null +++ b/codegens/libcurl/test/ci-install.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -ev; # stop on error + +sudo apt-get update + +echo "Installing dependencies required for tests in codegens/libcurl" +sudo apt-get install libcurl4-gnutls-dev diff --git a/codegens/nodejs-axios/package.json b/codegens/nodejs-axios/package.json index 068ec5c3d..25de0bed1 100644 --- a/codegens/nodejs-axios/package.json +++ b/codegens/nodejs-axios/package.json @@ -30,8 +30,8 @@ "lodash": "4.17.21" }, "devDependencies": { - "axios": "1.3.4", - "form-data": "3.0.0", + "axios": "1.7.9", + "form-data": "4.0.2", "qs": "6.9.2" }, "engines": { diff --git a/codegens/nodejs-native/npm-shrinkwrap.json b/codegens/nodejs-native/npm-shrinkwrap.json index 1bb10ce40..ca70e495a 100644 --- a/codegens/nodejs-native/npm-shrinkwrap.json +++ b/codegens/nodejs-native/npm-shrinkwrap.json @@ -48,23 +48,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz", + "integrity": "sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==", "requires": { "charset": "^1.0.0" } @@ -78,9 +70,9 @@ } }, "postman-collection": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", - "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-5.0.0.tgz", + "integrity": "sha512-1LK795Atv/ZX3jK1MCTx9KCBz0rAiIJJhTLqnJ4AsXLiLSqJuAH1w5jI1CQzHVLpPFg6E8Rl4tQIhF0eBgKNQQ==", "requires": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -88,19 +80,19 @@ "iconv-lite": "0.6.3", "liquid-json": "0.3.1", "lodash": "4.17.21", - "mime-format": "2.0.1", + "mime-format": "2.0.2", "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", + "postman-url-encoder": "3.0.6", + "semver": "7.7.1", "uuid": "8.3.2" } }, "postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.6.tgz", + "integrity": "sha512-uOlnZW+4Cmpbfbuq02hdj1hSpcIFmQxlAwsO6dflwUIVpt9+1duYVxXv3ikf+wHrAO8Wy98uVKnnuR8R0Qpdng==", "requires": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" } }, "punycode": { @@ -114,22 +106,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/codegens/nodejs-native/package.json b/codegens/nodejs-native/package.json index 9aa2115d5..d3eff68ed 100644 --- a/codegens/nodejs-native/package.json +++ b/codegens/nodejs-native/package.json @@ -27,7 +27,7 @@ "license": "Apache-2.0", "homepage": "https://github.com/postmanlabs/code-generators/tree/master/codegens/nodejs-native", "dependencies": { - "postman-collection": "4.4.0" + "postman-collection": "5.0.0" }, "devDependencies": { "follow-redirects": "1.15.2" diff --git a/codegens/php-guzzle/test/ci-install.sh b/codegens/php-guzzle/test/ci-install.sh new file mode 100755 index 000000000..2ec5cf227 --- /dev/null +++ b/codegens/php-guzzle/test/ci-install.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/php-guzzle" +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +php composer-setup.php +php -r "unlink('composer-setup.php');" +sudo mv composer.phar /usr/bin/composer +composer global require guzzlehttp/guzzle:7.4.1 diff --git a/codegens/php-httprequest2/test/ci-install.sh b/codegens/php-httprequest2/test/ci-install.sh new file mode 100755 index 000000000..a39c2fc15 --- /dev/null +++ b/codegens/php-httprequest2/test/ci-install.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/php-httprequest2" +pear install HTTP_Request2-2.3.0 diff --git a/codegens/powershell-restmethod/test/ci-install.sh b/codegens/powershell-restmethod/test/ci-install.sh new file mode 100755 index 000000000..cb84aa3bd --- /dev/null +++ b/codegens/powershell-restmethod/test/ci-install.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing Powershell" +sudo apt-get install powershell -y diff --git a/codegens/python-http.client/package.json b/codegens/python-http.client/package.json index 319bc2a12..6ec8c3661 100644 --- a/codegens/python-http.client/package.json +++ b/codegens/python-http.client/package.json @@ -27,7 +27,7 @@ "license": "Apache-2.0", "homepage": "https://github.com/postmanlabs/code-generators/tree/master/codegens/python-http.client", "dependencies": { - "postman-collection": "4.4.0" + "postman-collection": "5.0.0" }, "devDependencies": {}, "engines": { diff --git a/codegens/r-httr/test/ci-install.sh b/codegens/r-httr/test/ci-install.sh new file mode 100755 index 000000000..f4767b199 --- /dev/null +++ b/codegens/r-httr/test/ci-install.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/r-httr" +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 +sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' +sudo apt-get update +sudo apt-get install r-base libcurl4-gnutls-dev +sudo R --vanilla -e 'install.packages("httr", version="1.4.2", repos="http://cran.us.r-project.org")' diff --git a/codegens/r-rcurl/test/ci-install.sh b/codegens/r-rcurl/test/ci-install.sh new file mode 100755 index 000000000..69b15e991 --- /dev/null +++ b/codegens/r-rcurl/test/ci-install.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/r-httr" +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 +sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' +sudo apt-get update +sudo apt-get install r-base libcurl4-gnutls-dev +sudo R --vanilla -e 'install.packages("RCurl", version="1.98.1.6", repos="http://cran.us.r-project.org")' diff --git a/codegens/rust-reqwest/test/ci-install.sh b/codegens/rust-reqwest/test/ci-install.sh new file mode 100755 index 000000000..36397d70c --- /dev/null +++ b/codegens/rust-reqwest/test/ci-install.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing Rust" + sudo apt-get install -y build-essential pkg-config libssl-dev + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + pushd ./codegens/rust-reqwest &>/dev/null; + echo '''[package] + name = "rust_reqwest_codegen" + version = "0.0.1" + edition = "2021" + + [dependencies] + reqwest = { version = "0.11.14", features = ["json", "multipart"] } + tokio = { version = "1.26.0", features = ["full"] } + serde_json = { version = "1.0.94" }''' > Cargo.toml + mkdir src && echo '''fn main() { + println!("Hello, world!"); + }''' > src/main.rs + cargo build + popd &>/dev/null; diff --git a/codegens/shell-httpie/npm/test-lint.js b/codegens/shell-httpie/npm/test-lint.js new file mode 100755 index 000000000..71f753b81 --- /dev/null +++ b/codegens/shell-httpie/npm/test-lint.js @@ -0,0 +1,56 @@ +#!/usr/bin/env node +var shell = require('shelljs'), + chalk = require('chalk'), + async = require('async'), + ESLintCLIEngine = require('eslint').CLIEngine, + + /** + * The list of source code files / directories to be linted. + * + * @type {Array} + */ + LINT_SOURCE_DIRS = [ + './lib', + './test', + './npm/*.js', + './index.js' + ]; + +module.exports = function (exit) { + // banner line + console.info(chalk.yellow.bold('\nLinting files using eslint...')); + + async.waterfall([ + + /** + * Instantiates an ESLint CLI engine and runs it in the scope defined within LINT_SOURCE_DIRS. + * + * @param {Function} next - The callback function whose invocation marks the end of the lint test run. + * @returns {*} + */ + function (next) { + next(null, (new ESLintCLIEngine()).executeOnFiles(LINT_SOURCE_DIRS)); + }, + + /** + * Processes a test report from the Lint test runner, and displays meaningful results. + * + * @param {Object} report - The overall test report for the current lint test. + * @param {Object} report.results - The set of test results for the current lint run. + * @param {Function} next - The callback whose invocation marks the completion of the post run tasks. + * @returns {*} + */ + function (report, next) { + var errorReport = ESLintCLIEngine.getErrorResults(report.results); + // log the result to CLI + console.info(ESLintCLIEngine.getFormatter()(report.results)); + // log the success of the parser if it has no errors + (errorReport && !errorReport.length) && console.info(chalk.green('eslint ok!')); + // ensure that the exit code is non zero in case there was an error + next(Number(errorReport && errorReport.length) || 0); + } + ], exit); +}; + +// ensure we run this script exports if this is a direct stdin.tty run +!module.parent && module.exports(shell.exit); diff --git a/codegens/shell-httpie/package.json b/codegens/shell-httpie/package.json index 1c772fcd6..da9f0769a 100644 --- a/codegens/shell-httpie/package.json +++ b/codegens/shell-httpie/package.json @@ -15,7 +15,7 @@ }, "scripts": { "test": "./scripts/test.sh", - "test-lint": "./scripts/test-lint.sh", + "test-lint": "node npm/test-lint.js", "test-unit": "./scripts/test-unit.sh", "coverage": "nyc report --reporter=html --reporter=text mocha" }, diff --git a/codegens/shell-httpie/scripts/test-lint.sh b/codegens/shell-httpie/scripts/test-lint.sh deleted file mode 100755 index b6879c156..000000000 --- a/codegens/shell-httpie/scripts/test-lint.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# ---------------------------------------------------------------------------------------------------------------------- -# This script is intended to contain all actions pertaining to code style checking, linting and normalisation. -# -# 1. The script executes linting routines on specific folders. -# ---------------------------------------------------------------------------------------------------------------------- - -# Stop on first error -set -e; - -# banner -echo -e "\033[93mLinting and style-checking...\033[0m"; -echo -en "\033[0m\033[2m"; -echo -e "eslint `eslint -v`\033[0m\n"; - -# run style checker -eslint ./lib/** ./test/** ; -echo -en "\033[92mNo lint errors found.\n\033[0m"; diff --git a/codegens/shell-httpie/test/ci-install.sh b/codegens/shell-httpie/test/ci-install.sh new file mode 100755 index 000000000..a22593a82 --- /dev/null +++ b/codegens/shell-httpie/test/ci-install.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/shell-httpie" +sudo apt-get install httpie diff --git a/codegens/swift/test/ci-install.sh b/codegens/swift/test/ci-install.sh new file mode 100755 index 000000000..e93e673fb --- /dev/null +++ b/codegens/swift/test/ci-install.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ev; # stop on error + +echo "Installing dependencies required for tests in codegens/swift" +pushd ./codegens/swift &>/dev/null; + sudo apt-get update + sudo apt-get install clang-3.6 libicu-dev libpython2.7 -y + sudo apt-get install libcurl4 libpython2.7-dev -y + sudo wget -q https://download.swift.org/swift-5.7.3-release/ubuntu2004/swift-5.7.3-RELEASE/swift-5.7.3-RELEASE-ubuntu20.04.tar.gz + sudo tar xzf swift-5.7.3-RELEASE-ubuntu20.04.tar.gz + sudo chmod 777 swift-5.7.3-RELEASE-ubuntu20.04/usr/lib/swift/CoreFoundation/module.map +popd &>/dev/null; diff --git a/npm/ci-requirements.sh b/npm/ci-requirements.sh deleted file mode 100755 index 8174fbf9a..000000000 --- a/npm/ci-requirements.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/bash -set -ev; # stop on error - -sudo apt-get update - -echo "Insalling dependencies required for tests in codegens/libcurl" -sudo apt-get install libcurl4-gnutls-dev - -echo "Installing dependencies required for tests in codegens/java-okhttp" -pushd ./codegens/java-okhttp &>/dev/null; - sudo add-apt-repository ppa:openjdk-r/ppa -y - sudo rm -rf /var/lib/apt/lists/* - sudo apt-get update - sudo apt-get install -y openjdk-8-jdk - unzip test/unit/fixtures/dependencies.zip -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/kotlin-okhttp" -pushd ./codegens/kotlin-okhttp &>/dev/null; - sudo add-apt-repository ppa:openjdk-r/ppa -y - sudo rm -rf /var/lib/apt/lists/* - sudo apt-get update - sudo apt-get install -y openjdk-8-jdk - sudo snap install --classic kotlin - unzip test/unit/fixtures/dependencies.zip -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/java-unirest" -pushd ./codegens/java-unirest &>/dev/null; - unzip test/unit/fixtures/dependencies.zip -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/csharp-restsharp" -pushd ./codegens/csharp-restsharp &>/dev/null; - wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb - sudo dpkg -i packages-microsoft-prod.deb - sudo apt-get install apt-transport-https - sudo apt-get update - sudo apt-get install dotnet-sdk-6.0 - dotnet new console -o testProject -f net6.0 - pushd ./testProject &>/dev/null; - dotnet add package RestSharp --version 112.0.0 - popd &>/dev/null; -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/csharp-httpclient" -# Install latest .net6.0 sdk -pushd ./codegens/csharp-httpclient &>/dev/null; - wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb - sudo dpkg -i packages-microsoft-prod.deb - sudo apt-get install apt-transport-https - sudo apt-get update - sudo apt-get install dotnet-sdk-6.0 - dotnet new console -o testProject -f net6.0 - # no extra packages needed -popd &>/dev/null; - -echo "Installing Powershell" - sudo apt-get install powershell -y - -echo "Installing dependencies required for tests in codegens/php-httprequest2" - pear install HTTP_Request2-2.3.0 - -echo "Installing dependencies required for tests in codegens/swift" -pushd ./codegens/swift &>/dev/null; - sudo apt-get update - sudo apt-get install clang-3.6 libicu-dev libpython2.7 -y - sudo apt-get install libcurl4 libpython2.7-dev -y - sudo wget -q https://download.swift.org/swift-5.7.3-release/ubuntu2004/swift-5.7.3-RELEASE/swift-5.7.3-RELEASE-ubuntu20.04.tar.gz - sudo tar xzf swift-5.7.3-RELEASE-ubuntu20.04.tar.gz - sudo chmod 777 swift-5.7.3-RELEASE-ubuntu20.04/usr/lib/swift/CoreFoundation/module.map -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/csharp-restsharp" -sudo apt-get install -y mono-complete - -echo "Installing curl" - sudo apt-get install -y curl - -echo "Installing dependencies required for tests in codegens/shell-httpie" -sudo apt-get install httpie - -echo "Installing dependencies required for tests in codegens/dart-http" -pushd ./codegens/dart-http &>/dev/null; - wget -q https://storage.googleapis.com/dart-archive/channels/stable/release/3.0.4/linux_packages/dart_3.0.4-1_amd64.deb - sudo dpkg -i dart_3.0.4-1_amd64.deb - echo '''name: test -version: 1.0.0 -environment: - sdk: ^3.0.3 -dependencies: - http: ^1.0.0 -''' > pubspec.yaml - dart pub get -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/dart-dio" -pushd ./codegens/dart-dio &>/dev/null; - echo '''name: test -version: 1.0.0 -environment: - sdk: ^3.0.3 -dependencies: - dio: ^5.2.0 -''' > pubspec.yaml - dart pub get -popd &>/dev/null; - -echo "Installing dependencies required for tests in codegens/php-guzzle" - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php - php -r "unlink('composer-setup.php');" - sudo mv composer.phar /usr/bin/composer - composer global require guzzlehttp/guzzle:7.4.1 - -echo "Installing dependencies required for tests in codegens/r-rCurl and r-httr Installing R" - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 - sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/' - sudo apt-get update - sudo apt-get install r-base - -echo "Installing httr" - sudo R --vanilla -e 'install.packages("httr", version="1.4.2", repos="http://cran.us.r-project.org")' - -echo "Installing RCurl" -sudo R --vanilla -e 'install.packages("RCurl", version="1.98.1.6", repos="http://cran.us.r-project.org")' - -echo "Installing Rust" - sudo apt-get install -y build-essential pkg-config libssl-dev - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - pushd ./codegens/rust-reqwest &>/dev/null; - echo '''[package] - name = "rust_reqwest_codegen" - version = "0.0.1" - edition = "2021" - - [dependencies] - reqwest = { version = "0.11.14", features = ["json", "multipart"] } - tokio = { version = "1.26.0", features = ["full"] } - serde_json = { version = "1.0.94" }''' > Cargo.toml - mkdir src && echo '''fn main() { - println!("Hello, world!"); - }''' > src/main.rs - cargo build - popd &>/dev/null; diff --git a/npm/cirequirements.js b/npm/cirequirements.js new file mode 100644 index 000000000..44f918ce4 --- /dev/null +++ b/npm/cirequirements.js @@ -0,0 +1,38 @@ +const path = require('path'), + fs = require('fs'), + shell = require('shelljs'); + +const getSubfolders = (folder) => { + return fs.readdirSync(folder) + .map((subfolder) => { return { path: path.join(folder, subfolder), name: subfolder}; }) + .filter((obj) => { return fs.statSync(obj.path).isDirectory(); }); + }, + + args = process.argv, + PATH_TO_CODEGENS_FOLDER = path.resolve(__dirname, '../codegens'); + +getSubfolders(PATH_TO_CODEGENS_FOLDER) + .filter((codegen) => { + // check if specific codegen is requested + const requestedCodegen = args.length > 2 ? args[2] : null; + if (requestedCodegen === null) { + return true; + } + return codegen.name === requestedCodegen; + }) + .filter((codegen) => { + // check if requested codegen has a installation script + return fs.existsSync(path.join(codegen.path, 'test', 'ci-install.sh')); + }).forEach((codegen) => { + console.log('Installing CI dependencies for codegen: ' + codegen.name); + const commandOut = shell.exec(path.join(codegen.path, 'test', 'ci-install.sh')); + + if (commandOut.code !== 0) { + console.error('Failed to install CI dependencies for codegen: ' + codegen.name); + console.error(commandOut.stderr); + process.exit(1); + } + + console.log(commandOut.stdout); + }); + diff --git a/package-lock.json b/package-lock.json index 2c5eb772d..1533a796f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "postman-code-generators", - "version": "1.14.2", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -189,16 +189,6 @@ "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -215,13 +205,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "dev": true, + "requires": {} }, "acorn-node": { "version": "1.6.2", @@ -620,9 +612,9 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" @@ -657,7 +649,6 @@ "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", @@ -679,6 +670,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "module-deps": "^4.0.8", "os-browserify": "~0.3.0", @@ -2944,24 +2936,24 @@ "dev": true, "optional": true }, - "string-width": { - "version": "1.0.2", + "string_decoder": { + "version": "1.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.1.0" } }, - "string_decoder": { - "version": "1.1.1", + "string-width": { + "version": "1.0.2", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -3465,11 +3457,11 @@ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", @@ -4148,6 +4140,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -4364,7 +4366,8 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz", "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==", - "dev": true + "dev": true, + "requires": {} }, "md5.js": { "version": "1.3.5", @@ -4462,9 +4465,9 @@ "dev": true }, "mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz", + "integrity": "sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==", "requires": { "charset": "^1.0.0" } @@ -4680,7 +4683,6 @@ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", "cached-path-relative": "^1.0.0", "concat-stream": "~1.5.0", @@ -4688,6 +4690,7 @@ "detective": "^4.0.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.3", @@ -5456,9 +5459,9 @@ "dev": true }, "postman-collection": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", - "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-5.0.0.tgz", + "integrity": "sha512-1LK795Atv/ZX3jK1MCTx9KCBz0rAiIJJhTLqnJ4AsXLiLSqJuAH1w5jI1CQzHVLpPFg6E8Rl4tQIhF0eBgKNQQ==", "requires": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -5466,10 +5469,10 @@ "iconv-lite": "0.6.3", "liquid-json": "0.3.1", "lodash": "4.17.21", - "mime-format": "2.0.1", + "mime-format": "2.0.2", "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", + "postman-url-encoder": "3.0.6", + "semver": "7.7.1", "uuid": "8.3.2" }, "dependencies": { @@ -5481,14 +5484,6 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -5503,22 +5498,14 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -5798,11 +5785,11 @@ } }, "postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.6.tgz", + "integrity": "sha512-uOlnZW+4Cmpbfbuq02hdj1hSpcIFmQxlAwsO6dflwUIVpt9+1duYVxXv3ikf+wHrAO8Wy98uVKnnuR8R0Qpdng==", "requires": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "dependencies": { "punycode": { @@ -6636,6 +6623,15 @@ "readable-stream": "^2.0.2" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -6666,15 +6662,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7234,7 +7221,6 @@ "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", @@ -7256,6 +7242,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp": "^0.5.0", "module-deps": "^6.0.0", @@ -7334,7 +7321,6 @@ "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", "cached-path-relative": "^1.0.0", "concat-stream": "~1.6.0", @@ -7342,6 +7328,7 @@ "detective": "^5.0.2", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", diff --git a/package.json b/package.json index b9f20b1f9..fe58a1352 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postman-code-generators", - "version": "1.14.2", + "version": "2.0.0", "description": "Generates code snippets for a postman collection", "main": "index.js", "directories": { @@ -14,7 +14,7 @@ "postinstall": "node npm/deepinstall.js", "deepinstall": "node npm/deepinstall.js", "boilerplate": "node npm/boilerplate.js", - "cirequirements": "npm/ci-requirements.sh", + "cirequirements": "node npm/cirequirements.js", "test-lint": "node npm/test-lint.js" }, "repository": { @@ -29,7 +29,7 @@ "detect-package-manager": "3.0.2", "lodash": "4.17.21", "path": "0.12.7", - "postman-collection": "^4.4.0", + "postman-collection": "^5.0.0", "shelljs": "0.8.5" }, "devDependencies": { @@ -55,6 +55,6 @@ "watchify": "3.11.1" }, "engines": { - "node": ">=12" + "node": ">=18" } } diff --git a/test/system/repository.test.js b/test/system/repository.test.js index 6b32850c9..9a1e756dc 100644 --- a/test/system/repository.test.js +++ b/test/system/repository.test.js @@ -38,7 +38,7 @@ describe('project repository', function () { expect(json).to.have.property('repository'); expect(json).to.have.property('engines'); - expect(json.engines).to.eql({ node: '>=12' }); + expect(json.engines).to.eql({ node: '>=18' }); }); it('must have a valid version string in form of ..', function () {