From bce08da110952f41de9b86d4041742a008721313 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 4 Oct 2021 11:34:09 +0000 Subject: [PATCH 1/7] chore(deps): update dependency lint-staged to v11.2.0 --- package.json | 2 +- yarn.lock | 97 +++++++++++++++++++++++++--------------------------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 49232430ba..2b44fae9b3 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "husky": "7.0.2", "jest": "27.2.4", "jest-fetch-mock": "3.0.3", - "lint-staged": "11.1.2", + "lint-staged": "11.2.0", "prettier": "2.4.1", "proxyquire": "2.1.3", "source-map-support": "0.5.20", diff --git a/yarn.lock b/yarn.lock index 322a1410a2..5fb9f77b9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1563,7 +1563,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1613,9 +1613,9 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-truncate@^2.1.0: +cli-truncate@2.1.0, cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -1696,6 +1696,11 @@ colorette@^1.2.2: resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + colors@1.0.x: version "1.0.3" resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" @@ -1718,11 +1723,16 @@ commander@^6.2.0: resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.1.0, commander@^7.2.0: +commander@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8" + integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA== + component-emitter@^1.2.1, component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" @@ -1882,10 +1892,10 @@ cors@^2.8.5: object-assign "^4" vary "^1" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -2045,7 +2055,7 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@4.3.2, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@4.3.2, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -2641,7 +2651,7 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -3799,11 +3809,6 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" @@ -4581,33 +4586,33 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.2.tgz#4dd78782ae43ee6ebf2969cad9af67a46b33cd90" - integrity sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w== +lint-staged@11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.0.tgz#6b9774a74b3eb4bef5c59fb6475bff84d6853008" + integrity sha512-0KIcRuO4HQS2Su7qWtjrfTXgSklvyIb9Fk9qVWRZkGHa5S81Vj6WBbs+ogQBvHUwLJYq1eQ4R+H82GSak4OM7w== dependencies: - chalk "^4.1.1" - cli-truncate "^2.1.0" - commander "^7.2.0" - cosmiconfig "^7.0.0" - debug "^4.3.1" + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" enquirer "^2.3.6" - execa "^5.0.0" - listr2 "^3.8.2" - log-symbols "^4.1.0" + execa "^5.1.1" + listr2 "^3.12.2" micromatch "^4.0.4" normalize-path "^3.0.0" please-upgrade-node "^3.2.0" string-argv "0.3.1" - stringify-object "^3.3.0" + stringify-object "3.3.0" + supports-color "8.1.1" -listr2@^3.8.2: - version "3.11.0" - resolved "https://registry.npmjs.org/listr2/-/listr2-3.11.0.tgz" - integrity sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ== +listr2@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.12.2.tgz#2d55cc627111603ad4768a9e87c9c7bb9b49997e" + integrity sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A== dependencies: cli-truncate "^2.1.0" - colorette "^1.2.2" + colorette "^1.4.0" log-update "^4.0.0" p-map "^4.0.0" rxjs "^6.6.7" @@ -4686,14 +4691,6 @@ log-driver@^1.2.7: resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - log-update@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" @@ -6560,9 +6557,9 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: +stringify-object@3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" @@ -6647,6 +6644,13 @@ supertest@6.1.6: methods "^1.1.2" superagent "^6.1.0" +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -6661,13 +6665,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" From f0490c4e43e600811f1ece40dba944b8638a2b66 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 4 Oct 2021 17:44:30 +0000 Subject: [PATCH 2/7] chore(deps): update typescript-eslint monorepo to v4.33.0 --- package.json | 4 +-- yarn.lock | 82 ++++++++++++++++++++++++++-------------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 2b44fae9b3..162556c69f 100644 --- a/package.json +++ b/package.json @@ -127,8 +127,8 @@ "@types/stoppable": "1.1.1", "@types/supertest": "2.0.11", "@types/uuid": "8.3.1", - "@typescript-eslint/eslint-plugin": "4.32.0", - "@typescript-eslint/parser": "4.32.0", + "@typescript-eslint/eslint-plugin": "4.33.0", + "@typescript-eslint/parser": "4.33.0", "copyfiles": "2.4.1", "coveralls": "3.1.1", "del-cli": "4.0.1", diff --git a/yarn.lock b/yarn.lock index 5fb9f77b9d..1f064f3b7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -925,13 +925,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz#46d2370ae9311092f2a6f7246d28357daf2d4e89" - integrity sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA== +"@typescript-eslint/eslint-plugin@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== dependencies: - "@typescript-eslint/experimental-utils" "4.32.0" - "@typescript-eslint/scope-manager" "4.32.0" + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -939,60 +939,60 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz#53a8267d16ca5a79134739129871966c56a59dc4" - integrity sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A== +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.32.0" - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/typescript-estree" "4.32.0" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.32.0.tgz#751ecca0e2fecd3d44484a9b3049ffc1871616e5" - integrity sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w== +"@typescript-eslint/parser@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== dependencies: - "@typescript-eslint/scope-manager" "4.32.0" - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/typescript-estree" "4.32.0" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz#e03c8668f8b954072b3f944d5b799c0c9225a7d5" - integrity sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w== +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== dependencies: - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/visitor-keys" "4.32.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/types@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" - integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/typescript-estree@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" - integrity sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw== +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== dependencies: - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/visitor-keys" "4.32.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" debug "^4.3.1" globby "^11.0.3" is-glob "^4.0.1" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" - integrity sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw== +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== dependencies: - "@typescript-eslint/types" "4.32.0" + "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" abab@^2.0.3, abab@^2.0.5: From 20929a03610b7710725796f79400bfea00e3e308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Chr=C3=A1steck=C3=BD?= Date: Mon, 4 Oct 2021 22:17:49 +0200 Subject: [PATCH 3/7] docs: Update php documentation to include context provider (#1000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update php documentation to include context provider * Update leftover from java * Remove another Java leftover Co-authored-by: Ivar Conradi Østhus --- websitev2/docs/sdks/php.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/websitev2/docs/sdks/php.md b/websitev2/docs/sdks/php.md index ab7fc94f52..54f4d45682 100644 --- a/websitev2/docs/sdks/php.md +++ b/websitev2/docs/sdks/php.md @@ -76,4 +76,26 @@ $context = new UnleashContext( $unleash->isEnabled("someToggle", $context); ``` + +**b) Via a UnleashContextProvider** + +This is a bit more advanced approach, where you configure a unleash-context provider. By doing this you do not have to rebuild or to pass the unleash-context object to every place you are calling `$unleash->isEnabled()`. + +```php +withAppName('my.php-app') + ->withInstanceId('your-instance-1') + ->withAppUrl('http://unleash.herokuapp.com/api/') + ->withContextProvider($contextProvider) + ->build(); + +// Anywhere in the code unleash will get the unleash context from your registered provider. +$unleash->isEnabled("someToggle"); +``` + > You can read more complete documentation in the [Client SDK repository](https://github.com/Unleash/unleash-client-php). From ac049d2e003c459907e3023c09a9f2835013f5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Chr=C3=A1steck=C3=BD?= Date: Mon, 4 Oct 2021 22:18:39 +0200 Subject: [PATCH 4/7] docs: Mention php sdk as supporting variants (#1001) --- websitev2/docs/advanced/feature-toggle-variants.md | 1 + 1 file changed, 1 insertion(+) diff --git a/websitev2/docs/advanced/feature-toggle-variants.md b/websitev2/docs/advanced/feature-toggle-variants.md index 4c892b240e..8144413ed3 100644 --- a/websitev2/docs/advanced/feature-toggle-variants.md +++ b/websitev2/docs/advanced/feature-toggle-variants.md @@ -49,5 +49,6 @@ To make use of toggle variants, you need to use a compatible client. Client SDK - [unleash-client-python](https://github.com/Unleash/unleash-client-python) (from v3.3.0) - [unleash-client-dotnet](https://github.com/Unleash/unleash-client-dotnet) (from v1.3.6) - [unleash-client-go](https://github.com/Unleash/unleash-client-go) (from v3 branch) +- [unleash-client-php](https://github.com/Unleash/unleash-client-php) (from v1.0.0) If you would like to give feedback on this feature, experience issues or have questions, please feel free to open an issue on [GitHub](https://github.com/Unleash/unleash/). From a4015802285f0e3e06c67e66acc062e668bafcd2 Mon Sep 17 00:00:00 2001 From: Christopher Kolstad Date: Wed, 6 Oct 2021 09:25:34 +0200 Subject: [PATCH 5/7] task: Disables feature_environments without strategies (#1003) --- src/lib/db/feature-environment-store.ts | 21 ++- src/lib/routes/admin-api/project/features.ts | 3 +- src/lib/services/feature-toggle-service-v2.ts | 6 + .../types/stores/feature-environment-store.ts | 5 +- .../project/feature.strategy.e2e.test.ts | 137 ++++++++++++++++++ .../fake-feature-environment-store.ts | 9 ++ 6 files changed, 178 insertions(+), 3 deletions(-) diff --git a/src/lib/db/feature-environment-store.ts b/src/lib/db/feature-environment-store.ts index 219e758c4e..3467db7ca2 100644 --- a/src/lib/db/feature-environment-store.ts +++ b/src/lib/db/feature-environment-store.ts @@ -10,7 +10,10 @@ import { DB_TIME } from '../metric-events'; import { IFeatureEnvironment } from '../types/model'; import NotFoundError from '../error/notfound-error'; -const T = { featureEnvs: 'feature_environments' }; +const T = { + featureEnvs: 'feature_environments', + featureStrategies: 'feature_strategies', +}; interface IFeatureEnvironmentRow { environment: string; @@ -92,6 +95,22 @@ export class FeatureEnvironmentStore implements IFeatureEnvironmentStore { })); } + async disableEnvironmentIfNoStrategies( + featureName: string, + environment: string, + ): Promise { + const result = await this.db.raw( + `SELECT EXISTS (SELECT 1 FROM ${T.featureStrategies} WHERE feature_name = ? AND environment = ?) AS enabled`, + [featureName, environment], + ); + const { enabled } = result.rows[0]; + if (!enabled) { + await this.db(T.featureEnvs) + .update({ enabled: false }) + .where({ feature_name: featureName, environment }); + } + } + async addEnvironmentToFeature( featureName: string, environment: string, diff --git a/src/lib/routes/admin-api/project/features.ts b/src/lib/routes/admin-api/project/features.ts index 3ff54148de..868fd881c6 100644 --- a/src/lib/routes/admin-api/project/features.ts +++ b/src/lib/routes/admin-api/project/features.ts @@ -300,12 +300,13 @@ export default class ProjectFeaturesController extends Controller { res: Response, ): Promise { this.logger.info('Deleting strategy'); - const { environment, projectId } = req.params; + const { environment, projectId, featureName } = req.params; const userName = extractUsername(req); const { strategyId } = req.params; this.logger.info(strategyId); const strategy = await this.featureService.deleteStrategy( strategyId, + featureName, userName, projectId, environment, diff --git a/src/lib/services/feature-toggle-service-v2.ts b/src/lib/services/feature-toggle-service-v2.ts index 3853b4f555..8eba5f2b00 100644 --- a/src/lib/services/feature-toggle-service-v2.ts +++ b/src/lib/services/feature-toggle-service-v2.ts @@ -226,6 +226,7 @@ class FeatureToggleServiceV2 { */ async deleteStrategy( id: string, + featureName: string, userName: string, project: string = 'default', environment: string = DEFAULT_ENV, @@ -240,6 +241,11 @@ class FeatureToggleServiceV2 { id, }, }); + // If there are no strategies left for environment disable it + await this.featureEnvironmentStore.disableEnvironmentIfNoStrategies( + featureName, + environment, + ); } async getStrategiesForEnvironment( diff --git a/src/lib/types/stores/feature-environment-store.ts b/src/lib/types/stores/feature-environment-store.ts index 79fef3ad13..a5ff4c2fef 100644 --- a/src/lib/types/stores/feature-environment-store.ts +++ b/src/lib/types/stores/feature-environment-store.ts @@ -34,7 +34,10 @@ export interface IFeatureEnvironmentStore environment: string, enabled: boolean, ): Promise; - + disableEnvironmentIfNoStrategies( + featureName: string, + environment: string, + ): Promise; disconnectFeatures(environment: string, project: string): Promise; connectFeatures(environment: string, projectId: string): Promise; diff --git a/src/test/e2e/api/admin/project/feature.strategy.e2e.test.ts b/src/test/e2e/api/admin/project/feature.strategy.e2e.test.ts index 9a39c57fae..32d4777d6d 100644 --- a/src/test/e2e/api/admin/project/feature.strategy.e2e.test.ts +++ b/src/test/e2e/api/admin/project/feature.strategy.e2e.test.ts @@ -1108,3 +1108,140 @@ test('Feature strategies list should respect strategy sortorders for each enviro expect(strategies[1].sortOrder).toBe(sortOrderSecond); expect(strategies[2].sortOrder).toBe(sortOrderDefault); }); + +test('Deleting last strategy for feature environment should disable that environment', async () => { + const envName = 'last_strategy_delete_env'; + const featureName = 'last_strategy_delete_feature'; + // Create environment + await db.stores.environmentStore.create({ + name: envName, + type: 'test', + }); + // Connect environment to project + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envName, + }) + .expect(200); + await app.request + .post('/api/admin/projects/default/features') + .send({ name: featureName }) + .expect(201); + let strategyId; + await app.request + .post( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`, + ) + .send({ + name: 'default', + parameters: { + userId: 'string', + }, + }) + .expect(200) + .expect((res) => { + strategyId = res.body.id; + }); + // Enable feature_environment + await app.request + .post( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/on`, + ) + .send({}) + .expect(200); + await app.request + .get( + `/api/admin/projects/default/features/${featureName}/environments/${envName}`, + ) + .expect(200) + .expect((res) => { + expect(res.body.enabled).toBeTruthy(); + }); + // Delete last strategy, this should also disable the environment + await app.request.delete( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies/${strategyId}`, + ); + await app.request + .get( + `/api/admin/projects/default/features/${featureName}/environments/${envName}`, + ) + .expect(200) + .expect((res) => { + expect(res.body.enabled).toBeFalsy(); + }); +}); + +test('Deleting strategy for feature environment should not disable that environment as long as there are other strategies', async () => { + const envName = 'any_strategy_delete_env'; + const featureName = 'any_strategy_delete_feature'; + // Create environment + await db.stores.environmentStore.create({ + name: envName, + type: 'test', + }); + // Connect environment to project + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envName, + }) + .expect(200); + await app.request + .post('/api/admin/projects/default/features') + .send({ name: featureName }) + .expect(201); + let strategyId; + await app.request + .post( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`, + ) + .send({ + name: 'default', + parameters: { + userId: 'string', + }, + }) + .expect(200) + .expect((res) => { + strategyId = res.body.id; + }); + await app.request + .post( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`, + ) + .send({ + name: 'default', + parameters: { + customerId: 'string', + }, + }) + .expect(200); + // Enable feature_environment + await app.request + .post( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/on`, + ) + .send({}) + .expect(200); + await app.request + .get( + `/api/admin/projects/default/features/${featureName}/environments/${envName}`, + ) + .expect(200) + .expect((res) => { + expect(res.body.enabled).toBeTruthy(); + }); + // Delete a strategy, this should also disable the environment + await app.request.delete( + `/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies/${strategyId}`, + ); + await app.request + .get( + `/api/admin/projects/default/features/${featureName}/environments/${envName}`, + ) + .expect(200) + .expect((res) => { + expect(res.body.enabled).toBeTruthy(); + }); +}); diff --git a/src/test/fixtures/fake-feature-environment-store.ts b/src/test/fixtures/fake-feature-environment-store.ts index 013c89d55e..1efc17db5d 100644 --- a/src/test/fixtures/fake-feature-environment-store.ts +++ b/src/test/fixtures/fake-feature-environment-store.ts @@ -148,4 +148,13 @@ export default class FakeFeatureEnvironmentStore ): Promise { return Promise.reject(new Error('Not implemented')); } + + disableEnvironmentIfNoStrategies( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + featureName: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + environment: string, + ): Promise { + return Promise.reject(new Error('Not implemented')); + } } From 12245664ad8f5535ad3c09f07c7e46fba2a663c8 Mon Sep 17 00:00:00 2001 From: Fredrik Strand Oseberg Date: Wed, 6 Oct 2021 09:39:59 +0200 Subject: [PATCH 6/7] fix: add sort order to environments (#1004) * fix: add sort order to environments * fix: lint * fix: remove display name --- src/lib/db/feature-strategy-store.ts | 9 +- .../admin/project/project.health.e2e.test.ts | 87 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/lib/db/feature-strategy-store.ts b/src/lib/db/feature-strategy-store.ts index 85e85d2cdc..80f56eb00d 100644 --- a/src/lib/db/feature-strategy-store.ts +++ b/src/lib/db/feature-strategy-store.ts @@ -351,7 +351,14 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore { }, {}); return Object.values(overview).map((o: IFeatureOverview) => ({ ...o, - environments: o.environments.filter((f) => f.name), + environments: o.environments + .filter((f) => f.name) + .sort((a, b) => { + if (a.sortOrder === b.sortOrder) { + return a.name.localeCompare(b.name); + } + return a.sortOrder - b.sortOrder; + }), })); } return []; diff --git a/src/test/e2e/api/admin/project/project.health.e2e.test.ts b/src/test/e2e/api/admin/project/project.health.e2e.test.ts index 7ed4b1eff5..335a17fae1 100644 --- a/src/test/e2e/api/admin/project/project.health.e2e.test.ts +++ b/src/test/e2e/api/admin/project/project.health.e2e.test.ts @@ -155,3 +155,90 @@ test('Health report for non-existing project yields 404', async () => { .get('/api/admin/projects/some-crazy-project-name/health-report') .expect(404); }); + +test('Sorts environments by sort order', async () => { + const envOne = 'my-sorted-env1'; + const envTwo = 'my-sorted-env2'; + const featureName = 'My-new-toggle'; + const defaultEnvName = 'default'; + await db.stores.environmentStore.create({ + name: envOne, + type: 'production', + sortOrder: 0, + }); + + await db.stores.environmentStore.create({ + name: envTwo, + type: 'production', + sortOrder: 500, + }); + + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envOne, + }) + .expect(200); + + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envTwo, + }) + .expect(200); + + await app.request + .post('/api/admin/projects/default/features') + .send({ name: featureName }) + .expect(201); + + await app.request.get('/api/admin/projects/default').expect((res) => { + const feature = res.body.features[0]; + expect(feature.environments[0].name).toBe(envOne); + expect(feature.environments[1].name).toBe(defaultEnvName); + expect(feature.environments[2].name).toBe(envTwo); + }); +}); + +test('Sorts environments correctly if sort order is equal', async () => { + const envOne = 'my-sorted-env3'; + const envTwo = 'my-sorted-env4'; + const featureName = 'My-new-toggle-2'; + + await db.stores.environmentStore.create({ + name: envOne, + type: 'production', + sortOrder: -5, + }); + + await db.stores.environmentStore.create({ + name: envTwo, + type: 'production', + sortOrder: -5, + }); + + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envOne, + }) + .expect(200); + + await app.request + .post('/api/admin/projects/default/environments') + .send({ + environment: envTwo, + }) + .expect(200); + + await app.request + .post('/api/admin/projects/default/features') + .send({ name: featureName }) + .expect(201); + + await app.request.get('/api/admin/projects/default').expect((res) => { + const feature = res.body.features[0]; + expect(feature.environments[0].name).toBe(envOne); + expect(feature.environments[1].name).toBe(envTwo); + }); +}); From 7b034b631c329f383dbf3d15e7043d991d1e9e06 Mon Sep 17 00:00:00 2001 From: Aneesh Relan Date: Wed, 6 Oct 2021 16:01:28 +0530 Subject: [PATCH 7/7] chore: add jest coverage action for pr builds (#997) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ivar Conradi Østhus --- .github/workflows/build_prs_jest_report.yaml | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/build_prs_jest_report.yaml diff --git a/.github/workflows/build_prs_jest_report.yaml b/.github/workflows/build_prs_jest_report.yaml new file mode 100644 index 0000000000..1791834973 --- /dev/null +++ b/.github/workflows/build_prs_jest_report.yaml @@ -0,0 +1,45 @@ +name: PullRequestJestReport + +on: + pull_request: + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x] + services: + # Label used to access the service container + postgres: + # Docker Hub image + image: postgres + # Provide the password for postgres + env: + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - name: Tests on ${{ matrix.node-version }} + uses: artiomtr/jest-coverage-report-action@v2.0-rc.1 + with: + package-manager: yarn + github-token: ${{ secrets.GITHUB_TOKEN }} + test-script: yarn run test:coverage + env: + CI: true + TEST_DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres