From 4f013a12d3debdad503de9f1ddd7433f8247cca9 Mon Sep 17 00:00:00 2001 From: Denis Rumyantsev Date: Tue, 31 Jan 2023 09:53:06 +0100 Subject: [PATCH] GooglePlayReleaseV4 - override release notes (#381) --- README.md | 30 +- .../resources.resjson/en-US/resources.resjson | 2 + Tasks/GooglePlayReleaseV4/main.ts | 5 +- .../modules/metadataHelper.ts | 53 +- Tasks/GooglePlayReleaseV4/package-lock.json | 533 ++++++++++++++++-- Tasks/GooglePlayReleaseV4/package.json | 4 +- Tasks/GooglePlayReleaseV4/task.json | 10 +- Tasks/GooglePlayReleaseV4/task.loc.json | 12 +- ...leaseNotesContainLanguageTags-is-false.png | Bin 0 -> 12068 bytes ...eleaseNotesContainLanguageTags-is-true.png | Bin 0 -> 13386 bytes images/releaseNotesContainLanguageTags.png | Bin 0 -> 6881 bytes vsts-extension-google-play.json | 2 +- 12 files changed, 584 insertions(+), 67 deletions(-) create mode 100644 images/releaseNotesContainLanguageTags-is-false.png create mode 100644 images/releaseNotesContainLanguageTags-is-true.png create mode 100644 images/releaseNotesContainLanguageTags.png diff --git a/README.md b/README.md index d6e8e3ec..5f39102a 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,35 @@ $(Specified Directory) 12. **Language Code** *(String, Optional)* - An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is _en-US_. Only visible if `Update metadata` option is disabled. -13. **Update Metadata** *(Boolean, Optional)* - Allows automating metadata updates to the Google Play store by leveraging the contents of the `Metadata Root Directory`. +13. **Release notes contain language tags** *(Boolean, Optional)* - Allows adding the release notes file containing language tags. Only visible if `Update metadata` option is disabled. + +* The `releaseNotesContainLanguageTags` input: + + ![releaseNotesContainLanguageTags](images/releaseNotesContainLanguageTags.png) + +* The `Release Notes` file content example: + +```xml + + Minor updates, bug fixes, and performance improvements. + + + Mises à jour mineures, corrections de bogues et améliorations des performances. + + + Aggiornamenti minori, correzioni di bug e miglioramenti delle prestazioni. + +``` + +* Result if the `releaseNotesContainLanguageTags` input is set to `false` (by default): + + ![releaseNotesContainLanguageTags is false](images/releaseNotesContainLanguageTags-is-false.png) + +* Result if the `releaseNotesContainLanguageTags` input is set to `true` (the `Language Code` input will be ignored): + + ![releaseNotesContainLanguageTags is true](images/releaseNotesContainLanguageTags-is-true.png) + +14. **Update Metadata** *(Boolean, Optional)* - Allows automating metadata updates to the Google Play store by leveraging the contents of the `Metadata Root Directory`. ![Update Metadata](images/update-metadata.png) diff --git a/Tasks/GooglePlayReleaseV4/Strings/resources.resjson/en-US/resources.resjson b/Tasks/GooglePlayReleaseV4/Strings/resources.resjson/en-US/resources.resjson index 7f9163c2..b1524fec 100644 --- a/Tasks/GooglePlayReleaseV4/Strings/resources.resjson/en-US/resources.resjson +++ b/Tasks/GooglePlayReleaseV4/Strings/resources.resjson/en-US/resources.resjson @@ -30,6 +30,8 @@ "loc.input.help.changeLogFile": "Path to the file specifying the release notes (change log) for the application you are publishing.", "loc.input.label.languageCode": "Language code", "loc.input.help.languageCode": "An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is _en-US_", + "loc.input.label.releaseNotesContainLanguageTags": "Release notes contain language tags", + "loc.input.help.releaseNotesContainLanguageTags": "Select this option if the release notes file contains language tags.", "loc.input.label.metadataRootPath": "Metadata root directory", "loc.input.help.metadataRootPath": "The path to the metadata folder with the fastlane metadata structure.", "loc.input.label.changeUpdatePriority": "Set in-app update priority", diff --git a/Tasks/GooglePlayReleaseV4/main.ts b/Tasks/GooglePlayReleaseV4/main.ts index ffcc2d1a..a18b9205 100644 --- a/Tasks/GooglePlayReleaseV4/main.ts +++ b/Tasks/GooglePlayReleaseV4/main.ts @@ -48,6 +48,7 @@ async function run(): Promise { let changelogFile: string = null; let languageCode: string = null; + let releaseNotesContainLanguageTags: boolean = false; let metadataRootPath: string = null; if (shouldAttachMetadata) { @@ -56,6 +57,7 @@ async function run(): Promise { changelogFile = tl.getInput('changelogFile', false); const defaultLanguageCode = 'en-US'; languageCode = tl.getInput('languageCode', false) || defaultLanguageCode; + releaseNotesContainLanguageTags = tl.getBoolInput('releaseNotesContainLanguageTags', false); } // Advanced inputs @@ -193,8 +195,7 @@ async function run(): Promise { requireTrackUpdate = action !== 'OnlyStoreListing'; } else if (changelogFile) { tl.debug(`Uploading the common change log ${changelogFile} to all versions`); - const commonNotes = await metadataHelper.getCommonReleaseNotes(languageCode, changelogFile); - releaseNotes = commonNotes && [commonNotes]; + releaseNotes = await metadataHelper.getCommonReleaseNotes(languageCode, changelogFile, releaseNotesContainLanguageTags); requireTrackUpdate = true; } diff --git a/Tasks/GooglePlayReleaseV4/modules/metadataHelper.ts b/Tasks/GooglePlayReleaseV4/modules/metadataHelper.ts index d1260eb0..19832ae2 100644 --- a/Tasks/GooglePlayReleaseV4/modules/metadataHelper.ts +++ b/Tasks/GooglePlayReleaseV4/modules/metadataHelper.ts @@ -1,29 +1,46 @@ import * as fs from 'fs'; import * as path from 'path'; +import { JSDOM } from 'jsdom'; import * as tl from 'azure-pipelines-task-lib/task'; import { androidpublisher_v3 as pub3 } from 'googleapis'; /** * Uploads change log files if specified for all the version codes in the update - * @param changelogFile - * @param versionCodes - * @returns nothing + * @param {string} languageCode + * @param {string} changelogFile + * @param {boolean} releaseNotesContainLanguageTags + * @returns {pub3.Schema$LocalizedText[]} `[{ language: 'en-US|fr-FR|it-IT|...', text: 'Localized_Release_Notes' }, ...]` */ -export async function getCommonReleaseNotes(languageCode: string, changelogFile: string): Promise { +export async function getCommonReleaseNotes(languageCode: string, changelogFile: string, releaseNotesContainLanguageTags: boolean): Promise { const stats: tl.FsStats = tl.stats(changelogFile); + const releaseNotes: pub3.Schema$LocalizedText[] = []; - let releaseNotes: pub3.Schema$LocalizedText = null; if (stats && stats.isFile()) { console.log(tl.loc('AppendChangelog', changelogFile)); - releaseNotes = { - language: languageCode, - text: getChangelog(changelogFile) - }; + const changelog: string = getChangelog(changelogFile); + + if (changelog) { + if (releaseNotesContainLanguageTags) { + for (const node of new JSDOM(changelog).window.document.body.childNodes.values()) { + const language = node['tagName']; + const text = node.textContent.trim(); + if (language && text) { + releaseNotes.push({ language, text }); + } + } + } else { + releaseNotes.push({ + language: languageCode, + text: changelog + }); + } + } } else { tl.debug(`The change log path ${changelogFile} either does not exist or points to a directory. Ignoring...`); } + return releaseNotes; } @@ -36,7 +53,7 @@ export async function getCommonReleaseNotes(languageCode: string, changelogFile: function getChangelog(changelogFile: string): string { tl.debug(`Reading change log from ${changelogFile}`); try { - return fs.readFileSync(changelogFile).toString(); + return fs.readFileSync(changelogFile).toString().trim(); } catch (e) { tl.debug(`Change log reading from ${changelogFile} failed`); tl.debug(e); @@ -211,14 +228,14 @@ async function uploadMetadataWithLanguageCode(edits: pub3.Resource$Edits, versio async function addLanguageListing(edits: pub3.Resource$Edits, languageCode: string, directory: string) { const listingResource: pub3.Schema$Listing = createListingResource(languageCode, directory); - const isPatch:boolean = (!listingResource.fullDescription) || - (!listingResource.shortDescription) || - (!listingResource.title); + const isPatch: boolean = (!listingResource.fullDescription) || + (!listingResource.shortDescription) || + (!listingResource.title); - const isEmpty:boolean = (!listingResource.fullDescription) && - (!listingResource.shortDescription) && - (!listingResource.video) && - (!listingResource.title); + const isEmpty: boolean = (!listingResource.fullDescription) && + (!listingResource.shortDescription) && + (!listingResource.video) && + (!listingResource.title); const listingRequestParameters: pub3.Params$Resource$Edits$Listings$Patch = { language: languageCode, @@ -371,7 +388,7 @@ function getImageList(directory: string): { [key: string]: string[] } { const acceptedExtensions: string[] = ['.png', '.jpg', '.jpeg']; const imageDirectory: string = path.join(directory, 'images'); - const imageList: { [key: string]: string[] } = {}; + const imageList: { [key: string]: string[] } = {}; for (const imageType of imageTypes) { let shouldAttemptUpload: boolean = false; diff --git a/Tasks/GooglePlayReleaseV4/package-lock.json b/Tasks/GooglePlayReleaseV4/package-lock.json index bdd3e10a..6a8b1ddb 100644 --- a/Tasks/GooglePlayReleaseV4/package-lock.json +++ b/Tasks/GooglePlayReleaseV4/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, "@types/concat-stream": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", @@ -15,26 +20,51 @@ "@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", "requires": { "@types/node": "*" } }, + "@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "requires": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, "@types/mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==" }, "@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" + "version": "16.18.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", + "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" + }, + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -43,6 +73,32 @@ "event-target-shim": "^5.0.0" } }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + }, + "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==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "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==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -59,25 +115,35 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "azure-pipelines-task-lib": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.1.9.tgz", - "integrity": "sha512-K7gSptgXzQopg4hZ5ABgPKU5WPeSVX4UfiH9T4lSUdmDw/6+3o4/AXkUFcgPVWGXefNLx6GzHcKYRUE1r+KwZQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz", + "integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==", "requires": { - "minimatch": "3.0.4", - "mockery": "^1.7.0", + "minimatch": "3.0.5", + "mockery": "^2.1.0", "q": "^1.5.1", "semver": "^5.1.0", - "shelljs": "^0.8.4", + "shelljs": "^0.8.5", "sync-request": "6.1.0", "uuid": "^3.0.1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "balanced-match": { @@ -104,6 +170,11 @@ "concat-map": "0.0.1" } }, + "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==" + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -126,7 +197,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "combined-stream": { "version": "1.0.8", @@ -157,6 +228,61 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "dependencies": { + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -165,10 +291,35 @@ "ms": "2.1.2" } }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -178,6 +329,33 @@ "safe-buffer": "^5.0.1" } }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -188,6 +366,11 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, "fast-text-encoding": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", @@ -247,7 +430,7 @@ "get-port": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" }, "glob": { "version": "7.1.7", @@ -338,6 +521,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "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==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, "http-basic": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", @@ -349,6 +540,16 @@ "parse-cache-control": "^1.0.1" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-response-object": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", @@ -373,6 +574,14 @@ "debug": "4" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -393,13 +602,18 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -408,7 +622,76 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "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.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } + } }, "json-bigint": { "version": "1.0.0", @@ -437,6 +720,20 @@ "safe-buffer": "^5.0.1" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -446,16 +743,16 @@ } }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.49.0" + "mime-db": "1.52.0" } }, "minimatch": { @@ -467,9 +764,9 @@ } }, "mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" }, "ms": { "version": "2.1.2", @@ -489,6 +786,11 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, + "nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" + }, "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", @@ -502,10 +804,28 @@ "wrappy": "1" } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "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" + } + }, "parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "path-is-absolute": { "version": "1.0.1", @@ -517,23 +837,38 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, "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==" }, "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "requires": { "asap": "~2.0.6" } }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "qs": { "version": "6.10.1", @@ -543,6 +878,11 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -560,17 +900,22 @@ "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "requires": { "resolve": "^1.1.6" } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -580,6 +925,19 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -605,6 +963,12 @@ "object-inspect": "^1.9.0" } }, + "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 + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -618,6 +982,11 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "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==" + }, "sync-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", @@ -661,15 +1030,34 @@ } } }, + "tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "typescript": { "version": "4.0.2", @@ -677,6 +1065,20 @@ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", "dev": true }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -685,18 +1087,47 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "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==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "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==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, + "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==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "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==" + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -706,11 +1137,31 @@ "webidl-conversions": "^3.0.0" } }, + "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==" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + }, + "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==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/Tasks/GooglePlayReleaseV4/package.json b/Tasks/GooglePlayReleaseV4/package.json index 3983081f..dc1b32ff 100644 --- a/Tasks/GooglePlayReleaseV4/package.json +++ b/Tasks/GooglePlayReleaseV4/package.json @@ -2,11 +2,13 @@ "name": "google-play-release-v4", "version": "1.0.0", "dependencies": { + "@types/jsdom": "16.2.15", "@types/mocha": "^9.0.0", "@types/node": "^16.11.39", "azure-pipelines-task-lib": "^4.1.0", "glob": "^7.1.7", - "googleapis": "^90.0.0" + "googleapis": "^90.0.0", + "jsdom": "16.7.0" }, "devDependencies": { "typescript": "4.0.2" diff --git a/Tasks/GooglePlayReleaseV4/task.json b/Tasks/GooglePlayReleaseV4/task.json index 4c606207..2235ec95 100644 --- a/Tasks/GooglePlayReleaseV4/task.json +++ b/Tasks/GooglePlayReleaseV4/task.json @@ -14,7 +14,7 @@ "demands": [], "version": { "Major": "4", - "Minor": "216", + "Minor": "217", "Patch": "0" }, "minimumAgentVersion": "2.182.1", @@ -163,6 +163,14 @@ "helpMarkDown": "An IETF language tag identifying the language of the release notes as specified in the BCP-47 document. Default value is _en-US_", "visibleRule": "shouldAttachMetadata = false" }, + { + "name": "releaseNotesContainLanguageTags", + "label": "Release notes contain language tags", + "defaultValue": false, + "type": "boolean", + "helpMarkDown": "Select this option if the release notes file contains language tags.", + "visibleRule": "shouldAttachMetadata = false" + }, { "name": "metadataRootPath", "label": "Metadata root directory", diff --git a/Tasks/GooglePlayReleaseV4/task.loc.json b/Tasks/GooglePlayReleaseV4/task.loc.json index 6f271e9b..73ef543d 100644 --- a/Tasks/GooglePlayReleaseV4/task.loc.json +++ b/Tasks/GooglePlayReleaseV4/task.loc.json @@ -14,7 +14,7 @@ "demands": [], "version": { "Major": "4", - "Minor": "216", + "Minor": "217", "Patch": "0" }, "minimumAgentVersion": "2.182.1", @@ -163,6 +163,14 @@ "helpMarkDown": "ms-resource:loc.input.help.languageCode", "visibleRule": "shouldAttachMetadata = false" }, + { + "name": "releaseNotesContainLanguageTags", + "label": "ms-resource:loc.input.label.releaseNotesContainLanguageTags", + "defaultValue": false, + "type": "boolean", + "helpMarkDown": "ms-resource:loc.input.help.releaseNotesContainLanguageTags", + "visibleRule": "shouldAttachMetadata = false" + }, { "name": "metadataRootPath", "label": "ms-resource:loc.input.label.metadataRootPath", @@ -355,4 +363,4 @@ "allowed": [] } } -} +} \ No newline at end of file diff --git a/images/releaseNotesContainLanguageTags-is-false.png b/images/releaseNotesContainLanguageTags-is-false.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee097fdc8192122a1ae80e96a2e804d01a58593 GIT binary patch literal 12068 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 literal 0 HcmV?d00001 diff --git a/images/releaseNotesContainLanguageTags-is-true.png b/images/releaseNotesContainLanguageTags-is-true.png new file mode 100644 index 0000000000000000000000000000000000000000..ce34b81d39ec70d3c6b537da8e0627ad95f99d82 GIT binary patch literal 13386 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 literal 0 HcmV?d00001 diff --git a/images/releaseNotesContainLanguageTags.png b/images/releaseNotesContainLanguageTags.png new file mode 100644 index 0000000000000000000000000000000000000000..d71dcfc5c5f4f73bd7605bf8cc3be04330636035 GIT binary patch literal 6881 zcmbVRcQ9PmSB?%cUE_sqQWo=U= z^2iNA?(FQ)>GZ9wO*;MWf=CFGMx$+SZ|&{v9$jl|tGl~9EiKIp3kxeND;padI0$l% zIyW^nNuf}tr>Bt++~nj$WMt&}I<2#_lLmrIOG`sTgT1}IRO;+52=+6;#eFae8jv^CqI0AWReWSg-t-Gts zy?B_2#VNj0#9@ixMAO`NGd@XVtv9su0K}Ipn|IThu!9vLxDzhT@872SkAY7ON^(F@ z&5ii3X^-3VyM?^qN>f^>1BqKVXkf&yYOF0~6BqAs0$lZw zecP1BlDC0i+r{1nkUmXa*aRC&25WMknk4ks0=GqF%YTo9tK@~>rS_qzuY!A*%kn!@ zvM$<`hNidQfAS{OUKf`~{(T4vD|^|B%4`2s^Cw6NW}d)>?N`<`iqggr3CO4cGPxLs zB;**qQrw-NuXGnoEpIn4|Bf?5whzzm4%8#foKY2vpCdcS#ZfqI@z?IT;Bq?`VbqzB z3xNnm*(icL1KnlCRr$>g2{FN4TS!U4@VZ%$Q7JF_>Z6>jyeM)W1as{L!Ct_eP!F-s zr4{2qM!lz``q)n#Ez7nN1b2sX#UbKIQ6$*@m#ye)976D~cCfR494wAPYDWnnEuxCS zsNyIh7WvsP%RIe{*teA0GH?DNG$*}$>}M{tcC#w|XFb7uezr&UQ+-rk`)51Ay?K3p zme%v#-28h_`xhig%N<*wlR+X0WsA6;!C#su5|Pz$4LF!X4=B|La_)yI)YUs5jNg_FJ(9&&TNqOvBu`$pRf-PAa> z_B&!iX^js%?X2g+}E@z?fL=gHWJ{`*ReY4bP*_b6^joC?pxY`n_VAOhsW~+S3N%rJcZT2AF6DGZhR$z z+{%UP9J@SM{4&iAC-a8~=<^$5Mo@25DPDOxPPnZnq)qBn2gxAMEf=eLhLhJdbHa1? zJ}_AX@3bA4%2Ld-Aga2**mg6dj-ZQuexk6{;7c(25V|Aw)S4&y+`T3IX_DtQ{+D!K zFWPGB_&PSYqtHn7-06?)LKjZfwrdrkE}!_gudk`#9o>Vxvn7Sn6jhN>Zk3VkNyu8ZFpa5+n-=7d4K zN0sZ|WGwb=8qn&nm3>)XmoQll6CM0bhC|qX8oEA9iNuB(`$E-gGIWoNfUm4AU9|aX zU_G32&d2UHO-!9NC(XFeQCGV!J9Fm)4+&NS7o9J2;2#imU(9gIMw#l-n$4?VRPKK^I$!J6&$Y;my zp;O0F!pi8SJnkKY%>tZ*hg7NX;qW9Yd(X(~yQZEMRrKe}hIw3HN3~~~hJ{?#yC)#x zf$*(ND^KBkAmt_nLgaF+U)u^o3|17!%G^-!M#=5arDIkkyZ3ri{Jb-UjK!!WmXJ$Z zVw_i?^z$lZuSx%IAG9XOqLdIsY85mnYK|ZoRZ(g?qKu1NmhZ7Xg$-Bm^6qJcJKvKO z6rF{or0$f-3w1u!b~U5i9JukZ>bd=PAgA(hZ)R;f$CiX4hQs#93L{rB3+6oUk)^AE z)2ac9*>YauJZ;x+cAqExWWaeyz|OTEP`0*k2j0XE6O0n9jhHwB0G1uba)bgH?Z1J- zTd*C?jfMdl0m=#-QFZxy58s=*Cj8lQ+b+$CI-xr*#Uh_m!3IlV zf2}@@0?I2xC0?9=pn@O$(OAi-OY<6r(Zy>9%Q0}keOub)Qn=-MUdRKpLw^dNqmIw&iRwwBamJ$rEN}YO zj^5a}!)RIKwk6k&i@Mc;BfFX0k?o2>(C+=)-Kp`;B`@D9of>o zS`i$nSR@%t+3{&a%iKS!LX9UlmMV`t12;e6awyo?^o!%LvGVD(jmnL@YYM}UYR((& z=~q-R_!W&7B#RzsW<>*-Y6VZLs4db%US*^Gud%BabB5mI>NZkzow3E!8HnfS$s*?S z@80ffM!lR-HP0|KfMWA&d*a7+BCe>rR7`0&1lRB>xse~uytFbYsowhXq3d0O9DJ|% z7n%)7oP39mMeDeaEh-!Duj;+(I}C<*EI{2mjW(8NoD2K$3b(2c?+&vLXVY0G^E~(P zW{-HMhO~s2XUDWK*UP-B>;lMQhZ}7XpfA40&1yvIz0KCi3$Ze}RVy(=x<>nT_9!3h zHhH|z@K8US;{ARzGgddRnz~bCc=5snRR7Scu6Ir9(qYZtsQBMtunMP=;$M`9m2JpP zL0vC+B#K5$mD~Y(1`CZ_rH`P*@t>9dkGl=2iJ>X;@#LQ9@n{lCOTpB+4{@{V%Krr8 z5kUX-i~x4(Z#rZDPvMByFG$w2o13@t_X-jBQy@SbW8mZzvGVo9F42mc)n*~a=ZEbTBbYWZOK18X`6~Z-fyA{FQl9B0w+!tt z@SQk&(_jS_@}j9)(BA{wr%Xyu_6Rh<@Q@Uo!QyoMQv}HY{ld`>tivEyzY2 z1C&QE7cAg~JQ}8N3?*d7#yC}ICP3ll$u86q6hC|*X9j0kIh~_G+ycBUI~@a_WtOx= zItmod9O$TITnYZr^t9@Um**nFnR1|0%#~|f{Z?OaAVD-YG`7TNX9K%JOoJw8jHTyZ zVp9z+vC>!lwH1a)#Y>@u-4Zw99w&mtpKkW0->|!*pqq@>_HK-|MVhBodUigq^?#h~gpIx}e=1{$qnDfq2|KijT z3rPs&C}@%LzOpJ_!qjc1o34}RxtU5@H)(scDD2m-lawQmU!b2&CN&x!!RT+U`6q`Q z$*zBGRu%vo-m=)TW2~CHS`j1XC;x}gKHt9chvpGBdUhQA4>kQ$rTvSBFg-n-UGSyB&e`TXn5fShWkJz%S~_A#mgK65Vt_Q%*y-@Efh>hc+ecb6W4p9ma&da|74( zzCWZ1k)ihtH!dZ{VYMK@_r)~1)6r#!`?>pg&t={(S*1#0GFk{Big04w<*mxJ9I-2W zFe!SPnzU$$vdJdmkL_krL~)EgmvdkDY2c?uL|WA={|3Qq87?4Ru7*JNCww{`3s?Qv zFcm6a#juc=Nla15Rj}WiKZg*`5<(GE#hlJZcvdSs|F`b^R~Pgw^bj-@5S%o zWwtm3bQveQ4Ufq8-#z=k`MITf2WHWd$iQE{2mK5m9smTF2SOtTiPLRU3U)*9$u@G; z&g!x-wxK-X%`PVjUAOB8C;S*)}R@BD7W+AVd~0ru2*?*^%AKqm!aB zYRR3X*Z~A^Z-?FM8AJmRtntn{ulLh33Lcw;@i8i3(`xSJT(vK2&U?l89mgC*_t-VV zR-(r|B#2RR4ZGd+6uXQFxnEj>>Dw4QdQYni0rT)a9w7dP<4&E_!E|ESXX;coW#oMHms$OmNz!N-8Jx!;G?v!+Ufn+m40K@luGe$E!_c$9;~9kzZ)Kqlk_e;qRmpG>y5*+m|if1F?q4OQ36H|M`PnTv?HTIk1%@1CuD+CAXKbu@r_EmKuYCj4){dpsMT#a@?@kV)(*d9Nyx zlb{b$6CH1j`22CP8C0;B=2p7ttmljv_x*EfZt`@{g#Y8~oiT^=TOyCGx#NwrIm|F| zvEiAC3uJ*L?8-OhbH5__#-_rx-fW*TWg85Yw+yiFfZ2N{J5sJXo5OunxCCPeSZC?- zPev@G9knOLUbgM;gYo&(X_P(E{h)+|8it8qq1yN?=Ae$bu{Y=%&$A|vDWxUB^bnf# znX~C@?J6*1*y@>!D!vMfSY=NSta9mRr}xc0FOm$ymAN8EV$Kn)zch%@CyRahGp!PPc$< zyO73+LSt_dQvgZI{`_q8{{B~v0HyN^v?XJ6*^19YQrxDGI=)^ zlN|X+d`$KKR4WERYLui4(re$JSLqbcdq7@p?U>u?@)}`m@y7%lQdfl9JkpA9khX99 zDiS<3gOMbQSSMm9k@>jgqPsh@s2hl)NPDw~@bBX?x1uNB-q_VIIu6V#l$t!Ok%#e* zuzvD(4Q00Q9p~d#Ra2;A-{<$^>IxD4qv;r!qaOyYMO&DPD z&4xB9%2m#J=3`Zdx!?QBUFfY3`4t$L3PbwR;sl2j(j>1!)qoAPNNTj10R_tYWgVvV zTIC^?*F+aUMO(i@zi|Vc5^t#{P|vm;-VremtG{$_(gF}wi$p#97Tk<}gFV~&^2s(z zyYVJ6If+(euuZ$+ZNxcbawl3FYO0@g#`L z1jaqSGUbA@GB=4F=Y_hC5WSDqFm+x*YciuRC%$6^Xby@k6iK@~vT1y$XILxZU2Z@l zZBsyKkv_T%G468+ZntwppQ1ZJc6)EcNJIV^nJ=Adv}D7 z4k72hACnHJCQ0B{J`hknGd@Er#gHeX($e07c{KYRjH3uCl{Uf@V12LPliI5tqth-G zt{V{hTB{c1M2o0b7|d;RY1wXNw0C16wsAvwK(90+iI%)#gB{ZVf~L#-vOJw03y#d$ z^xC_wcB0ANLDNw0y7)B#QD5qL%8<01mFrck+M@vLhlnf(0!qrQpe`u?y$_1bj}#;~ zP;@euUp$6I<$#I1mgCKvt+7n**)`ie_8K^$vGPjPj(e@3V47NWPq=9wExBoN!pSLP z>wN|XT@7VHyg))bKL-ru8n2aWQvAh5ty;e8sN^gX&c&a6UVXk~cT-|)eZ`IpeFEq+ zEY(B&F`IJb0-nxK864+s<8!Y!aq!}|srndK*BDrX`G6i)APo1T1(s0WUqX1idi6lg zRqcWp_@MgMV63uSrLkizx3LS6jN zW?e{5Vy;Cr_3LCMcOS@`MR2?ox6u z6h@-v8UXJuom%-Ui;tOaUC|=x_+9G8O>iAsIF)nCL&nn8zNUjf7u>D9DGr~LSax;r z`Hf>)%nztcqZ)}!ESfnf;U8!`&hT=!7PxVDa9Z8CWz6W}s*_3FOF}KKk^fWhOFJ=q zyzbjM$F}w!61zwN9w8RBUEWnCU1dy~{*eWc^6?eRM~{ny)Q_TjbMKp}4ELlm5mJZ&iJb&=ee(>I>JudHHEv>4x>99B-ghGb(U3Hk8Ub6nRC^U{3Qf0^J> z%&&7rw+S(8BPMbzOBMy{t1GodcwByC^0>pwFN+(vtelr!cuGY-`m4$dFK@?di}YUd zoLKbdAC_~k|H?(5+;-d7cix+E&Jc4tPIM1*bGGm94_k7Wfx;ybNe*Gujje6hCe>$m znVWu!BXk@)4bmz8eb+yt*e|TO@E?!jh~!Uq9aj&x$md{1M4JpA^MgecToH`&gP8^k zFtltVN`fbtrn%PxAN+OOE#?#vlWYA-Hi7Gx*0K0%Mb3;=sO_fxInpmrwT2(|dId#y zN6X`SOdQ@^H%;;L1oVL|acy0to{; zImNn*2lxSw$D|wU1;BX)P3Rem=clBPWlLS#D@=YVnUY>-sC4yr=9CU$`~R0x9j%_C+k(6&pxK%+#y+$IDO5 zn2XIQtqhlTZ9mHUC67>0k-O5G{Suuk_GnWIVtlAOs8ALZT!)^1=yszdSrz^w?MEVv zkhZQ3h_q@cx``kt8UHk)0kFcK2@aXC*aoQ{$WiAx0u<% z@6xJBIKe>=@Wcw!N;cEuWJts4gU4;d?#Ev;&LAor8&5UM-t2k3Yp@L zt?mfu9*b>XO|ZvXi!vX|-$-*rdp0j)w$lUsP{E{wx_i9L2(s)Q=7NwWS~8zSiBi92 zg_{wK_PnH0Xt|2!wq6ZkITM(E&XrT0J!2H}RL)(yu~urD5i>a!ds!wyz=17g&d`xJ zWUWZa0#jloXZ5MF)&Jl4>6Can&LzbOB{cGj=&rp6A7<<>s5=&`TT>ox# zOquV1f|EjrPr|%VTR+d+@xN>3)3IdxvG4Ut%~zyrHGs6v!o1{ojpNzriS{=U&_n4* zkNF0CK3mb2+)I}xv{1wNUjUh?+FK$LM0I=SCKE=b)zl;=!jQrK)GL&|nkKaE!tNLq z2}!!P?(t^s`>&0d;RcuNUCA(PPJQwjQ%xv^jnHaNm1>2 J?$fv4{{>MeY7PJZ literal 0 HcmV?d00001 diff --git a/vsts-extension-google-play.json b/vsts-extension-google-play.json index 6e1a88b2..cf396d7a 100644 --- a/vsts-extension-google-play.json +++ b/vsts-extension-google-play.json @@ -2,7 +2,7 @@ "manifestVersion": 1.0, "id": "google-play", "name": "Google Play", - "version": "4.216.0", + "version": "4.217.0", "publisher": "ms-vsclient", "description": "Provides tasks for continuous delivery to the Google Play Store from TFS/Team Services build or release definitions", "categories": [