From b5c0f3964efba576b61edcc1eee153a5434d0f25 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 17:52:34 -0700 Subject: [PATCH 01/83] update rush.json with the new package --- rush.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rush.json b/rush.json index d606823eb675..b5bbce3b3d31 100644 --- a/rush.json +++ b/rush.json @@ -386,6 +386,10 @@ "packageName": "@azure/template", "projectFolder": "sdk/template/template" }, + { + "packageName": "@azure/test-utils-recorder", + "projectFolder": "sdk/test-utils/recorder" + }, { "packageName": "testhub", "projectFolder": "sdk/eventhub/testhub" From a29370daa4cdcfb1bd35f2fc8fdca9c9a51cdf73 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 17:54:16 -0700 Subject: [PATCH 02/83] porting the latest Guidelines from feature/storage --- sdk/test-utils/recorder/GUIDELINES.md | 195 ++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 sdk/test-utils/recorder/GUIDELINES.md diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md new file mode 100644 index 000000000000..d5188e42e8a3 --- /dev/null +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -0,0 +1,195 @@ +# GUIDELINES FOR RECORD AND PLAYBACK + +## NOCK [for node tests] + +- [nock](https://www.npmjs.com/package/nock)-package is being used to test modules that perform HTTP requests. +- To mock an existing live system, we record and playback the HTTP calls using `nock.recorder`. +- Recording relies on intercepting real requests and responses and then persisting them for later use. + +--- + +## NISE [for browser tests] + +- Nock has no support for browsers. For them, we're using [nise](https://www.npmjs.com/package/nise). +- Nise works in a way similar to Nock, intercepting HTTP requests and mocking responses. +- Unlike Nock, Nise does not have a native record/playback feature. +- Some Nise functions are being overwritten to enable record and playback. +- Added new Karma plugins to access the disk and write/read recording files ([karma-json-to-file-reporter](https://www.npmjs.com/package/karma-json-to-file-reporter) to write and [karma-json-preprocessor](https://www.npmjs.com/package/karma-json-preprocessor) to read). + +--- + +## Setup for record and playback + +**New env variable for recordings - TEST_MODE** [Supposed to be added in the `.env` file to be able to do record and playback] + +- If TEST_MODE = "record", + - Tests hit the live-service + - Nock/Nise are used for recording the request-responses for future use + - If recordings are already present, forces re-recording +- Else If TEST_MODE = "playback", + - Existing recordings are used +- Else + - Tests hit the live-service, we don't record the requests/responses + +--- + +## Skipped tests + +- Some tests are skipped because record and playback do not work properly when running them. +- The reasons for skipping every test are listed in the code [ `test/utils/recorder.ts` ] . Possible reasons for skipping a test: + + - **Abort:** browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) + - **Character:** there are characters in the message that are not supported in browser logging or in ECMAScript + - **Progress:** Nock does not record a request if it's aborted in a 'progress' callback + - **Size:** the generated recording file is too big and would considerably increase the size of the package + - **Tempfile:** the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information + - **UUID:** a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it + +- We leverage mocha's `.skip()` functionality to skip the test + `this.skip()` - https://mochajs.org/#inclusive-tests + By this, the tests in the skip list will only be executed if the `TEST_MODE` is neither `"record"` nor `"playback"`. + +--- + +## Recordings + +- Recordings are being saved in one folder for each describe-block test suite + recording file structure + - `recordings/node//recording_.js` for node tests and + - `recordings/browsers//recording_.json` for browser tests. +- The file name of the recording for a test preserves the title of the `describe`-block and the corresponding `it`-block (with special characters appropriated). The recordings for browser tests go into the `./recordings/browsers/` folder(Similarly, node recordings in the `./recordings/node/` folder). + + For example + + ```typescript + describe("Aborter", () => { + it("should abort when abort() is called", async () => { + ... + ... + }); + }); + ``` + + (Browser Test) Recording corresponding to the above test is placed at + `./recordings/browsers/aborter/recording_should_abort_when_abort_is_called.json` + + [ Following this rule - `./recordings/browsers//recording_.json` ] + +- Just like the test recordings, we save the requests and responses from the before and after sections of the describe block in - `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. +- In node recordings(Nock), the query parameters are being skipped and only the SAS Token query parameters are being skipped in browser recordings(Nise). +- ENV Variables - As an additional layer of security, any potential secrets in the recordings are replaced with dummy values. In case of storage-packages, `ACCOUNT_NAME` is replaced with "fakestorageaccount", secret part of `ACCOUNT_SAS` and `ACCOUNT_KEY` are replaced with "aaaaa". These dummy values are used as the secrets during the playback mode. + +--- + +## Updating an existing test/test-suite + +- Recordings are saved in `./recordings/` folder. +- If a test is modified, we might need to record it again in order to equip the recording to accommodate any updates in the function calls that invoke http requests. + + - execute the test/test-suite script(or all the tests) by setting the env variable `TEST_MODE = record` + +- If only the test title is updated, + + - we can either execute that specific test again to generate the recording + + or + + - we can just update the file name of the recording accordingly + +- **Commit** the generated recordings. + +--- + +## Adding a new test/test-suite + +- Any function call that affects http requests or generates [unique information](#UniqueInfo) that is not in the `it`-block and belongs to a `describe`-block must go in one of the `beforeEach`, `afterEach`, `before` or `after` sections. + +- Recordings corresponding to `before` or `after` sections are saved under `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. + +- Recordings corresponding to `beforeEach` or `afterEach` sections are saved along with the test recordings(`recordings/{node|browsers}//recording_.{js|json}`). + +- Follow the below template for adding any new test. `before` and `after` sections are optional, `beforeEach` and `afterEach` sections are compulsory. + + ```typescript + import { record } from "./utils/recorder"; + + describe("", () => { + // before section is optional + before(async function() { + recorder = record(this); + /*Place your code here*/ + recorder.stop(); + }); + + // after section is optional + after(async function() { + recorder = record(this); + /*Place your code here*/ + recorder.stop(); + }); + + beforeEach(async function() { + recorder = record(this); + /*Place your code here*/ + }); + + afterEach(async () => { + /*Place your code here*/ + recorder.stop(); + }); + + it("", async () => { + /*Place your code here*/ + }); + }); + ``` + +- **Saving randomly generated information/unique info of a test run. Example - `getUniqueName` in storage-queue** + + - Before Record and Playback, `getUniqueName` was being imported from `utils` in the `.spec.ts` test files. `getUniqueName` generates a new value each time we run. + + - Retaining that unique value is crucial in order to replay the http request during `"playback"` mode, which also implies that any unique information related to the test must be saved in order to replay the http requests. + + - When `recorder.stop();` is called for a test, we save that unique information corresponding to the test run along with the test recording. + + - During `playback` mode, the saved unique information must be pulled out from the existing recording in order to replay the http requests. + + For the case of `getUniqueName`, to keep things clean in the `spec.ts` files, we have moved the `getUniqueName` into the `recorder.ts`. + i.e., a wrapper is added around `getUniqueName` in `recorder.ts` which takes care of the `TEST_MODE` + + - if `TEST_MODE` = `"record"`, `recorder.getUniqueName()` will work the same as the usual `getUniqueName()`. + - if `TEST_MODE` = `"playback"`, `recorder.getUniqueName()` will pull out the value from existing recording. + + [Same is the case with `newDate` function] + + - Any unique information of the test run that is important for playing back the http request must be saved along with the recordings in the record mode. + +- If a new test/test-suite is added, execute the test/test-suite(or all the tests) by setting the env variable `TEST_MODE = record` and **commit** the generated recording files. + +- If the new test is supposed to skipped, it must be added in the skip list as described in the earlier section. Doing this would allow the tests in the skip list to be executed only if the `TEST_MODE` is neither `"record"` nor `"playback"`. + +- Importing the `delay` from recorder.ts + - This `delay` has no effect if the `TEST_MODE` is `"playback"`. + - `delay` works as expected(`await delay()`) if the `TEST_MODE` is not `"playback"`. + +--- + +## Note - `console.log()` for browser tests + +- In browser, once the content to be recorded is ready, recordings are supposed to be sent to the appropriate karma reporter in order to generate the corresponding recording file. The way of doing this is by printing the recordings to `console.log()`. As a result, the console gets filled with lots of prints while recording. +- To avoid the issue, we have currently disabled `console.log()` in karma.conf.js (karma configuration) for storage packages in `"record"` mode. + + ```javascript + browserConsoleLogOptions: { + // IMPORTANT: Comment the following line if you want to print debug logs in your browsers in record mode!! + terminal: process.env.TEST_MODE !== "record"; + } + ``` + +- In `record` mode, comment the above specified line in `karma.conf.js` to enable `console.log()` in browsers. + +--- + +## References + +- https://github.com/Azure/azure-sdk-for-js/pull/2227 From e63ec63620b963f5dab7effc0a2aa1ce202e5330 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 17:54:53 -0700 Subject: [PATCH 03/83] porting the latest guidelines from feature/storage branch --- sdk/test-utils/recorder/GUIDELINES.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index d5188e42e8a3..596107d8c909 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -177,16 +177,19 @@ ## Note - `console.log()` for browser tests - In browser, once the content to be recorded is ready, recordings are supposed to be sent to the appropriate karma reporter in order to generate the corresponding recording file. The way of doing this is by printing the recordings to `console.log()`. As a result, the console gets filled with lots of prints while recording. -- To avoid the issue, we have currently disabled `console.log()` in karma.conf.js (karma configuration) for storage packages in `"record"` mode. +- To avert the issue, we came up with the following solution. - ```javascript - browserConsoleLogOptions: { - // IMPORTANT: Comment the following line if you want to print debug logs in your browsers in record mode!! - terminal: process.env.TEST_MODE !== "record"; - } - ``` + - Convert the content corresponding to any console statement into (JSON.stringify)-ed content in record mode for browser tests. + [Add a custom console.log() which converts all the console statements into console.log() with stringified JSON objects.] + - Filter the console.logs with stringified JSON objects in karma.conf.js as explained below. + + Karma.conf.js -- In `record` mode, comment the above specified line in `karma.conf.js` to enable `console.log()` in browsers. + - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. + - Console logs with `.writeFile` property are captured and are written to a file(as test recordings). + - Any other console statements are captured and printed normally. + - Example - console.warn("hello"); -> console.log({ warn: "hello" }); + - Example - console.log("hello"); -> console.log({ log: "hello" }); --- From 253679cad6c4501fb4131aa8f48d4a83828883ca Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 17:55:51 -0700 Subject: [PATCH 04/83] add readme - test utils - Record and Playback --- sdk/test-utils/recorder/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sdk/test-utils/recorder/README.md diff --git a/sdk/test-utils/recorder/README.md b/sdk/test-utils/recorder/README.md new file mode 100644 index 000000000000..cb45b6d71e0d --- /dev/null +++ b/sdk/test-utils/recorder/README.md @@ -0,0 +1,7 @@ +## Test Utils - Record and Playback + +This library provides interfaces and helper methods to equip the sdks in the azure-sdk-for-js repo with the recording and playback capabilities for the tests, it targets HTTP requests in both Node.js and the Browsers. + +As a "test-utils" library, it is supposed to be added only as a devDependency and should be used only for the tests of an sdk. + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js/sdk/test-utils/recorder/README.png) From 84a15731fcedd8ff728b2b7695881ce629bd3284 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 18:04:04 -0700 Subject: [PATCH 05/83] Add disclaimer - mocha and karma --- sdk/test-utils/recorder/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/test-utils/recorder/README.md b/sdk/test-utils/recorder/README.md index cb45b6d71e0d..8ad88a86848c 100644 --- a/sdk/test-utils/recorder/README.md +++ b/sdk/test-utils/recorder/README.md @@ -4,4 +4,6 @@ This library provides interfaces and helper methods to equip the sdks in the azu As a "test-utils" library, it is supposed to be added only as a devDependency and should be used only for the tests of an sdk. +This library assumes that the tests rely on mocha test framework(and karma test runner for browser tests). + ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js/sdk/test-utils/recorder/README.png) From 5396927a6ce832fd0f18269939db46f746646baa Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 19:22:58 -0700 Subject: [PATCH 06/83] removed the dependency of core-http --- sdk/test-utils/recorder/src/recorder.ts | 504 ++++++++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 sdk/test-utils/recorder/src/recorder.ts diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts new file mode 100644 index 000000000000..61957d129739 --- /dev/null +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -0,0 +1,504 @@ +import fs from "fs-extra"; +import nise from "nise"; +import queryString from "query-string"; +import { getUniqueName, isBrowser } from "../utils"; +import { blobToString } from "./index.browser"; +import * as dotenv from "dotenv"; +dotenv.config({ path: "../.env" }); + +let nock: any; +if (!isBrowser()) { + if (process.env.TEST_MODE === "record" || process.env.TEST_MODE === "playback") { + nock = require("nock"); + } +} else if ((window as any).__env__.TEST_MODE === "record") { + // Converting content corresponding to all the console statements + // into (JSON.stringify)-ed content in record mode for browser tests. + // + // In browser, once the content to be recorded is ready, recordings + // are supposed to be sent to the appropriate karma reporter(jsonToFileReporter) + // in order to generate the corresponding recording file. + // The way to do this is by printing the recordings as JSON strings to `console.log()`. + // As a result, the console gets filled with lots of prints while recording. + // + // We solve this issue by + // - disabling the console.logs from karma and + // - by adding a custom console.log() which converts all the console statements into + // console.log() with stringified JSON objects. + // - Handle all the console.logs with stringified JSON objects in karma.conf.js + // as explained below. + // + // Karma.conf.js + // - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. + // - Console logs with `.writeFile` property are captured and are written to a file(recordings). + // - The other console statements are captured and printed normally. + // - Example - console.warn("hello"); -> console.log({ warn: "hello" }); + // - Example - console.log("hello"); -> console.log({ log: "hello" }); + const consoleLog = window.console.log; + for (const method in window.console) { + if ( + window.console.hasOwnProperty(method) && + typeof (window.console as any)[method] === "function" + ) { + (window.console as any)[method] = function(obj: any) { + try { + if (!JSON.parse(obj).writeFile) { + // If the JSON string doesn't contain `.writeFile` property, + // we wrap the object as a JSON object and apply JSON.stringify() + // Example - console.warn("hello"); -> console.log({ warn: "hello" }); + const newObj: any = {}; + newObj[method] = obj; + consoleLog(JSON.stringify(newObj)); + } else { + // If the JSON strings contain `.writeFile` property, + // use the console.log as it is. + consoleLog(obj); + } + } catch (error) { + // If the object is not a JSON string, the try block fails and + // we wrap the object as a JSON object and apply JSON.stringify() + // (same as the if block in try) + const newObj: any = {}; + newObj[method] = obj; + consoleLog(JSON.stringify(newObj)); + } + }; + } + } +} + +const env = isBrowser() ? (window as any).__env__ : process.env; +const isRecording = env.TEST_MODE === "record"; +const isPlayingBack = env.TEST_MODE === "playback"; + +if (isPlayingBack) { + // Providing dummy values to avoid the error + env.ACCOUNT_NAME = "fakestorageaccount"; + env.ACCOUNT_KEY = "aaaaa"; + env.ACCOUNT_SAS = "aaaaa"; + env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ + env.ACCOUNT_NAME + };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; +} + +/** + * A wrapper for setTimeout that resolves a promise after t milliseconds. + * @param {number} t The number of milliseconds to be delayed. + * @param {T} value The value to be resolved with after a timeout of t milliseconds. + * @returns {Promise} Resolved promise + */ +function restDelay(t: number, value?: T): Promise { + return new Promise((resolve) => setTimeout(() => resolve(value), t)); +} + +/** + * Usage - `await delay()` + * This `delay` has no effect if the `TEST_MODE` is `"playback"`. + * If the `TEST_MODE` is not `"playback"`, `delay` is a wrapper for setTimeout that resolves a promise after t milliseconds. + * + * @param {number} t The number of milliseconds to be delayed. + * @param {T} value The value to be resolved with after a timeout of t milliseconds. + * @returns {Promise} Resolved promise + */ +export function delay(milliseconds: number): Promise | null { + return isPlayingBack ? null : restDelay(milliseconds); +} + +/** + * Possible reasons for skipping a test: + * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) + * * Character: there are characters in the message that are not supported in browser logging or in ECMAScript + * * Progress: Nock does not record a request if it's aborted in a 'progress' callback + * * Size: the generated recording file is too big and would considerably increase the size of the package + * * Tempfile: the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information + * * UUID: a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it + */ +const skip = [ + // Abort + "browsers/aborter/recording_should_abort_after_aborter_timeout.json", + // Abort + "browsers/aborter/recording_should_abort_after_parent_aborter_calls_abort.json", + // Abort + "browsers/aborter/recording_should_abort_after_parent_aborter_timeout.json", + // Abort + "browsers/aborter/recording_should_abort_when_calling_abort_before_request_finishes.json", + // Character + "browsers/messagesurl/recording_enqueue_peek_dequeue_special_characters.json" +]; + +abstract class Recorder { + protected readonly filepath: string; + public uniqueTestInfo: any = {}; + + constructor(env: string, testHierarchy: string, testTitle: string, ext: string) { + this.filepath = + env + + "/" + + this.formatPath(testHierarchy) + + "/recording_" + + this.formatPath(testTitle) + + "." + + ext; + } + + protected formatPath(path: string): string { + return path + .toLowerCase() + .replace(/ /g, "_") + .replace(/<=/g, "lte") + .replace(/>=/g, "gte") + .replace(//g, "gt") + .replace(/=/g, "eq") + .replace(/\W/g, ""); + } + + /** + * Additional layer of security to avoid unintended/accidental occurrences of secrets in the recordings + * */ + protected filterSecrets(recording: string): string { + let updatedRecording = recording.replace( + new RegExp(env.ACCOUNT_NAME, "g"), + "fakestorageaccount" + ); + if (env.ACCOUNT_KEY) { + updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); + } + if (env.ACCOUNT_SAS) { + updatedRecording = updatedRecording.replace( + new RegExp(env.ACCOUNT_SAS.match("(.*)&sig=(.*)")[2], "g"), + "aaaaa" + ); + } + return updatedRecording; + } + + public skip(): boolean { + return skip.includes(this.filepath); + } + + public abstract record(): void; + public abstract playback(): void; + public abstract stop(): void; +} + +class NockRecorder extends Recorder { + constructor(testHierarchy: string, testTitle: string) { + super("node", testHierarchy, testTitle, "js"); + } + + public record(): void { + nock.recorder.rec({ + dont_print: true + }); + } + + public playback(): void { + this.uniqueTestInfo = require("../recordings/" + this.filepath).testInfo; + } + + public stop(): void { + const importNock = "let nock = require('nock');\n"; + const fixtures = nock.recorder.play(); + + // Create the directories recursively incase they don't exist + try { + // Stripping away the filename from the filepath and retaining the directory structure + fs.ensureDirSync( + "./recordings/" + this.filepath.substring(0, this.filepath.lastIndexOf("/") + 1) + ); + } catch (err) { + if (err.code !== "EEXIST") throw err; + } + + const file = fs.createWriteStream("./recordings/" + this.filepath, { + flags: "w" + }); + + // Some tests expect errors to happen and, if a writing error is thrown in one of these tests, it may be captured in a catch block by accident, + // resulting in unexpected behavior. For this reason we're printing it to the console as well + file.on("error", (err: any) => { + console.log(err); + throw err; + }); + + file.write( + importNock + "\n" + "module.exports.testInfo = " + JSON.stringify(this.uniqueTestInfo) + "\n" + ); + + for (const fixture of fixtures) { + // We're not matching query string parameters because they may contain sensitive information, and Nock does not allow us to customize it easily + const updatedFixture = fixture.replace(/\.query\(.*\)/, ".query(true)"); + file.write(this.filterSecrets(updatedFixture) + "\n"); + } + + file.end(); + + nock.recorder.clear(); + nock.restore(); + } +} + +// To better understand how this class works, it's necessary to comprehend how HTTP async requests are made: +// A new request object is created +// let req = new XMLHttpRequest(); +// The request is opened with some important information +// req.open(method, url, async, user, password); +// Since we're dealing with an async request, we must set a way to know when the response is ready +// req.onreadystatechange = function() { +// if (req.readyState === 4) do_something; +// } +// Finally, the request is sent to the server +// req.send(data); + +// Nise module does not have a native implementation of record/playback like Nock does +// This class overrides requests' 'open', 'send' and 'onreadystatechange' functions, adding our own code to them to deal with requests +class NiseRecorder extends Recorder { + private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; + private recordings: any[] = []; + + constructor(testHierarchy: string, testTitle: string) { + super("browsers", testHierarchy, testTitle, "json"); + } + + // Inserts a request/response pair into the recordings array + private async recordRequest(request: any, data: any): Promise { + const responseHeaders: any = {}; + const responseHeadersPairs = request.getAllResponseHeaders().split("\r\n"); + for (const pair of responseHeadersPairs) { + const [key, value] = pair.split(": "); + responseHeaders[key] = value; + } + + // We're not storing SAS Query Parameters because they may contain sensitive information + // We're ignoring the "_" parameter as well because it's not being added by our code + // More info on "_": https://stackoverflow.com/questions/3687729/who-add-single-underscore-query-parameter + const parsedUrl = queryString.parseUrl(request.url); + const query: any = {}; + for (const param in parsedUrl.query) { + if (!this.sasQueryParameters.includes(param) && param !== "_") { + query[param] = parsedUrl.query[param]; + } + } + + this.recordings.push({ + method: request.method, + url: parsedUrl.url, + query: query, + requestBody: data instanceof Blob ? await blobToString(data) : data, + status: request.status, + response: + request.response instanceof Blob ? await blobToString(request.response) : request.response, + responseHeaders: responseHeaders + }); + } + + // Checks whether a recording matches a request or not (we're not matching request headers) + private matchRequest(recording: any, request: any): boolean { + // Every parameter in the recording must be present and have the same value in the request + for (const param in recording.query) { + if (recording.query[param] !== request.query[param]) { + return false; + } + } + + // There shouldn't be parameters in the request that are not present in the recording (except for SAS Query Parameters and "_") + for (const param in request.query) { + if ( + recording.query[param] === undefined && + !this.sasQueryParameters.includes(param) && + param !== "_" + ) { + return false; + } + } + + return ( + recording.method === request.method && + recording.url === request.url && + recording.requestBody === request.requestBody + ); + } + + // When recording, we want to hit the server and intercept requests/responses + // Nise does not allow us to intercept requests if they're sent to the server, so we need to override its behavior + public record(): void { + const self = this; + const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); + + // The following filter allows every request to be sent to the server without being mocked + xhr.useFilters = true; + xhr.addFilter(() => true); + + // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created + // Our intent is to override the request's 'onreadystatechange' function so we can create a recording once the response is ready + // We can only override 'onreadystatechange' AFTER the 'send' function is called because we need to make sure our implementation won't be overriden by the client + // But we can only override 'send' AFTER the 'open' function is called because the filter we set above makes Nise override it in 'open' body + xhr.onCreate = function(req: any) { + // We'll override the 'open' function, so we need to store a handle to its original implementation + const reqOpen = req.open; + req.open = function() { + // Here we are calling the original 'open' function to make sure everything is set up correctly (HTTP method, url, filters) + reqOpen.apply(req, arguments); + + // We'll override the 'send' function, so we need to store a handle to its original implementation + // We can already override it because we know 'open' has already been called + const reqSend = req.send; + req.send = function(data: any) { + // We'll override the 'onreadystatechange' function, so we need to store a handle to its original implementation + // Now we can finally override 'onreadystatechange' because 'send' has already been called + const reqStateChange = req.onreadystatechange; + req.onreadystatechange = function() { + // Record the request once the response is obtained + if (req.readyState === 4) { + self.recordRequest(req, data); + } + // Sometimes the client doesn't implement an 'onreadystatechange' function, so we need to make sure it exists before calling the original implementation + if (reqStateChange) { + reqStateChange.apply(null, arguments); + } + }; + + // Now that we have overriden 'onreadystatechange', we can send the request to the server + reqSend.apply(req, arguments); + }; + }; + }; + } + + // When playing back, we want to intercept requests, find a corresponding match in our recordings and respond to it with the recorded data + // We must override the request's 'send' function because all the request information (body, url, method, queries) will be ready when it's called + public playback(): void { + const self = this; + const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); + + // 'karma-json-preprocessor' helps us to retrieve recordings + this.recordings = (window as any).__json__["recordings/" + this.filepath].recordings; + this.uniqueTestInfo = (window as any).__json__["recordings/" + this.filepath].uniqueTestInfo; + + // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created + xhr.onCreate = function(req: any) { + // We'll override the 'send' function, so we need to store a handle to its original implementation + const reqSend = req.send; + req.send = async function(data: any) { + // Here we're calling the original send method. Nise will make the request wait for a mock response that we'll send later + reqSend.call(req, data); + + // formattedRequest contains all the necessary information to look for a match in our recordings + const parsedUrl = queryString.parseUrl(req.url); + const formattedRequest = { + method: req.method, + url: parsedUrl.url, + query: parsedUrl.query, + requestBody: data instanceof Blob ? await blobToString(data) : data + }; + + // We look through our recordings to find a match to the current request + // If we find a match, we remove it from the recordings list so we don't match it again by accident + let recordingFound = false; + for (let i = 0; !recordingFound && i < self.recordings.length; i++) { + if (self.matchRequest(self.recordings[i], formattedRequest)) { + const status = self.recordings[i].status; + const responseHeaders = self.recordings[i].responseHeaders; + const response = self.recordings[i].response; + + // We are dealing with async requests so we're responding to them asynchronously + setTimeout(() => req.respond(status, responseHeaders, response)); + self.recordings.splice(i, 1); + recordingFound = true; + } + } + + // If we can't find a match, we throw an error + // Some tests expect errors to happen and, if a matching error is thrown in one of these tests, it may be captured in a catch block by accident, + // resulting in unexpected behavior. For this reason we're printing it to the console as well + if (!recordingFound) { + const err = new Error( + "No match for request " + JSON.stringify(formattedRequest, null, " ") + ); + console.log(err); + throw err; + } + }; + }; + } + + public stop(): void { + // We're sending the recordings to the 'karma-json-to-file-reporter' via console.log + console.log( + this.filterSecrets( + JSON.stringify({ + writeFile: true, + path: "./recordings/" + this.filepath, + content: { recordings: this.recordings, uniqueTestInfo: this.uniqueTestInfo } + }) + ) + ); + } +} + +export function record(testContext: any) { + let recorder: Recorder; + let testHierarchy: string; + let testTitle: string; + + if (testContext.currentTest) { + testHierarchy = testContext.currentTest.parent.fullTitle(); + testTitle = testContext.currentTest.title; + } else { + testHierarchy = testContext.test.parent.fullTitle(); + testTitle = testContext.test.title; + } + + if (isBrowser()) { + recorder = new NiseRecorder(testHierarchy, testTitle); + } else { + recorder = new NockRecorder(testHierarchy, testTitle); + } + + if (recorder.skip() && (isRecording || isPlayingBack)) { + testContext.skip(); + } + + // If neither recording nor playback is enabled, requests hit the live-service and no recordings are generated + if (isRecording) { + recorder.record(); + } else if (isPlayingBack) { + recorder.playback(); + } + + return { + stop: function() { + if (isRecording) { + recorder.stop(); + } + }, + getUniqueName: function(prefix: string, recorderId?: string): string { + let name: string; + if (!recorderId) { + recorderId = prefix; + } + if (isRecording) { + name = getUniqueName(prefix); + recorder.uniqueTestInfo[recorderId] = name; + } else if (isPlayingBack) { + name = recorder.uniqueTestInfo[recorderId]; + } else { + name = getUniqueName(prefix); + } + return name; + }, + newDate: function(recorderId: string): Date { + let date: Date; + if (isRecording) { + date = new Date(); + recorder.uniqueTestInfo[recorderId] = date.toISOString(); + } else if (isPlayingBack) { + date = new Date(recorder.uniqueTestInfo[recorderId]); + } else { + date = new Date(); + } + return date; + } + }; +} From 4a9269b42331bf04531092e0134943d7318d2794 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 19:49:07 -0700 Subject: [PATCH 07/83] remove storage utils dependency --- sdk/test-utils/recorder/src/recorder.ts | 55 ++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index 61957d129739..38f0d191ec98 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,11 +1,51 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; -import { getUniqueName, isBrowser } from "../utils"; -import { blobToString } from "./index.browser"; import * as dotenv from "dotenv"; dotenv.config({ path: "../.env" }); +/** + * String.prototype.padStart() + * + * @export + * @param {string} currentString + * @param {number} targetLength + * @param {string} [padString=" "] + * @returns {string} + */ +export function padStart( + currentString: string, + targetLength: number, + padString: string = " " +): string { + if (String.prototype.padStart) { + return currentString.padStart(targetLength, padString); + } + + padString = padString || " "; + if (currentString.length > targetLength) { + return currentString; + } else { + targetLength = targetLength - currentString.length; + if (targetLength > padString.length) { + padString += padString.repeat(targetLength / padString.length); + } + return padString.slice(0, targetLength) + currentString; + } +} + +function getUniqueName(prefix: string): string { + return `${prefix}${new Date().getTime()}${padStart( + Math.floor(Math.random() * 10000).toString(), + 5, + "00000" + )}`; +} + +function isBrowser(): boolean { + return typeof window !== "undefined"; +} + let nock: any; if (!isBrowser()) { if (process.env.TEST_MODE === "record" || process.env.TEST_MODE === "playback") { @@ -104,6 +144,17 @@ export function delay(milliseconds: number): Promise | null { return isPlayingBack ? null : restDelay(milliseconds); } +async function blobToString(blob: Blob): Promise { + const fileReader = new FileReader(); + return new Promise((resolve, reject) => { + fileReader.onloadend = (ev: any) => { + resolve(ev.target!.result); + }; + fileReader.onerror = reject; + fileReader.readAsText(blob); + }); +} + /** * Possible reasons for skipping a test: * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) From 404e8f26bd92cfc460dbadb68d2f0286bf056547 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 19:51:41 -0700 Subject: [PATCH 08/83] add package.json --- sdk/test-utils/recorder/package.json | 68 ++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 sdk/test-utils/recorder/package.json diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json new file mode 100644 index 000000000000..32e69c287f04 --- /dev/null +++ b/sdk/test-utils/recorder/package.json @@ -0,0 +1,68 @@ +{ + "name": "@azure/test-utils-recorder", + "version": "1.0.0", + "description": "This library provides interfaces and helper methods to provide recording and playback capabilities for the tests in Azure JS/TS SDKs", + "main": "dist/index.js", + "module": "dist-esm/src/index.js", + "types": "./typings/src/index.d.ts", + "scripts": { + "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", + "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", + "build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1", + "build:samples": "cd samples && tsc -p .", + "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1", + "build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local", + "check-format": "prettier --list-different --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "clean": "rimraf dist dist-esm test-dist types *.tgz *.log", + "extract-api": "tsc -p . && api-extractor run --local", + "format": "prettier --write --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "integration-test:browser": "echo skipped", + "integration-test:node": "echo skipped", + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" -c ../../.eslintrc.json --fix --fix-type [problem,suggestion]", + "lint": "eslint -c ../../.eslintrc.json src test --ext .ts -f node_modules/eslint-detailed-reporter/lib/detailed.js -o template-lintReport.html || exit 0", + "pack": "npm pack 2>&1", + "prebuild": "npm run clean", + "test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser", + "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node", + "test": "npm run build:test && npm run unit-test && npm run integration-test", + "unit-test:browser": "echo skipped", + "unit-test:node": "mocha test-dist/**/*.js --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=-", + "unit-test": "npm run unit-test:node && npm run unit-test:browser" + }, + "files": [ + "browser/*.js*", + "dist/", + "dist-esm/src/", + "src/", + "typings/src" + ], + "repository": "github:Azure/azure-sdk-for-js", + "keywords": [ + "azure", + "recording", + "playback" + ], + "author": "Microsoft Corporation", + "license": "MIT", + "bugs": { + "url": "https://github.com/azure/azure-sdk-for-js/issues" + }, + "engine": { + "node": ">=6.0.0" + }, + "homepage": "https://github.com/azure/azure-sdk-for-js/tree/master/sdk/test-utils/recorder", + "sideEffects": false, + "private": true, + "dependencies": { + "@types/dotenv": "^6.1.0", + "@types/fs-extra": "~7.0.0", + "@types/nise": "^1.4.0", + "@types/query-string": "6.2.0", + "dotenv": "^7.0.0", + "fs-extra": "~8.0.1", + "nise": "^1.4.10", + "query-string": "^5.0.0", + "tslib": "^1.9.3" + } +} From 979c1446ca2eab1819c35f52ed3bf8fbdd6a2ea7 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 19:56:18 -0700 Subject: [PATCH 09/83] cherry picked commit from feature/storage branch --- common/config/rush/pnpm-lock.yaml | 57 ++++++++++++++------------ sdk/storage/storage-blob/package.json | 3 +- sdk/storage/storage-file/package.json | 3 +- sdk/storage/storage-queue/package.json | 3 +- 4 files changed, 36 insertions(+), 30 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index a3378d356c5e..70624d4b41fc 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -48,6 +48,7 @@ dependencies: '@types/node': 8.10.50 '@types/priorityqueuejs': 1.0.1 '@types/qs': 6.5.3 + '@types/query-string': 6.2.0 '@types/semaphore': 1.1.0 '@types/semver': 5.5.0 '@types/sinon': 5.0.7 @@ -124,7 +125,7 @@ dependencies: mocha-multi: 1.1.0 mocha-multi-reporters: 1.1.7 moment: 2.24.0 - ms-rest: 2.5.2 + ms-rest: 2.5.3 ms-rest-azure: 2.6.0 nise: 1.5.0 nock: 10.0.6 @@ -138,7 +139,7 @@ dependencies: promise: 8.0.3 puppeteer: 1.18.1 qs: 6.7.0 - query-string: 6.8.1 + query-string: 5.1.1 requirejs: 2.3.6 rhea: 1.0.8 rhea-promise: 0.1.15 @@ -652,6 +653,10 @@ packages: dev: false resolution: integrity: sha512-Jugo5V/1bS0fRhy2z8+cUAHEyWOATaz4rbyLVvcFs7+dXp5HfwpEwzF1Q11bB10ApUqHf+yTauxI0UXQDwGrbA== + /@types/query-string/6.2.0: + dev: false + resolution: + integrity: sha512-dnYqKg7eZ+t7ZhCuBtwLxjqON8yXr27hiu3zXfPqxfJSbWUZNwwISE0BJUxghlcKsk4lZSp7bdFSJBJVNWBfmA== /@types/range-parser/1.2.3: dev: false resolution: @@ -6397,13 +6402,13 @@ packages: adal-node: 0.1.28 async: 2.6.0 moment: 2.24.0 - ms-rest: 2.5.2 + ms-rest: 2.5.3 request: 2.88.0 uuid: 3.3.2 dev: false resolution: integrity: sha512-J6386a9krZ4VtU7CRt+Ypgo9RGf8+d3gjMBkH7zbkM4zzkhbbMOYiPRaZ+bHZcfihkKLlktTgA6rjshTjF329A== - /ms-rest/2.5.2: + /ms-rest/2.5.3: dependencies: duplexer: 0.1.1 is-buffer: 1.1.6 @@ -6415,7 +6420,7 @@ packages: uuid: 3.3.2 dev: false resolution: - integrity: sha512-ZyaAu0IX/TwgjwLbWHRmnzhsoE4IimGVhVW96gI5pHtSjqpnt6woPK/SzMjJTGeF4k1m1p5A5N/vKshyVUGC2Q== + integrity: sha512-p0CnzrTzEkS8UTEwgCqT2O5YVK9E8KGBBlJVm3hFtMZvf0dmncKYXWFPyUa4PAsfBL7h4jfu39tOIFTu6exntg== /ms/2.0.0: dev: false resolution: @@ -7408,16 +7413,16 @@ packages: node: '>=0.6' resolution: integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - /query-string/6.8.1: + /query-string/5.1.1: dependencies: decode-uri-component: 0.2.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 dev: false engines: - node: '>=6' + node: '>=0.10.0' resolution: - integrity: sha512-g6y0Lbq10a5pPQpjlFuojfMfV1Pd2Jw9h75ypiYPPia3Gcq2rgkKiIwbkS6JxH7c5f5u/B/sB+d13PU+g1eu4Q== + integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== /querystring-es3/0.2.1: dev: false engines: @@ -8513,12 +8518,6 @@ packages: dev: false resolution: integrity: sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - /split-on-first/1.1.0: - dev: false - engines: - node: '>=6' - resolution: - integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== /split-string/3.1.0: dependencies: extend-shallow: 3.0.2 @@ -8628,12 +8627,12 @@ packages: node: '>=6.0' resolution: integrity: sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw== - /strict-uri-encode/2.0.0: + /strict-uri-encode/1.1.0: dev: false engines: - node: '>=4' + node: '>=0.10.0' resolution: - integrity: sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= /string-width/1.0.2: dependencies: code-point-at: 1.1.0 @@ -10720,6 +10719,7 @@ packages: '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/node': 8.10.50 + '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 @@ -10758,7 +10758,7 @@ packages: nyc: 14.1.1 prettier: 1.18.2 puppeteer: 1.18.1 - query-string: 6.8.1 + query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.16.7 rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 @@ -10777,7 +10777,7 @@ packages: dev: false name: '@rush-temp/storage-blob' resolution: - integrity: sha512-FWF0lybU1bBKGD4N1ttleRCkCMnGE0mgZwApgHWOTubHF/zzmBOY9OgVhgS7Bk6J+8vcaIUp/jfwAKEmJ0OIgA== + integrity: sha512-GN9dJLmBjN9/yKq4HFq2nJ9sTh+F7bFEhsbZXOreWSYotiyVBo9HbqxjCj9GHlWcyYcQ3JtXt2CEggqmZgV/JA== tarball: 'file:projects/storage-blob.tgz' version: 0.0.0 'file:projects/storage-file.tgz': @@ -10790,6 +10790,7 @@ packages: '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/node': 8.10.50 + '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 @@ -10828,7 +10829,7 @@ packages: nyc: 14.1.1 prettier: 1.18.2 puppeteer: 1.18.1 - query-string: 6.8.1 + query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.16.7 rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 @@ -10847,7 +10848,7 @@ packages: dev: false name: '@rush-temp/storage-file' resolution: - integrity: sha512-jVoPzB0EQPblf83PxurtdUXk4DBwoih8HRUSsi3FgVyP0ONWbbgW/yaZYEeMSxwXTNmrzNW4paKXLf/FgOdiJA== + integrity: sha512-IRqfOeXpG7XSL5GrT4zL3mvy2ZzCeCICSmo3Tj6V6h9eEHHnWwqcfd7FZR1sYVvAn+nN4NhFph3ptdrSW1hSmg== tarball: 'file:projects/storage-file.tgz' version: 0.0.0 'file:projects/storage-queue.tgz': @@ -10860,6 +10861,7 @@ packages: '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/node': 8.10.50 + '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 @@ -10897,7 +10899,7 @@ packages: nyc: 14.1.1 prettier: 1.18.2 puppeteer: 1.18.1 - query-string: 6.8.1 + query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.16.7 rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 @@ -10916,7 +10918,7 @@ packages: dev: false name: '@rush-temp/storage-queue' resolution: - integrity: sha512-zgZeae63buyC+CgrzepqiRIz3HoDzWLT95FZ36cnoxg70L/MNxZ3lA0Hh4f7LudMDiSaVWw0WiMOci4cnu0ZAg== + integrity: sha512-mWuY5OZImZ9GGy7h2otuIgonajJJHiVfWXPqWB5mD/YArcWtFLqw8ozB3ZaRZrE7FQ6C9xR3jpeHwO3jA9jhlw== tarball: 'file:projects/storage-queue.tgz' version: 0.0.0 'file:projects/template.tgz': @@ -10971,7 +10973,7 @@ packages: debug: 3.2.6 is-buffer: 2.0.3 jssha: 2.3.1 - ms-rest: 2.5.2 + ms-rest: 2.5.3 ms-rest-azure: 2.6.0 rhea: 1.0.8 rimraf: 2.6.3 @@ -11036,6 +11038,7 @@ specifiers: '@types/node': ^8.0.0 '@types/priorityqueuejs': ^1.0.1 '@types/qs': ~6.5.3 + '@types/query-string': 6.2.0 '@types/semaphore': ^1.1.0 '@types/semver': ^5.5.0 '@types/sinon': ^5.0.5 @@ -11126,7 +11129,7 @@ specifiers: promise: ^8.0.3 puppeteer: ^1.11.0 qs: 6.7.0 - query-string: ^6.5.0 + query-string: ^5.0.0 requirejs: ^2.3.5 rhea: ^1.0.4 rhea-promise: ^0.1.15 diff --git a/sdk/storage/storage-blob/package.json b/sdk/storage/storage-blob/package.json index 0b797fd1ed5b..c44a09792b0f 100644 --- a/sdk/storage/storage-blob/package.json +++ b/sdk/storage/storage-blob/package.json @@ -86,6 +86,7 @@ "@types/nise": "^1.4.0", "@types/nock": "^10.0.1", "@types/node": "^8.0.0", + "@types/query-string": "6.2.0", "@typescript-eslint/eslint-plugin": "^1.11.0", "@typescript-eslint/parser": "^1.11.0", "assert": "^1.4.1", @@ -123,7 +124,7 @@ "nyc": "^14.0.0", "prettier": "^1.16.4", "puppeteer": "^1.11.0", - "query-string": "^6.5.0", + "query-string": "^5.0.0", "rimraf": "^2.6.2", "rollup": "^1.16.3", "rollup-plugin-commonjs": "^10.0.0", diff --git a/sdk/storage/storage-file/package.json b/sdk/storage/storage-file/package.json index 4584a713f657..d330f5eede30 100644 --- a/sdk/storage/storage-file/package.json +++ b/sdk/storage/storage-file/package.json @@ -86,6 +86,7 @@ "@types/nise": "^1.4.0", "@types/nock": "^10.0.1", "@types/node": "^8.0.0", + "@types/query-string": "6.2.0", "@typescript-eslint/eslint-plugin": "^1.11.0", "@typescript-eslint/parser": "^1.11.0", "assert": "^1.4.1", @@ -123,7 +124,7 @@ "nyc": "^14.0.0", "prettier": "^1.16.4", "puppeteer": "^1.11.0", - "query-string": "^6.5.0", + "query-string": "^5.0.0", "rimraf": "^2.6.2", "rollup": "^1.16.3", "rollup-plugin-commonjs": "^10.0.0", diff --git a/sdk/storage/storage-queue/package.json b/sdk/storage/storage-queue/package.json index 16417d4febae..d17b30139914 100644 --- a/sdk/storage/storage-queue/package.json +++ b/sdk/storage/storage-queue/package.json @@ -84,6 +84,7 @@ "@types/nise": "^1.4.0", "@types/nock": "^10.0.1", "@types/node": "^8.0.0", + "@types/query-string": "6.2.0", "@typescript-eslint/eslint-plugin": "^1.11.0", "@typescript-eslint/parser": "^1.11.0", "assert": "^1.4.1", @@ -121,7 +122,7 @@ "nyc": "^14.0.0", "prettier": "^1.16.4", "puppeteer": "^1.11.0", - "query-string": "^6.5.0", + "query-string": "^5.0.0", "rimraf": "^2.6.2", "rollup": "^1.16.3", "rollup-plugin-commonjs": "^10.0.0", From b727686296511f4509aa9b80d68262534a3c79d5 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 20:00:11 -0700 Subject: [PATCH 10/83] pnpm-lock updated --- common/config/rush/pnpm-lock.yaml | 32 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 70624d4b41fc..010ffa34dc56 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -26,6 +26,7 @@ dependencies: '@rush-temp/storage-file': 'file:projects/storage-file.tgz' '@rush-temp/storage-queue': 'file:projects/storage-queue.tgz' '@rush-temp/template': 'file:projects/template.tgz' + '@rush-temp/test-utils-recorder': 'file:projects/test-utils-recorder.tgz' '@rush-temp/testhub': 'file:projects/testhub.tgz' '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 @@ -8033,17 +8034,6 @@ packages: rollup: '>=0.66.0 <2' resolution: integrity: sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== - /rollup-plugin-uglify/6.0.2_rollup@1.16.6: - dependencies: - '@babel/code-frame': 7.0.0 - jest-worker: 24.6.0 - serialize-javascript: 1.7.0 - uglify-js: 3.6.0 - dev: false - peerDependencies: - rollup: '>=0.66.0 <2' - resolution: - integrity: sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== /rollup-plugin-uglify/6.0.2_rollup@1.16.7: dependencies: '@babel/code-frame': 7.0.0 @@ -10510,7 +10500,7 @@ packages: rollup-plugin-replace: 2.2.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 rollup-plugin-terser: 5.1.1_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.6 + rollup-plugin-uglify: 6.0.2_rollup@1.16.7 rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 tslib: 1.10.0 typescript: 3.5.3 @@ -10962,6 +10952,23 @@ packages: integrity: sha512-p4x160RdYLlW5VjMpev7fMKCtQoXJ8VFTzHASa7PWeYp41D7G9L7uWUO6PRYysglX5Vm9WuZZpsDmfg+ccVKmQ== tarball: 'file:projects/template.tgz' version: 0.0.0 + 'file:projects/test-utils-recorder.tgz': + dependencies: + '@types/dotenv': 6.1.1 + '@types/fs-extra': 7.0.0 + '@types/nise': 1.4.0 + '@types/query-string': 6.2.0 + dotenv: 7.0.0 + fs-extra: 8.0.1 + nise: 1.5.0 + query-string: 5.1.1 + tslib: 1.10.0 + dev: false + name: '@rush-temp/test-utils-recorder' + resolution: + integrity: sha512-hhOZDPUk6HF1+6LPd7bViOhniso6akqVufw/VjbE1jWb3X58GxQXr4dh2gARHJANqiVTaYwCJaZBmLbt6COJLA== + tarball: 'file:projects/test-utils-recorder.tgz' + version: 0.0.0 'file:projects/testhub.tgz': dependencies: '@azure/event-hubs': 1.0.8 @@ -11016,6 +11023,7 @@ specifiers: '@rush-temp/storage-file': 'file:./projects/storage-file.tgz' '@rush-temp/storage-queue': 'file:./projects/storage-queue.tgz' '@rush-temp/template': 'file:./projects/template.tgz' + '@rush-temp/test-utils-recorder': 'file:./projects/test-utils-recorder.tgz' '@rush-temp/testhub': 'file:./projects/testhub.tgz' '@types/async-lock': ^1.1.0 '@types/chai': ^4.1.6 From e4ffd2e40b43fc3b6589e4200a9060d1190deecb Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 10 Jul 2019 20:24:14 -0700 Subject: [PATCH 11/83] simplify recorder.ts with utils.ts --- sdk/test-utils/recorder/src/recorder.ts | 64 +------------------------ sdk/test-utils/recorder/src/utils.ts | 57 ++++++++++++++++++++++ 2 files changed, 58 insertions(+), 63 deletions(-) create mode 100644 sdk/test-utils/recorder/src/utils.ts diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index 38f0d191ec98..2a88da14f70f 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -2,50 +2,9 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; import * as dotenv from "dotenv"; +import { getUniqueName, isBrowser, blobToString, restDelay } from "./utils"; dotenv.config({ path: "../.env" }); -/** - * String.prototype.padStart() - * - * @export - * @param {string} currentString - * @param {number} targetLength - * @param {string} [padString=" "] - * @returns {string} - */ -export function padStart( - currentString: string, - targetLength: number, - padString: string = " " -): string { - if (String.prototype.padStart) { - return currentString.padStart(targetLength, padString); - } - - padString = padString || " "; - if (currentString.length > targetLength) { - return currentString; - } else { - targetLength = targetLength - currentString.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); - } - return padString.slice(0, targetLength) + currentString; - } -} - -function getUniqueName(prefix: string): string { - return `${prefix}${new Date().getTime()}${padStart( - Math.floor(Math.random() * 10000).toString(), - 5, - "00000" - )}`; -} - -function isBrowser(): boolean { - return typeof window !== "undefined"; -} - let nock: any; if (!isBrowser()) { if (process.env.TEST_MODE === "record" || process.env.TEST_MODE === "playback") { @@ -121,16 +80,6 @@ if (isPlayingBack) { };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; } -/** - * A wrapper for setTimeout that resolves a promise after t milliseconds. - * @param {number} t The number of milliseconds to be delayed. - * @param {T} value The value to be resolved with after a timeout of t milliseconds. - * @returns {Promise} Resolved promise - */ -function restDelay(t: number, value?: T): Promise { - return new Promise((resolve) => setTimeout(() => resolve(value), t)); -} - /** * Usage - `await delay()` * This `delay` has no effect if the `TEST_MODE` is `"playback"`. @@ -144,17 +93,6 @@ export function delay(milliseconds: number): Promise | null { return isPlayingBack ? null : restDelay(milliseconds); } -async function blobToString(blob: Blob): Promise { - const fileReader = new FileReader(); - return new Promise((resolve, reject) => { - fileReader.onloadend = (ev: any) => { - resolve(ev.target!.result); - }; - fileReader.onerror = reject; - fileReader.readAsText(blob); - }); -} - /** * Possible reasons for skipping a test: * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts new file mode 100644 index 000000000000..7d3dba9216cb --- /dev/null +++ b/sdk/test-utils/recorder/src/utils.ts @@ -0,0 +1,57 @@ +/** + * A wrapper for setTimeout that resolves a promise after t milliseconds. + * @param {number} t The number of milliseconds to be delayed. + * @param {T} value The value to be resolved with after a timeout of t milliseconds. + * @returns {Promise} Resolved promise + */ +export function restDelay(t: number, value?: T): Promise { + return new Promise((resolve) => setTimeout(() => resolve(value), t)); +} + +export async function blobToString(blob: Blob): Promise { + const fileReader = new FileReader(); + return new Promise((resolve, reject) => { + fileReader.onloadend = (ev: any) => { + resolve(ev.target!.result); + }; + fileReader.onerror = reject; + fileReader.readAsText(blob); + }); +} + +/** + * String.prototype.padStart() + * + * @param {string} currentString + * @param {number} targetLength + * @param {string} [padString=" "] + * @returns {string} + */ +function padStart(currentString: string, targetLength: number, padString: string = " "): string { + if (String.prototype.padStart) { + return currentString.padStart(targetLength, padString); + } + + padString = padString || " "; + if (currentString.length > targetLength) { + return currentString; + } else { + targetLength = targetLength - currentString.length; + if (targetLength > padString.length) { + padString += padString.repeat(targetLength / padString.length); + } + return padString.slice(0, targetLength) + currentString; + } +} + +export function getUniqueName(prefix: string): string { + return `${prefix}${new Date().getTime()}${padStart( + Math.floor(Math.random() * 10000).toString(), + 5, + "00000" + )}`; +} + +export function isBrowser(): boolean { + return typeof window !== "undefined"; +} From b8958f315c24df0e02172ec5be7e982389b3cd72 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 13:56:58 -0700 Subject: [PATCH 12/83] removed dotenv --- sdk/test-utils/recorder/package.json | 2 -- sdk/test-utils/recorder/src/recorder.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index 32e69c287f04..e173601b2e34 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -55,11 +55,9 @@ "sideEffects": false, "private": true, "dependencies": { - "@types/dotenv": "^6.1.0", "@types/fs-extra": "~7.0.0", "@types/nise": "^1.4.0", "@types/query-string": "6.2.0", - "dotenv": "^7.0.0", "fs-extra": "~8.0.1", "nise": "^1.4.10", "query-string": "^5.0.0", diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index 2a88da14f70f..ca9574e45a17 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,9 +1,7 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; -import * as dotenv from "dotenv"; import { getUniqueName, isBrowser, blobToString, restDelay } from "./utils"; -dotenv.config({ path: "../.env" }); let nock: any; if (!isBrowser()) { From e6b3f108d9bd96601f5a2cce5f4dc95c68212e4f Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 14:26:18 -0700 Subject: [PATCH 13/83] Improved delay module --- sdk/test-utils/recorder/src/delay.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sdk/test-utils/recorder/src/delay.ts diff --git a/sdk/test-utils/recorder/src/delay.ts b/sdk/test-utils/recorder/src/delay.ts new file mode 100644 index 000000000000..a0d75961321f --- /dev/null +++ b/sdk/test-utils/recorder/src/delay.ts @@ -0,0 +1,15 @@ +import { isBrowser } from "./utils"; +const env = isBrowser() ? (window as any).__env__ : process.env; +const isPlayingBack = env.TEST_MODE === "playback"; + +/** + * Usage - `await delay()` + * This `delay` has no effect if the `TEST_MODE` is `"playback"`. + * If the `TEST_MODE` is not `"playback"`, `delay` is a wrapper for setTimeout that resolves a promise after t milliseconds. + * + * @param {number} milliseconds The number of milliseconds to be delayed. + * @returns {Promise} Resolved promise + */ +export function delay(milliseconds: number): Promise | null { + return isPlayingBack ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); +} From 0639d0190c450d0a4c6021bda2006be5bf1753f0 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 14:27:07 -0700 Subject: [PATCH 14/83] remove delay from utils.ts file --- sdk/test-utils/recorder/src/utils.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 7d3dba9216cb..4d0d2ed2d7e0 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -1,13 +1,3 @@ -/** - * A wrapper for setTimeout that resolves a promise after t milliseconds. - * @param {number} t The number of milliseconds to be delayed. - * @param {T} value The value to be resolved with after a timeout of t milliseconds. - * @returns {Promise} Resolved promise - */ -export function restDelay(t: number, value?: T): Promise { - return new Promise((resolve) => setTimeout(() => resolve(value), t)); -} - export async function blobToString(blob: Blob): Promise { const fileReader = new FileReader(); return new Promise((resolve, reject) => { From 387cfd88b19a6b596e51d8091da320417a64e98b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 14:27:33 -0700 Subject: [PATCH 15/83] keep only the final recorder module in recorder.ts --- sdk/test-utils/recorder/src/recorder.ts | 423 +----------------------- 1 file changed, 2 insertions(+), 421 deletions(-) diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index ca9574e45a17..a52e28abb35e 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,429 +1,10 @@ -import fs from "fs-extra"; -import nise from "nise"; -import queryString from "query-string"; -import { getUniqueName, isBrowser, blobToString, restDelay } from "./utils"; - -let nock: any; -if (!isBrowser()) { - if (process.env.TEST_MODE === "record" || process.env.TEST_MODE === "playback") { - nock = require("nock"); - } -} else if ((window as any).__env__.TEST_MODE === "record") { - // Converting content corresponding to all the console statements - // into (JSON.stringify)-ed content in record mode for browser tests. - // - // In browser, once the content to be recorded is ready, recordings - // are supposed to be sent to the appropriate karma reporter(jsonToFileReporter) - // in order to generate the corresponding recording file. - // The way to do this is by printing the recordings as JSON strings to `console.log()`. - // As a result, the console gets filled with lots of prints while recording. - // - // We solve this issue by - // - disabling the console.logs from karma and - // - by adding a custom console.log() which converts all the console statements into - // console.log() with stringified JSON objects. - // - Handle all the console.logs with stringified JSON objects in karma.conf.js - // as explained below. - // - // Karma.conf.js - // - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. - // - Console logs with `.writeFile` property are captured and are written to a file(recordings). - // - The other console statements are captured and printed normally. - // - Example - console.warn("hello"); -> console.log({ warn: "hello" }); - // - Example - console.log("hello"); -> console.log({ log: "hello" }); - const consoleLog = window.console.log; - for (const method in window.console) { - if ( - window.console.hasOwnProperty(method) && - typeof (window.console as any)[method] === "function" - ) { - (window.console as any)[method] = function(obj: any) { - try { - if (!JSON.parse(obj).writeFile) { - // If the JSON string doesn't contain `.writeFile` property, - // we wrap the object as a JSON object and apply JSON.stringify() - // Example - console.warn("hello"); -> console.log({ warn: "hello" }); - const newObj: any = {}; - newObj[method] = obj; - consoleLog(JSON.stringify(newObj)); - } else { - // If the JSON strings contain `.writeFile` property, - // use the console.log as it is. - consoleLog(obj); - } - } catch (error) { - // If the object is not a JSON string, the try block fails and - // we wrap the object as a JSON object and apply JSON.stringify() - // (same as the if block in try) - const newObj: any = {}; - newObj[method] = obj; - consoleLog(JSON.stringify(newObj)); - } - }; - } - } -} +import { getUniqueName, isBrowser } from "./utils"; +import { NiseRecorder, NockRecorder, Recorder } from "./baseRecorder"; const env = isBrowser() ? (window as any).__env__ : process.env; const isRecording = env.TEST_MODE === "record"; const isPlayingBack = env.TEST_MODE === "playback"; -if (isPlayingBack) { - // Providing dummy values to avoid the error - env.ACCOUNT_NAME = "fakestorageaccount"; - env.ACCOUNT_KEY = "aaaaa"; - env.ACCOUNT_SAS = "aaaaa"; - env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ - env.ACCOUNT_NAME - };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; -} - -/** - * Usage - `await delay()` - * This `delay` has no effect if the `TEST_MODE` is `"playback"`. - * If the `TEST_MODE` is not `"playback"`, `delay` is a wrapper for setTimeout that resolves a promise after t milliseconds. - * - * @param {number} t The number of milliseconds to be delayed. - * @param {T} value The value to be resolved with after a timeout of t milliseconds. - * @returns {Promise} Resolved promise - */ -export function delay(milliseconds: number): Promise | null { - return isPlayingBack ? null : restDelay(milliseconds); -} - -/** - * Possible reasons for skipping a test: - * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) - * * Character: there are characters in the message that are not supported in browser logging or in ECMAScript - * * Progress: Nock does not record a request if it's aborted in a 'progress' callback - * * Size: the generated recording file is too big and would considerably increase the size of the package - * * Tempfile: the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information - * * UUID: a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it - */ -const skip = [ - // Abort - "browsers/aborter/recording_should_abort_after_aborter_timeout.json", - // Abort - "browsers/aborter/recording_should_abort_after_parent_aborter_calls_abort.json", - // Abort - "browsers/aborter/recording_should_abort_after_parent_aborter_timeout.json", - // Abort - "browsers/aborter/recording_should_abort_when_calling_abort_before_request_finishes.json", - // Character - "browsers/messagesurl/recording_enqueue_peek_dequeue_special_characters.json" -]; - -abstract class Recorder { - protected readonly filepath: string; - public uniqueTestInfo: any = {}; - - constructor(env: string, testHierarchy: string, testTitle: string, ext: string) { - this.filepath = - env + - "/" + - this.formatPath(testHierarchy) + - "/recording_" + - this.formatPath(testTitle) + - "." + - ext; - } - - protected formatPath(path: string): string { - return path - .toLowerCase() - .replace(/ /g, "_") - .replace(/<=/g, "lte") - .replace(/>=/g, "gte") - .replace(//g, "gt") - .replace(/=/g, "eq") - .replace(/\W/g, ""); - } - - /** - * Additional layer of security to avoid unintended/accidental occurrences of secrets in the recordings - * */ - protected filterSecrets(recording: string): string { - let updatedRecording = recording.replace( - new RegExp(env.ACCOUNT_NAME, "g"), - "fakestorageaccount" - ); - if (env.ACCOUNT_KEY) { - updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); - } - if (env.ACCOUNT_SAS) { - updatedRecording = updatedRecording.replace( - new RegExp(env.ACCOUNT_SAS.match("(.*)&sig=(.*)")[2], "g"), - "aaaaa" - ); - } - return updatedRecording; - } - - public skip(): boolean { - return skip.includes(this.filepath); - } - - public abstract record(): void; - public abstract playback(): void; - public abstract stop(): void; -} - -class NockRecorder extends Recorder { - constructor(testHierarchy: string, testTitle: string) { - super("node", testHierarchy, testTitle, "js"); - } - - public record(): void { - nock.recorder.rec({ - dont_print: true - }); - } - - public playback(): void { - this.uniqueTestInfo = require("../recordings/" + this.filepath).testInfo; - } - - public stop(): void { - const importNock = "let nock = require('nock');\n"; - const fixtures = nock.recorder.play(); - - // Create the directories recursively incase they don't exist - try { - // Stripping away the filename from the filepath and retaining the directory structure - fs.ensureDirSync( - "./recordings/" + this.filepath.substring(0, this.filepath.lastIndexOf("/") + 1) - ); - } catch (err) { - if (err.code !== "EEXIST") throw err; - } - - const file = fs.createWriteStream("./recordings/" + this.filepath, { - flags: "w" - }); - - // Some tests expect errors to happen and, if a writing error is thrown in one of these tests, it may be captured in a catch block by accident, - // resulting in unexpected behavior. For this reason we're printing it to the console as well - file.on("error", (err: any) => { - console.log(err); - throw err; - }); - - file.write( - importNock + "\n" + "module.exports.testInfo = " + JSON.stringify(this.uniqueTestInfo) + "\n" - ); - - for (const fixture of fixtures) { - // We're not matching query string parameters because they may contain sensitive information, and Nock does not allow us to customize it easily - const updatedFixture = fixture.replace(/\.query\(.*\)/, ".query(true)"); - file.write(this.filterSecrets(updatedFixture) + "\n"); - } - - file.end(); - - nock.recorder.clear(); - nock.restore(); - } -} - -// To better understand how this class works, it's necessary to comprehend how HTTP async requests are made: -// A new request object is created -// let req = new XMLHttpRequest(); -// The request is opened with some important information -// req.open(method, url, async, user, password); -// Since we're dealing with an async request, we must set a way to know when the response is ready -// req.onreadystatechange = function() { -// if (req.readyState === 4) do_something; -// } -// Finally, the request is sent to the server -// req.send(data); - -// Nise module does not have a native implementation of record/playback like Nock does -// This class overrides requests' 'open', 'send' and 'onreadystatechange' functions, adding our own code to them to deal with requests -class NiseRecorder extends Recorder { - private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; - private recordings: any[] = []; - - constructor(testHierarchy: string, testTitle: string) { - super("browsers", testHierarchy, testTitle, "json"); - } - - // Inserts a request/response pair into the recordings array - private async recordRequest(request: any, data: any): Promise { - const responseHeaders: any = {}; - const responseHeadersPairs = request.getAllResponseHeaders().split("\r\n"); - for (const pair of responseHeadersPairs) { - const [key, value] = pair.split(": "); - responseHeaders[key] = value; - } - - // We're not storing SAS Query Parameters because they may contain sensitive information - // We're ignoring the "_" parameter as well because it's not being added by our code - // More info on "_": https://stackoverflow.com/questions/3687729/who-add-single-underscore-query-parameter - const parsedUrl = queryString.parseUrl(request.url); - const query: any = {}; - for (const param in parsedUrl.query) { - if (!this.sasQueryParameters.includes(param) && param !== "_") { - query[param] = parsedUrl.query[param]; - } - } - - this.recordings.push({ - method: request.method, - url: parsedUrl.url, - query: query, - requestBody: data instanceof Blob ? await blobToString(data) : data, - status: request.status, - response: - request.response instanceof Blob ? await blobToString(request.response) : request.response, - responseHeaders: responseHeaders - }); - } - - // Checks whether a recording matches a request or not (we're not matching request headers) - private matchRequest(recording: any, request: any): boolean { - // Every parameter in the recording must be present and have the same value in the request - for (const param in recording.query) { - if (recording.query[param] !== request.query[param]) { - return false; - } - } - - // There shouldn't be parameters in the request that are not present in the recording (except for SAS Query Parameters and "_") - for (const param in request.query) { - if ( - recording.query[param] === undefined && - !this.sasQueryParameters.includes(param) && - param !== "_" - ) { - return false; - } - } - - return ( - recording.method === request.method && - recording.url === request.url && - recording.requestBody === request.requestBody - ); - } - - // When recording, we want to hit the server and intercept requests/responses - // Nise does not allow us to intercept requests if they're sent to the server, so we need to override its behavior - public record(): void { - const self = this; - const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); - - // The following filter allows every request to be sent to the server without being mocked - xhr.useFilters = true; - xhr.addFilter(() => true); - - // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created - // Our intent is to override the request's 'onreadystatechange' function so we can create a recording once the response is ready - // We can only override 'onreadystatechange' AFTER the 'send' function is called because we need to make sure our implementation won't be overriden by the client - // But we can only override 'send' AFTER the 'open' function is called because the filter we set above makes Nise override it in 'open' body - xhr.onCreate = function(req: any) { - // We'll override the 'open' function, so we need to store a handle to its original implementation - const reqOpen = req.open; - req.open = function() { - // Here we are calling the original 'open' function to make sure everything is set up correctly (HTTP method, url, filters) - reqOpen.apply(req, arguments); - - // We'll override the 'send' function, so we need to store a handle to its original implementation - // We can already override it because we know 'open' has already been called - const reqSend = req.send; - req.send = function(data: any) { - // We'll override the 'onreadystatechange' function, so we need to store a handle to its original implementation - // Now we can finally override 'onreadystatechange' because 'send' has already been called - const reqStateChange = req.onreadystatechange; - req.onreadystatechange = function() { - // Record the request once the response is obtained - if (req.readyState === 4) { - self.recordRequest(req, data); - } - // Sometimes the client doesn't implement an 'onreadystatechange' function, so we need to make sure it exists before calling the original implementation - if (reqStateChange) { - reqStateChange.apply(null, arguments); - } - }; - - // Now that we have overriden 'onreadystatechange', we can send the request to the server - reqSend.apply(req, arguments); - }; - }; - }; - } - - // When playing back, we want to intercept requests, find a corresponding match in our recordings and respond to it with the recorded data - // We must override the request's 'send' function because all the request information (body, url, method, queries) will be ready when it's called - public playback(): void { - const self = this; - const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); - - // 'karma-json-preprocessor' helps us to retrieve recordings - this.recordings = (window as any).__json__["recordings/" + this.filepath].recordings; - this.uniqueTestInfo = (window as any).__json__["recordings/" + this.filepath].uniqueTestInfo; - - // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created - xhr.onCreate = function(req: any) { - // We'll override the 'send' function, so we need to store a handle to its original implementation - const reqSend = req.send; - req.send = async function(data: any) { - // Here we're calling the original send method. Nise will make the request wait for a mock response that we'll send later - reqSend.call(req, data); - - // formattedRequest contains all the necessary information to look for a match in our recordings - const parsedUrl = queryString.parseUrl(req.url); - const formattedRequest = { - method: req.method, - url: parsedUrl.url, - query: parsedUrl.query, - requestBody: data instanceof Blob ? await blobToString(data) : data - }; - - // We look through our recordings to find a match to the current request - // If we find a match, we remove it from the recordings list so we don't match it again by accident - let recordingFound = false; - for (let i = 0; !recordingFound && i < self.recordings.length; i++) { - if (self.matchRequest(self.recordings[i], formattedRequest)) { - const status = self.recordings[i].status; - const responseHeaders = self.recordings[i].responseHeaders; - const response = self.recordings[i].response; - - // We are dealing with async requests so we're responding to them asynchronously - setTimeout(() => req.respond(status, responseHeaders, response)); - self.recordings.splice(i, 1); - recordingFound = true; - } - } - - // If we can't find a match, we throw an error - // Some tests expect errors to happen and, if a matching error is thrown in one of these tests, it may be captured in a catch block by accident, - // resulting in unexpected behavior. For this reason we're printing it to the console as well - if (!recordingFound) { - const err = new Error( - "No match for request " + JSON.stringify(formattedRequest, null, " ") - ); - console.log(err); - throw err; - } - }; - }; - } - - public stop(): void { - // We're sending the recordings to the 'karma-json-to-file-reporter' via console.log - console.log( - this.filterSecrets( - JSON.stringify({ - writeFile: true, - path: "./recordings/" + this.filepath, - content: { recordings: this.recordings, uniqueTestInfo: this.uniqueTestInfo } - }) - ) - ); - } -} - export function record(testContext: any) { let recorder: Recorder; let testHierarchy: string; From 2c74e8a29f70a3b135d85f8d04071c4259e3c11b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 15:03:48 -0700 Subject: [PATCH 16/83] separate customConsoleLog.ts --- .../recorder/src/customConsoleLog.ts | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 sdk/test-utils/recorder/src/customConsoleLog.ts diff --git a/sdk/test-utils/recorder/src/customConsoleLog.ts b/sdk/test-utils/recorder/src/customConsoleLog.ts new file mode 100644 index 000000000000..5657fff41cc1 --- /dev/null +++ b/sdk/test-utils/recorder/src/customConsoleLog.ts @@ -0,0 +1,60 @@ +// Converting content corresponding to all the console statements +// into (JSON.stringify)-ed content in record mode for browser tests. +// +// In browser, once the content to be recorded is ready, recordings +// are supposed to be sent to the appropriate karma reporter(jsonToFileReporter) +// in order to generate the corresponding recording file. +// The way to do this is by printing the recordings as JSON strings to `console.log()`. +// As a result, the console gets filled with lots of prints while recording. +// +// We solve this issue by +// - disabling the console.logs from karma and +// - by adding a custom console.log() which converts all the console statements into +// console.log() with stringified JSON objects. +// - Handle all the console.logs with stringified JSON objects in karma.conf.js +// as explained below. +// +// Karma.conf.js +// - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. +// - Console logs with `.writeFile` property are captured and are written to a file(recordings). +// - The other console statements are captured and printed normally. +// - Example - console.warn("hello"); -> console.log({ warn: "hello" }); +// - Example - console.log("hello"); -> console.log({ log: "hello" }); + +/** + * Converts content corresponding to all the console statements into (JSON.stringify)-ed content in record mode for browser tests. + * This allows filtering certain console.logs to generate the recordings for browser tests. + */ +export function customConsoleLog() { + const consoleLog = window.console.log; + for (const method in window.console) { + if ( + window.console.hasOwnProperty(method) && + typeof (window.console as any)[method] === "function" + ) { + (window.console as any)[method] = function(obj: any) { + try { + if (!JSON.parse(obj).writeFile) { + // If the JSON string doesn't contain `.writeFile` property, + // we wrap the object as a JSON object and apply JSON.stringify() + // Example - console.warn("hello"); -> console.log({ warn: "hello" }); + const newObj: any = {}; + newObj[method] = obj; + consoleLog(JSON.stringify(newObj)); + } else { + // If the JSON strings contain `.writeFile` property, + // use the console.log as it is. + consoleLog(obj); + } + } catch (error) { + // If the object is not a JSON string, the try block fails and + // we wrap the object as a JSON object and apply JSON.stringify() + // (same as the if block in try) + const newObj: any = {}; + newObj[method] = obj; + consoleLog(JSON.stringify(newObj)); + } + }; + } + } +} From 662c70e9174e2a8cdaeaa552e55c05ec3bbdee1e Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 15:04:05 -0700 Subject: [PATCH 17/83] decouple base recorder from recorder --- sdk/test-utils/recorder/src/baseRecorder.ts | 361 ++++++++++++++++++++ 1 file changed, 361 insertions(+) create mode 100644 sdk/test-utils/recorder/src/baseRecorder.ts diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts new file mode 100644 index 000000000000..9d480f9dcd5b --- /dev/null +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -0,0 +1,361 @@ +import fs from "fs-extra"; +import nise from "nise"; +import queryString from "query-string"; +import { isBrowser, blobToString } from "./utils"; +import { customConsoleLog } from "./customConsoleLog"; + +const env = isBrowser() ? (window as any).__env__ : process.env; +const isRecording = env.TEST_MODE === "record"; +const isPlayingBack = env.TEST_MODE === "playback"; + +let nock: any; +if (!isBrowser() && (isRecording || isPlayingBack)) { + nock = require("nock"); +} + +if (isBrowser() && isRecording) { + customConsoleLog(); +} + +if (isPlayingBack) { + // Providing dummy values to avoid the error + env.ACCOUNT_NAME = "fakestorageaccount"; + env.ACCOUNT_KEY = "aaaaa"; + env.ACCOUNT_SAS = "aaaaa"; + env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ + env.ACCOUNT_NAME + };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; +} + +/** + * Possible reasons for skipping a test: + * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) + * * Character: there are characters in the message that are not supported in browser logging or in ECMAScript + * * Progress: Nock does not record a request if it's aborted in a 'progress' callback + * * Size: the generated recording file is too big and would considerably increase the size of the package + * * Tempfile: the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information + * * UUID: a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it + */ +const skip = [ + // Abort + "browsers/aborter/recording_should_abort_after_aborter_timeout.json", + // Abort + "browsers/aborter/recording_should_abort_after_parent_aborter_calls_abort.json", + // Abort + "browsers/aborter/recording_should_abort_after_parent_aborter_timeout.json", + // Abort + "browsers/aborter/recording_should_abort_when_calling_abort_before_request_finishes.json", + // Character + "browsers/messagesurl/recording_enqueue_peek_dequeue_special_characters.json" +]; + +export abstract class Recorder { + protected readonly filepath: string; + public uniqueTestInfo: any = {}; + + constructor(env: string, testHierarchy: string, testTitle: string, ext: string) { + this.filepath = + env + + "/" + + this.formatPath(testHierarchy) + + "/recording_" + + this.formatPath(testTitle) + + "." + + ext; + } + + protected formatPath(path: string): string { + return path + .toLowerCase() + .replace(/ /g, "_") + .replace(/<=/g, "lte") + .replace(/>=/g, "gte") + .replace(//g, "gt") + .replace(/=/g, "eq") + .replace(/\W/g, ""); + } + + /** + * Additional layer of security to avoid unintended/accidental occurrences of secrets in the recordings + * */ + protected filterSecrets(recording: string): string { + let updatedRecording = recording.replace( + new RegExp(env.ACCOUNT_NAME, "g"), + "fakestorageaccount" + ); + if (env.ACCOUNT_KEY) { + updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); + } + if (env.ACCOUNT_SAS) { + updatedRecording = updatedRecording.replace( + new RegExp(env.ACCOUNT_SAS.match("(.*)&sig=(.*)")[2], "g"), + "aaaaa" + ); + } + return updatedRecording; + } + + public skip(): boolean { + return skip.includes(this.filepath); + } + + public abstract record(): void; + public abstract playback(): void; + public abstract stop(): void; +} + +export class NockRecorder extends Recorder { + constructor(testHierarchy: string, testTitle: string) { + super("node", testHierarchy, testTitle, "js"); + } + + public record(): void { + nock.recorder.rec({ + dont_print: true + }); + } + + public playback(): void { + this.uniqueTestInfo = require("../recordings/" + this.filepath).testInfo; + } + + public stop(): void { + const importNock = "let nock = require('nock');\n"; + const fixtures = nock.recorder.play(); + + // Create the directories recursively incase they don't exist + try { + // Stripping away the filename from the filepath and retaining the directory structure + fs.ensureDirSync( + "./recordings/" + this.filepath.substring(0, this.filepath.lastIndexOf("/") + 1) + ); + } catch (err) { + if (err.code !== "EEXIST") throw err; + } + + const file = fs.createWriteStream("./recordings/" + this.filepath, { + flags: "w" + }); + + // Some tests expect errors to happen and, if a writing error is thrown in one of these tests, it may be captured in a catch block by accident, + // resulting in unexpected behavior. For this reason we're printing it to the console as well + file.on("error", (err: any) => { + console.log(err); + throw err; + }); + + file.write( + importNock + "\n" + "module.exports.testInfo = " + JSON.stringify(this.uniqueTestInfo) + "\n" + ); + + for (const fixture of fixtures) { + // We're not matching query string parameters because they may contain sensitive information, and Nock does not allow us to customize it easily + const updatedFixture = fixture.replace(/\.query\(.*\)/, ".query(true)"); + file.write(this.filterSecrets(updatedFixture) + "\n"); + } + + file.end(); + + nock.recorder.clear(); + nock.restore(); + } +} + +// To better understand how this class works, it's necessary to comprehend how HTTP async requests are made: +// A new request object is created +// let req = new XMLHttpRequest(); +// The request is opened with some important information +// req.open(method, url, async, user, password); +// Since we're dealing with an async request, we must set a way to know when the response is ready +// req.onreadystatechange = function() { +// if (req.readyState === 4) do_something; +// } +// Finally, the request is sent to the server +// req.send(data); + +// Nise module does not have a native implementation of record/playback like Nock does +// This class overrides requests' 'open', 'send' and 'onreadystatechange' functions, adding our own code to them to deal with requests +export class NiseRecorder extends Recorder { + private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; + private recordings: any[] = []; + + constructor(testHierarchy: string, testTitle: string) { + super("browsers", testHierarchy, testTitle, "json"); + } + + // Inserts a request/response pair into the recordings array + private async recordRequest(request: any, data: any): Promise { + const responseHeaders: any = {}; + const responseHeadersPairs = request.getAllResponseHeaders().split("\r\n"); + for (const pair of responseHeadersPairs) { + const [key, value] = pair.split(": "); + responseHeaders[key] = value; + } + + // We're not storing SAS Query Parameters because they may contain sensitive information + // We're ignoring the "_" parameter as well because it's not being added by our code + // More info on "_": https://stackoverflow.com/questions/3687729/who-add-single-underscore-query-parameter + const parsedUrl = queryString.parseUrl(request.url); + const query: any = {}; + for (const param in parsedUrl.query) { + if (!this.sasQueryParameters.includes(param) && param !== "_") { + query[param] = parsedUrl.query[param]; + } + } + + this.recordings.push({ + method: request.method, + url: parsedUrl.url, + query: query, + requestBody: data instanceof Blob ? await blobToString(data) : data, + status: request.status, + response: + request.response instanceof Blob ? await blobToString(request.response) : request.response, + responseHeaders: responseHeaders + }); + } + + // Checks whether a recording matches a request or not (we're not matching request headers) + private matchRequest(recording: any, request: any): boolean { + // Every parameter in the recording must be present and have the same value in the request + for (const param in recording.query) { + if (recording.query[param] !== request.query[param]) { + return false; + } + } + + // There shouldn't be parameters in the request that are not present in the recording (except for SAS Query Parameters and "_") + for (const param in request.query) { + if ( + recording.query[param] === undefined && + !this.sasQueryParameters.includes(param) && + param !== "_" + ) { + return false; + } + } + + return ( + recording.method === request.method && + recording.url === request.url && + recording.requestBody === request.requestBody + ); + } + + // When recording, we want to hit the server and intercept requests/responses + // Nise does not allow us to intercept requests if they're sent to the server, so we need to override its behavior + public record(): void { + const self = this; + const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); + + // The following filter allows every request to be sent to the server without being mocked + xhr.useFilters = true; + xhr.addFilter(() => true); + + // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created + // Our intent is to override the request's 'onreadystatechange' function so we can create a recording once the response is ready + // We can only override 'onreadystatechange' AFTER the 'send' function is called because we need to make sure our implementation won't be overriden by the client + // But we can only override 'send' AFTER the 'open' function is called because the filter we set above makes Nise override it in 'open' body + xhr.onCreate = function(req: any) { + // We'll override the 'open' function, so we need to store a handle to its original implementation + const reqOpen = req.open; + req.open = function() { + // Here we are calling the original 'open' function to make sure everything is set up correctly (HTTP method, url, filters) + reqOpen.apply(req, arguments); + + // We'll override the 'send' function, so we need to store a handle to its original implementation + // We can already override it because we know 'open' has already been called + const reqSend = req.send; + req.send = function(data: any) { + // We'll override the 'onreadystatechange' function, so we need to store a handle to its original implementation + // Now we can finally override 'onreadystatechange' because 'send' has already been called + const reqStateChange = req.onreadystatechange; + req.onreadystatechange = function() { + // Record the request once the response is obtained + if (req.readyState === 4) { + self.recordRequest(req, data); + } + // Sometimes the client doesn't implement an 'onreadystatechange' function, so we need to make sure it exists before calling the original implementation + if (reqStateChange) { + reqStateChange.apply(null, arguments); + } + }; + + // Now that we have overriden 'onreadystatechange', we can send the request to the server + reqSend.apply(req, arguments); + }; + }; + }; + } + + // When playing back, we want to intercept requests, find a corresponding match in our recordings and respond to it with the recorded data + // We must override the request's 'send' function because all the request information (body, url, method, queries) will be ready when it's called + public playback(): void { + const self = this; + const xhr = nise.fakeXhr.useFakeXMLHttpRequest(); + + // 'karma-json-preprocessor' helps us to retrieve recordings + this.recordings = (window as any).__json__["recordings/" + this.filepath].recordings; + this.uniqueTestInfo = (window as any).__json__["recordings/" + this.filepath].uniqueTestInfo; + + // 'onCreate' function is called when a new fake XMLHttpRequest object (req) is created + xhr.onCreate = function(req: any) { + // We'll override the 'send' function, so we need to store a handle to its original implementation + const reqSend = req.send; + req.send = async function(data: any) { + // Here we're calling the original send method. Nise will make the request wait for a mock response that we'll send later + reqSend.call(req, data); + + // formattedRequest contains all the necessary information to look for a match in our recordings + const parsedUrl = queryString.parseUrl(req.url); + const formattedRequest = { + method: req.method, + url: parsedUrl.url, + query: parsedUrl.query, + requestBody: data instanceof Blob ? await blobToString(data) : data + }; + + // We look through our recordings to find a match to the current request + // If we find a match, we remove it from the recordings list so we don't match it again by accident + let recordingFound = false; + for (let i = 0; !recordingFound && i < self.recordings.length; i++) { + if (self.matchRequest(self.recordings[i], formattedRequest)) { + const status = self.recordings[i].status; + const responseHeaders = self.recordings[i].responseHeaders; + const response = self.recordings[i].response; + + // We are dealing with async requests so we're responding to them asynchronously + setTimeout(() => req.respond(status, responseHeaders, response)); + self.recordings.splice(i, 1); + recordingFound = true; + } + } + + // If we can't find a match, we throw an error + // Some tests expect errors to happen and, if a matching error is thrown in one of these tests, it may be captured in a catch block by accident, + // resulting in unexpected behavior. For this reason we're printing it to the console as well + if (!recordingFound) { + const err = new Error( + "No match for request " + JSON.stringify(formattedRequest, null, " ") + ); + console.log(err); + throw err; + } + }; + }; + } + + public stop(): void { + // We're sending the recordings to the 'karma-json-to-file-reporter' via console.log + console.log( + this.filterSecrets( + JSON.stringify({ + writeFile: true, + path: "./recordings/" + this.filepath, + content: { recordings: this.recordings, uniqueTestInfo: this.uniqueTestInfo } + }) + ) + ); + } +} From 8836ea679c056431129830022ac85c46f6be5113 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 16:21:57 -0700 Subject: [PATCH 18/83] add some return types --- sdk/test-utils/recorder/src/utils.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 4d0d2ed2d7e0..24ef2cf40c09 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -1,3 +1,6 @@ +/** + * @returns {Promise} + */ export async function blobToString(blob: Blob): Promise { const fileReader = new FileReader(); return new Promise((resolve, reject) => { @@ -34,6 +37,9 @@ function padStart(currentString: string, targetLength: number, padString: string } } +/** + * @returns {string} + */ export function getUniqueName(prefix: string): string { return `${prefix}${new Date().getTime()}${padStart( Math.floor(Math.random() * 10000).toString(), @@ -42,6 +48,9 @@ export function getUniqueName(prefix: string): string { )}`; } +/** + * @returns {boolean} + */ export function isBrowser(): boolean { return typeof window !== "undefined"; } From ec1c2391dfb3e44c5234955ccf0fac7f15f65f3b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 16:56:34 -0700 Subject: [PATCH 19/83] update skip list --- sdk/test-utils/recorder/src/baseRecorder.ts | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 9d480f9dcd5b..45a74eb7a64a 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -27,26 +27,9 @@ if (isPlayingBack) { };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; } -/** - * Possible reasons for skipping a test: - * * Abort: browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) - * * Character: there are characters in the message that are not supported in browser logging or in ECMAScript - * * Progress: Nock does not record a request if it's aborted in a 'progress' callback - * * Size: the generated recording file is too big and would considerably increase the size of the package - * * Tempfile: the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information - * * UUID: a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it - */ const skip = [ // Abort - "browsers/aborter/recording_should_abort_after_aborter_timeout.json", - // Abort - "browsers/aborter/recording_should_abort_after_parent_aborter_calls_abort.json", - // Abort - "browsers/aborter/recording_should_abort_after_parent_aborter_timeout.json", - // Abort - "browsers/aborter/recording_should_abort_when_calling_abort_before_request_finishes.json", - // Character - "browsers/messagesurl/recording_enqueue_peek_dequeue_special_characters.json" + "browsers/aborter/recording_should_abort_after_aborter_timeout.json" ]; export abstract class Recorder { From 577c6b09ab04b4d455214e95aadc5223f6d0eb5b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 16:56:59 -0700 Subject: [PATCH 20/83] ignore readme checks --- .docsettings.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.docsettings.yml b/.docsettings.yml index 3b8dadc9fc1e..05a247963bc4 100644 --- a/.docsettings.yml +++ b/.docsettings.yml @@ -104,6 +104,7 @@ known_content_issues: - ["sdk/storage/storage-queue/samples/README.md", "#1583"] - ["sdk/storage/storage-queue/test/README.md", "#1583"] - ["sdk/storage/storage-datalake/README.md", "#1583"] + - ["sdk/test-utils/recorder/README.md", "#1583"] package_indexing_exclusion_list: - "@azure/template" From bd0cc218f3b1891cbaf6c5b134b9115de02e3e52 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 18:03:33 -0700 Subject: [PATCH 21/83] add karma.conf.js file in the template --- sdk/template/template/karma.conf.js | 118 ++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 sdk/template/template/karma.conf.js diff --git a/sdk/template/template/karma.conf.js b/sdk/template/template/karma.conf.js new file mode 100644 index 000000000000..e9bc8b3e1679 --- /dev/null +++ b/sdk/template/template/karma.conf.js @@ -0,0 +1,118 @@ +// https://github.com/karma-runner/karma-chrome-launcher +process.env.CHROME_BIN = require("puppeteer").executablePath(); + +module.exports = function(config) { + config.set({ + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: "./", + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ["mocha"], + + plugins: [ + "karma-mocha", + "karma-mocha-reporter", + "karma-chrome-launcher", + "karma-edge-launcher", + "karma-firefox-launcher", + "karma-ie-launcher", + "karma-env-preprocessor", + "karma-coverage", + "karma-remap-coverage", + "karma-junit-reporter" + ], + + // list of files / patterns to load in the browser + files: [ + // polyfill service supporting IE11 missing features + // Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys + "https://cdn.polyfill.io/v2/polyfill.js?features=Symbol,Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys|always", + "dist-test/index.browser.js" + ], + + // list of files / patterns to exclude + exclude: [], + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + "**/*.js": ["env"], + // IMPORTANT: COMMENT following line if you want to debug in your browsers!! + // Preprocess source file to calculate code coverage, however this will make source file unreadable + "test-browser/index.js": ["coverage"] + }, + + // inject following environment values into browser testing with window.__env__ + // environment values MUST be exported or set with same console running "karma start" + // https://www.npmjs.com/package/karma-env-preprocessor + envPreprocessor: ["ACCOUNT_NAME", "ACCOUNT_SAS"], + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ["mocha", "coverage", "remap-coverage", "junit"], + + coverageReporter: { type: "in-memory" }, + + // Coverage report settings + remapCoverageReporter: { + "text-summary": null, // to show summary in console + html: "./coverage-browser", + cobertura: "./coverage-browser/cobertura-coverage.xml" + }, + + // Exclude coverage calculation for following files + remapOptions: { + exclude: /node_modules|test/g + }, + + junitReporter: { + outputDir: "", // results will be saved as $outputDir/$browserName.xml + outputFile: "test-results.browser.xml", // if included, results will be saved as $outputDir/$browserName/$outputFile + suite: "", // suite will become the package name attribute in xml testsuite element + useBrowserName: false, // add browser name to report and classes names + nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element + classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element + properties: {} // key value pair of properties to add to the section of the report + }, + + // web server port + port: 9876, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + // 'ChromeHeadless', 'Chrome', 'Firefox', 'Edge', 'IE' + browsers: ["ChromeHeadless"], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: 1, + + browserNoActivityTimeout: 600000, + browserDisconnectTimeout: 10000, + browserDisconnectTolerance: 3, + + client: { + mocha: { + // change Karma's debug.html to the mocha web reporter + reporter: "html", + timeout: "600000" + } + } + }); +}; From 1dda9cb0e7aaf3d9f03a63e65a2badd4995efee1 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 18:05:30 -0700 Subject: [PATCH 22/83] add karma dependencies --- sdk/template/template/package.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sdk/template/template/package.json b/sdk/template/template/package.json index 801c690d18be..13388fa5bfeb 100644 --- a/sdk/template/template/package.json +++ b/sdk/template/template/package.json @@ -78,6 +78,17 @@ "eslint-plugin-no-only-tests": "^2.3.0", "eslint-plugin-promise": "^4.1.1", "inherits": "^2.0.3", + "karma": "^4.0.1", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.2", + "karma-edge-launcher": "^0.4.2", + "karma-env-preprocessor": "^0.1.1", + "karma-firefox-launcher": "^1.1.0", + "karma-ie-launcher": "^1.0.0", + "karma-junit-reporter": "^1.2.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + "karma-remap-coverage": "^0.1.5", "mocha": "^5.2.0", "mocha-junit-reporter": "^1.18.0", "mocha-multi": "^1.0.1", From e9428983ec2b4cdefcd23cdc05ec9c67f9b13309 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 18:08:05 -0700 Subject: [PATCH 23/83] update rollup for consistency --- sdk/template/template/rollup.base.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/template/template/rollup.base.config.js b/sdk/template/template/rollup.base.config.js index 25bb67d0163f..6157c9cb7a58 100644 --- a/sdk/template/template/rollup.base.config.js +++ b/sdk/template/template/rollup.base.config.js @@ -39,7 +39,7 @@ export function nodeConfig(test = false) { baseConfig.plugins.unshift(multiEntry({ exports: false })); // different output file - baseConfig.output.file = "test-dist/index.js"; + baseConfig.output.file = "dist-test/index.node.js"; // mark assert as external baseConfig.external.push("assert"); @@ -93,9 +93,9 @@ export function browserConfig(test = false, production = false) { }; if (test) { - baseConfig.input = "dist-esm/test/**/*.spec.js"; + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/browser/*.spec.js"]; baseConfig.plugins.unshift(multiEntry({ exports: false })); - baseConfig.output.file = "test-browser/index.js"; + baseConfig.output.file = "dist-test/index.browser.js"; // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also From a3883a3d2dbd36b62f843549fd1187a606cc0981 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 11 Jul 2019 18:12:30 -0700 Subject: [PATCH 24/83] update scripts - package.json --- sdk/template/template/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/template/template/package.json b/sdk/template/template/package.json index 13388fa5bfeb..ce81c90b3ed4 100644 --- a/sdk/template/template/package.json +++ b/sdk/template/template/package.json @@ -21,8 +21,8 @@ "clean": "rimraf dist dist-esm test-dist types *.tgz *.log", "extract-api": "tsc -p . && api-extractor run --local", "format": "prettier --write --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", - "integration-test:browser": "echo skipped", - "integration-test:node": "echo skipped", + "integration-test:browser": "karma start --single-run", + "integration-test:node": "mocha --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=- dist-test/index.node.js", "integration-test": "npm run integration-test:node && npm run integration-test:browser", "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" -c ../../.eslintrc.json --fix --fix-type [problem,suggestion]", "lint": "eslint -c ../../.eslintrc.json src test --ext .ts -f node_modules/eslint-detailed-reporter/lib/detailed.js -o template-lintReport.html || exit 0", From 581a9f2ba33ec2ad46d78e59cb07e5358bf33d26 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:14:14 -0700 Subject: [PATCH 25/83] update node test suite --- sdk/template/template/test/{ => node}/index.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename sdk/template/template/test/{ => node}/index.spec.ts (81%) diff --git a/sdk/template/template/test/index.spec.ts b/sdk/template/template/test/node/index.spec.ts similarity index 81% rename from sdk/template/template/test/index.spec.ts rename to sdk/template/template/test/node/index.spec.ts index 6a05f29fa0b4..5ab88efc18b5 100644 --- a/sdk/template/template/test/index.spec.ts +++ b/sdk/template/template/test/node/index.spec.ts @@ -1,10 +1,10 @@ -import * as lib from "../src/index"; +import * as lib from "../../src/index"; import EventEmitter from "events"; // another node built-in that has to be shimmed for the browser import assert from "assert"; -describe("Hello function", () => { +describe("Hello function - node", () => { it("should create an event emitter", () => { const result = lib.createEventEmitter(); assert(result instanceof EventEmitter); From 876df319d4a2adbd56380880eeb631cee972cf56 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:14:31 -0700 Subject: [PATCH 26/83] update unit-test scripts --- sdk/template/template/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/template/template/package.json b/sdk/template/template/package.json index ce81c90b3ed4..28009f511f81 100644 --- a/sdk/template/template/package.json +++ b/sdk/template/template/package.json @@ -21,8 +21,8 @@ "clean": "rimraf dist dist-esm test-dist types *.tgz *.log", "extract-api": "tsc -p . && api-extractor run --local", "format": "prettier --write --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", - "integration-test:browser": "karma start --single-run", - "integration-test:node": "mocha --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=- dist-test/index.node.js", + "integration-test:browser": "echo skipped", + "integration-test:node": "echo skipped", "integration-test": "npm run integration-test:node && npm run integration-test:browser", "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" -c ../../.eslintrc.json --fix --fix-type [problem,suggestion]", "lint": "eslint -c ../../.eslintrc.json src test --ext .ts -f node_modules/eslint-detailed-reporter/lib/detailed.js -o template-lintReport.html || exit 0", @@ -31,8 +31,8 @@ "test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser", "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node", "test": "npm run build:test && npm run unit-test && npm run integration-test", - "unit-test:browser": "echo skipped", - "unit-test:node": "mocha test-dist/**/*.js --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=-", + "unit-test:browser": "karma start --single-run", + "unit-test:node": "mocha --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=- dist-test/index.node.js", "unit-test": "npm run unit-test:node && npm run unit-test:browser" }, "files": [ From 560bdcf672a1f341f30d4091d55facca38ed4b8d Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:14:58 -0700 Subject: [PATCH 27/83] seperate out node tests and browser tests --- sdk/template/template/rollup.base.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/template/template/rollup.base.config.js b/sdk/template/template/rollup.base.config.js index 6157c9cb7a58..cc9bbfbfb8e1 100644 --- a/sdk/template/template/rollup.base.config.js +++ b/sdk/template/template/rollup.base.config.js @@ -35,7 +35,7 @@ export function nodeConfig(test = false) { if (test) { // entry point is every test file - baseConfig.input = "dist-esm/test/**/*.spec.js"; + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/node/*.spec.js"]; baseConfig.plugins.unshift(multiEntry({ exports: false })); // different output file From b0746563492d82474ec5531c06e1229d44cd12a0 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:15:40 -0700 Subject: [PATCH 28/83] =?UTF-8?q?=F0=9F=91=8A=20is=20not=20allowed=20in=20?= =?UTF-8?q?headless=20chrome=20browser,=20So,=20updated=20to=20=E2=9D=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/template/template/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/template/template/src/index.ts b/sdk/template/template/src/index.ts index e91b7b6b9c14..6b6105dcf980 100644 --- a/sdk/template/template/src/index.ts +++ b/sdk/template/template/src/index.ts @@ -20,7 +20,7 @@ export function createEventEmitter() { if (isNode) { console.log("Node 👊"); } else { - console.log("Browser 👊"); + console.log("Browser ❤"); } print("Created event emitter"); From ac68041c479c2805c30513a5c920e010e501d04a Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:26:50 -0700 Subject: [PATCH 29/83] sample browser test --- .../template/test/browser/sampleBrowser.spec.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sdk/template/template/test/browser/sampleBrowser.spec.ts diff --git a/sdk/template/template/test/browser/sampleBrowser.spec.ts b/sdk/template/template/test/browser/sampleBrowser.spec.ts new file mode 100644 index 000000000000..563dfba401ff --- /dev/null +++ b/sdk/template/template/test/browser/sampleBrowser.spec.ts @@ -0,0 +1,11 @@ +import * as lib from "../../src/index"; +import EventEmitter from "events"; + +describe("Hello function - browser", () => { + it("should create an event emitter", () => { + const result = lib.createEventEmitter(); + if (!(result instanceof EventEmitter)) { + throw new Error("Error occurred while creating an event emitter"); + } + }); +}); From 2a348e2c2724267764aee8ca99b502b1dd05d955 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 12:44:59 -0700 Subject: [PATCH 30/83] comment out polyfill --- sdk/template/template/karma.conf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/template/template/karma.conf.js b/sdk/template/template/karma.conf.js index e9bc8b3e1679..f6c9a619ba18 100644 --- a/sdk/template/template/karma.conf.js +++ b/sdk/template/template/karma.conf.js @@ -25,9 +25,9 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ - // polyfill service supporting IE11 missing features + // Uncomment the cdn link below for the polyfill service to support IE11 missing features // Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys - "https://cdn.polyfill.io/v2/polyfill.js?features=Symbol,Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys|always", + // "https://cdn.polyfill.io/v2/polyfill.js?features=Symbol,Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys|always", "dist-test/index.browser.js" ], From af4647e4e1df66942170d092416ee97474306d6b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 13:51:36 -0700 Subject: [PATCH 31/83] entry points - add comments --- sdk/template/template/rollup.base.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/template/template/rollup.base.config.js b/sdk/template/template/rollup.base.config.js index cc9bbfbfb8e1..4f8659860717 100644 --- a/sdk/template/template/rollup.base.config.js +++ b/sdk/template/template/rollup.base.config.js @@ -34,7 +34,7 @@ export function nodeConfig(test = false) { }; if (test) { - // entry point is every test file + // Entry points - test files under the `test` folder(common for both browser and node), node specific test files baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/node/*.spec.js"]; baseConfig.plugins.unshift(multiEntry({ exports: false })); @@ -93,6 +93,7 @@ export function browserConfig(test = false, production = false) { }; if (test) { + // Entry points - test files under the `test` folder(common for both browser and node), browser specific test files baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/browser/*.spec.js"]; baseConfig.plugins.unshift(multiEntry({ exports: false })); baseConfig.output.file = "dist-test/index.browser.js"; From 30da8d66fb98edca2d7e8a61e21df6ad52b64a9a Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 14:29:42 -0700 Subject: [PATCH 32/83] skip unit tests --- sdk/test-utils/recorder/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index e173601b2e34..f5ddff492df0 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -27,7 +27,7 @@ "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node", "test": "npm run build:test && npm run unit-test && npm run integration-test", "unit-test:browser": "echo skipped", - "unit-test:node": "mocha test-dist/**/*.js --reporter mocha-multi --reporter-options spec=-,mocha-junit-reporter=-", + "unit-test:node": "echo skipped", "unit-test": "npm run unit-test:node && npm run unit-test:browser" }, "files": [ From 2eb23ed3ac99ca03e277da2350caf48fa085ae47 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 14:29:52 -0700 Subject: [PATCH 33/83] add tsconfig --- sdk/test-utils/recorder/tsconfig.json | 56 +++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 sdk/test-utils/recorder/tsconfig.json diff --git a/sdk/test-utils/recorder/tsconfig.json b/sdk/test-utils/recorder/tsconfig.json new file mode 100644 index 000000000000..cedf2fcab62f --- /dev/null +++ b/sdk/test-utils/recorder/tsconfig.json @@ -0,0 +1,56 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, + "module": "es6" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, + "declarationDir": "./types" /* Output directory for generated declaration files.*/, + "sourceMap": true /* Generates corresponding '.map' file. */, + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist-esm" /* Redirect output structure to the directory. */, + // "rootDir": "." /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + "importHelpers": true /* Import emit helpers from 'tslib'. */, + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [] /* List of root folders whose combined content represents the structure of the project at runtime. */, + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "forceConsistentCasingInFileNames": true + } +} From 141582ab41f066da69c9c378ea0e42bdbac135c8 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 14:30:19 -0700 Subject: [PATCH 34/83] add License.txt --- sdk/test-utils/recorder/LICENSE | 21 +++++++++++++++++++ sdk/test-utils/recorder/src/baseRecorder.ts | 3 +++ .../recorder/src/customConsoleLog.ts | 3 +++ sdk/test-utils/recorder/src/delay.ts | 3 +++ sdk/test-utils/recorder/src/recorder.ts | 3 +++ sdk/test-utils/recorder/src/utils.ts | 3 +++ 6 files changed, 36 insertions(+) create mode 100644 sdk/test-utils/recorder/LICENSE diff --git a/sdk/test-utils/recorder/LICENSE b/sdk/test-utils/recorder/LICENSE new file mode 100644 index 000000000000..21071075c245 --- /dev/null +++ b/sdk/test-utils/recorder/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 45a74eb7a64a..a60171699b3d 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -1,3 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; diff --git a/sdk/test-utils/recorder/src/customConsoleLog.ts b/sdk/test-utils/recorder/src/customConsoleLog.ts index 5657fff41cc1..4c98835dde44 100644 --- a/sdk/test-utils/recorder/src/customConsoleLog.ts +++ b/sdk/test-utils/recorder/src/customConsoleLog.ts @@ -1,3 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + // Converting content corresponding to all the console statements // into (JSON.stringify)-ed content in record mode for browser tests. // diff --git a/sdk/test-utils/recorder/src/delay.ts b/sdk/test-utils/recorder/src/delay.ts index a0d75961321f..8212bf303931 100644 --- a/sdk/test-utils/recorder/src/delay.ts +++ b/sdk/test-utils/recorder/src/delay.ts @@ -1,3 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + import { isBrowser } from "./utils"; const env = isBrowser() ? (window as any).__env__ : process.env; const isPlayingBack = env.TEST_MODE === "playback"; diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index a52e28abb35e..c876f8baf2fd 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,3 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + import { getUniqueName, isBrowser } from "./utils"; import { NiseRecorder, NockRecorder, Recorder } from "./baseRecorder"; diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 24ef2cf40c09..c8dcc49535ae 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -1,3 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + /** * @returns {Promise} */ From 30bfbf9ddecf7db8293476c0589356dc47158d49 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 14:30:30 -0700 Subject: [PATCH 35/83] add index.ts --- sdk/test-utils/recorder/src/index.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sdk/test-utils/recorder/src/index.ts diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts new file mode 100644 index 000000000000..30a1bec9b327 --- /dev/null +++ b/sdk/test-utils/recorder/src/index.ts @@ -0,0 +1,5 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +export { record } from "./recorder"; +export { delay } from "./delay"; From 50e27f19f7e99173b9acebf03f2988564e5a4d98 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 15:19:35 -0700 Subject: [PATCH 36/83] updates types, add rollup, tsconfig.json --- sdk/test-utils/recorder/package.json | 18 ++- sdk/test-utils/recorder/rollup.base.config.js | 113 ++++++++++++++++++ sdk/test-utils/recorder/rollup.config.js | 14 +++ sdk/test-utils/recorder/rollup.test.config.js | 3 + sdk/test-utils/recorder/tsconfig.json | 75 ++++-------- 5 files changed, 166 insertions(+), 57 deletions(-) create mode 100644 sdk/test-utils/recorder/rollup.base.config.js create mode 100644 sdk/test-utils/recorder/rollup.config.js create mode 100644 sdk/test-utils/recorder/rollup.test.config.js diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index f5ddff492df0..c340a8693d8b 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -4,17 +4,17 @@ "description": "This library provides interfaces and helper methods to provide recording and playback capabilities for the tests in Azure JS/TS SDKs", "main": "dist/index.js", "module": "dist-esm/src/index.js", - "types": "./typings/src/index.d.ts", + "types": "./types/index.d.ts", "scripts": { "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", "build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1", "build:samples": "cd samples && tsc -p .", "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1", - "build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local", + "build": "tsc -p . && rollup -c 2>&1", "check-format": "prettier --list-different --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", "clean": "rimraf dist dist-esm test-dist types *.tgz *.log", - "extract-api": "tsc -p . && api-extractor run --local", + "extract-api": "echo skipped", "format": "prettier --write --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", "integration-test:browser": "echo skipped", "integration-test:node": "echo skipped", @@ -61,6 +61,16 @@ "fs-extra": "~8.0.1", "nise": "^1.4.10", "query-string": "^5.0.0", - "tslib": "^1.9.3" + "tslib": "^1.9.3", + "rimraf": "^2.6.2", + "rollup": "^1.16.3", + "rollup-plugin-commonjs": "^10.0.0", + "rollup-plugin-multi-entry": "^2.1.0", + "rollup-plugin-node-resolve": "^5.0.2", + "rollup-plugin-replace": "^2.1.0", + "rollup-plugin-shim": "^1.0.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-terser": "^5.1.1", + "rollup-plugin-visualizer": "^2.0.0" } } diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js new file mode 100644 index 000000000000..5687af98336a --- /dev/null +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -0,0 +1,113 @@ +import nodeResolve from "rollup-plugin-node-resolve"; +import multiEntry from "rollup-plugin-multi-entry"; +import cjs from "rollup-plugin-commonjs"; +import replace from "rollup-plugin-replace"; +import { terser } from "rollup-plugin-terser"; +import sourcemaps from "rollup-plugin-sourcemaps"; +import viz from "rollup-plugin-visualizer"; + +const pkg = require("./package.json"); +const depNames = Object.keys(pkg.dependencies); +const input = "dist-esm/index.js"; +const production = process.env.NODE_ENV === "production"; + +export function nodeConfig(test = false) { + const externalNodeBuiltins = ["events", "fs", "fs-extra"]; + const baseConfig = { + input: input, + external: depNames.concat(externalNodeBuiltins), + output: { file: "dist/index.js", format: "cjs", sourcemap: true }, + preserveSymlinks: false, + plugins: [ + sourcemaps(), + replace({ + delimiters: ["", ""], + values: { + // replace dynamic checks with if (true) since this is for node only. + // Allows rollup's dead code elimination to be more aggressive. + "if (isNode)": "if (true)" + } + }), + nodeResolve({ preferBuiltins: true }), + cjs() + ] + }; + + if (test) { + // Entry points - test files under the `test` folder(common for both browser and node), node specific test files + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/node/*.spec.js"]; + baseConfig.plugins.unshift(multiEntry({ exports: false })); + + // different output file + baseConfig.output.file = "dist-test/index.node.js"; + + // mark assert as external + baseConfig.external.push("assert", "fs"); + + // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting + // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also + // applies to test code, which causes all tests to be removed by tree-shaking. + baseConfig.treeshake = false; + } else if (production) { + baseConfig.plugins.push(terser()); + } + + return baseConfig; +} + +export function browserConfig(test = false, production = false) { + const baseConfig = { + input: input, + external: ["@azure/ms-rest-js", "fs-extra"], + output: { + file: "browser/azure-test-utils-recorder.js", + format: "umd", + name: "ExampleClient", + sourcemap: true, + globals: { "@azure/ms-rest-js": "msRest" } + }, + preserveSymlinks: false, + plugins: [ + sourcemaps(), + replace({ + delimiters: ["", ""], + values: { + // replace dynamic checks with if (false) since this is for + // browser only. Rollup's dead code elimination will remove + // any code guarded by if (isNode) { ... } + "if (isNode)": "if (false)" + } + }), + nodeResolve({ + mainFields: ["module", "browser"], + preferBuiltins: false + }), + cjs({ + // When "rollup-plugin-commonjs@10.0.0" is used with "resolve@1.11.1", named exports of + // modules with built-in names must have a trailing slash. + // https://github.com/rollup/rollup-plugin-commonjs/issues/394 + namedExports: { "events/": ["EventEmitter"] } + }), + viz({ filename: "browser/browser-stats.html", sourcemap: false }) + ] + }; + + if (test) { + // Entry points - test files under the `test` folder(common for both browser and node), browser specific test files + baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/browser/*.spec.js"]; + baseConfig.plugins.unshift(multiEntry({ exports: false })); + baseConfig.output.file = "dist-test/index.browser.js"; + // mark fs-extra as external + baseConfig.external = ["fs-extra"]; + + // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting + // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also + // applies to test code, which causes all tests to be removed by tree-shaking. + baseConfig.treeshake = false; + } else if (production) { + baseConfig.output.file = "browser/azure-test-utils-recorder.min.js"; + baseConfig.plugins.push(terser()); + } + + return baseConfig; +} diff --git a/sdk/test-utils/recorder/rollup.config.js b/sdk/test-utils/recorder/rollup.config.js new file mode 100644 index 000000000000..49a26bd6fdd6 --- /dev/null +++ b/sdk/test-utils/recorder/rollup.config.js @@ -0,0 +1,14 @@ +import * as base from "./rollup.base.config"; + +const inputs = []; + +if (!process.env.ONLY_BROWSER) { + inputs.push(base.nodeConfig()); +} + +if (!process.env.ONLY_NODE) { + inputs.push(base.browserConfig()); + inputs.push(base.browserConfig(false, true)); +} + +export default inputs; diff --git a/sdk/test-utils/recorder/rollup.test.config.js b/sdk/test-utils/recorder/rollup.test.config.js new file mode 100644 index 000000000000..925a4421a53e --- /dev/null +++ b/sdk/test-utils/recorder/rollup.test.config.js @@ -0,0 +1,3 @@ +import * as base from "./rollup.base.config"; + +export default [base.nodeConfig(true), base.browserConfig(true)]; diff --git a/sdk/test-utils/recorder/tsconfig.json b/sdk/test-utils/recorder/tsconfig.json index cedf2fcab62f..e271ee388662 100644 --- a/sdk/test-utils/recorder/tsconfig.json +++ b/sdk/test-utils/recorder/tsconfig.json @@ -1,56 +1,25 @@ { "compilerOptions": { - /* Basic Options */ - "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, - "module": "es6" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - "declarationMap": true /* Generates a sourcemap for each corresponding '.d.ts' file. */, - "declarationDir": "./types" /* Output directory for generated declaration files.*/, - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist-esm" /* Redirect output structure to the directory. */, - // "rootDir": "." /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - "importHelpers": true /* Import emit helpers from 'tslib'. */, - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [] /* List of root folders whose combined content represents the structure of the project at runtime. */, - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - "forceConsistentCasingInFileNames": true - } + "alwaysStrict": true, + "noImplicitAny": true, + "preserveConstEnums": true, + "sourceMap": true, + "newLine": "LF", + "target": "es5", + "moduleResolution": "node", + "noUnusedLocals": true, + "noUnusedParameters": true, + "strict": true, + "module": "esNext", + "outDir": "./dist-esm", + "declaration": true, + "declarationMap": true, + "importHelpers": true, + "declarationDir": "./typings", + "lib": ["dom", "es5", "es6", "es7", "esnext"], + "esModuleInterop": true + }, + "compileOnSave": true, + "exclude": ["node_modules", "./samples/*"], + "include": ["./src/**/*.ts", "./test/**/*.ts"] } From c2f95d89e56a641e8f046c1b0dd311ce4bb3e1c3 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 15:31:29 -0700 Subject: [PATCH 37/83] types -> typings --- sdk/test-utils/recorder/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index c340a8693d8b..061b8047fe82 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -4,7 +4,7 @@ "description": "This library provides interfaces and helper methods to provide recording and playback capabilities for the tests in Azure JS/TS SDKs", "main": "dist/index.js", "module": "dist-esm/src/index.js", - "types": "./types/index.d.ts", + "types": "./typings/index.d.ts", "scripts": { "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", @@ -13,7 +13,7 @@ "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1", "build": "tsc -p . && rollup -c 2>&1", "check-format": "prettier --list-different --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", - "clean": "rimraf dist dist-esm test-dist types *.tgz *.log", + "clean": "rimraf dist dist-esm test-dist typings *.tgz *.log", "extract-api": "echo skipped", "format": "prettier --write --config ../../.prettierrc.json \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", "integration-test:browser": "echo skipped", From 597804d46338c53e63b04ef7abfa29f50cc5d26c Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 16:14:54 -0700 Subject: [PATCH 38/83] cleaning rollup --- sdk/test-utils/recorder/rollup.base.config.js | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index 5687af98336a..990abcbd9bef 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -12,7 +12,7 @@ const input = "dist-esm/index.js"; const production = process.env.NODE_ENV === "production"; export function nodeConfig(test = false) { - const externalNodeBuiltins = ["events", "fs", "fs-extra"]; + const externalNodeBuiltins = ["fs-extra"]; const baseConfig = { input: input, external: depNames.concat(externalNodeBuiltins), @@ -41,9 +41,6 @@ export function nodeConfig(test = false) { // different output file baseConfig.output.file = "dist-test/index.node.js"; - // mark assert as external - baseConfig.external.push("assert", "fs"); - // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also // applies to test code, which causes all tests to be removed by tree-shaking. @@ -58,13 +55,12 @@ export function nodeConfig(test = false) { export function browserConfig(test = false, production = false) { const baseConfig = { input: input, - external: ["@azure/ms-rest-js", "fs-extra"], + external: ["fs-extra"], output: { file: "browser/azure-test-utils-recorder.js", format: "umd", - name: "ExampleClient", - sourcemap: true, - globals: { "@azure/ms-rest-js": "msRest" } + name: "TestUtilsRecorder", + sourcemap: true }, preserveSymlinks: false, plugins: [ @@ -82,12 +78,6 @@ export function browserConfig(test = false, production = false) { mainFields: ["module", "browser"], preferBuiltins: false }), - cjs({ - // When "rollup-plugin-commonjs@10.0.0" is used with "resolve@1.11.1", named exports of - // modules with built-in names must have a trailing slash. - // https://github.com/rollup/rollup-plugin-commonjs/issues/394 - namedExports: { "events/": ["EventEmitter"] } - }), viz({ filename: "browser/browser-stats.html", sourcemap: false }) ] }; @@ -97,8 +87,6 @@ export function browserConfig(test = false, production = false) { baseConfig.input = ["dist-esm/test/*.spec.js", "dist-esm/test/browser/*.spec.js"]; baseConfig.plugins.unshift(multiEntry({ exports: false })); baseConfig.output.file = "dist-test/index.browser.js"; - // mark fs-extra as external - baseConfig.external = ["fs-extra"]; // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also From ceb9550611ed4ae68508f6907120e2d1e844f955 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 12 Jul 2019 16:17:41 -0700 Subject: [PATCH 39/83] cjs plugin --- sdk/test-utils/recorder/rollup.base.config.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index 990abcbd9bef..86514e637593 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -78,6 +78,12 @@ export function browserConfig(test = false, production = false) { mainFields: ["module", "browser"], preferBuiltins: false }), + cjs({ + // When "rollup-plugin-commonjs@10.0.0" is used with "resolve@1.11.1", named exports of + // modules with built-in names must have a trailing slash. + // https://github.com/rollup/rollup-plugin-commonjs/issues/394 + namedExports: { "events/": ["EventEmitter"] } + }), viz({ filename: "browser/browser-stats.html", sourcemap: false }) ] }; From c5ccfa9ba337b07042db50e7dc7e9648bb192118 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 11:19:18 -0700 Subject: [PATCH 40/83] expose setReplaceableVariables for keyvault --- sdk/test-utils/recorder/src/baseRecorder.ts | 66 +++++++++++++++------ sdk/test-utils/recorder/src/index.ts | 2 + sdk/test-utils/recorder/src/recorder.ts | 13 ++-- sdk/test-utils/recorder/src/utils.ts | 6 ++ 4 files changed, 62 insertions(+), 25 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index a60171699b3d..e1458d732d4f 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -4,30 +4,48 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; -import { isBrowser, blobToString } from "./utils"; +import { isBrowser, blobToString, escapeRegExp, env } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; -const env = isBrowser() ? (window as any).__env__ : process.env; +let nock: any; + const isRecording = env.TEST_MODE === "record"; const isPlayingBack = env.TEST_MODE === "playback"; -let nock: any; -if (!isBrowser() && (isRecording || isPlayingBack)) { - nock = require("nock"); +let replaceableVariables: { [x: string]: string } = {}; +export function setReplaceableVariables(a: { [x: string]: string }): void { + replaceableVariables = a; + if (isPlayingBack) { + // Providing dummy values to avoid the error + Object.keys(a).map((k) => { + env[k] = a[k]; + }); + } } -if (isBrowser() && isRecording) { - customConsoleLog(); +let replacements: any[] = []; +export function setReplacements(maps: any): void { + replacements = maps; } -if (isPlayingBack) { - // Providing dummy values to avoid the error - env.ACCOUNT_NAME = "fakestorageaccount"; - env.ACCOUNT_KEY = "aaaaa"; - env.ACCOUNT_SAS = "aaaaa"; - env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ - env.ACCOUNT_NAME - };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; +export function setEnviromentOnLoad() { + if (!isBrowser() && (isRecording || isPlayingBack)) { + nock = require("nock"); + } + + if (isBrowser() && isRecording) { + customConsoleLog(); + } + + if (isPlayingBack) { + // Providing dummy values to avoid the error + env.ACCOUNT_NAME = "fakestorageaccount"; + env.ACCOUNT_KEY = "aaaaa"; + env.ACCOUNT_SAS = "aaaaa"; + env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ + env.ACCOUNT_NAME + };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; + } } const skip = [ @@ -66,10 +84,20 @@ export abstract class Recorder { * Additional layer of security to avoid unintended/accidental occurrences of secrets in the recordings * */ protected filterSecrets(recording: string): string { - let updatedRecording = recording.replace( - new RegExp(env.ACCOUNT_NAME, "g"), - "fakestorageaccount" - ); + let updatedRecording = recording; + for (const k of Object.keys(replaceableVariables)) { + const escaped = escapeRegExp(env[k]); + updatedRecording = updatedRecording.replace( + new RegExp(escaped, "g"), + replaceableVariables[k] + ); + } + for (const map of replacements) { + updatedRecording = map(updatedRecording); + } + + // Handling storage environment variables separately + updatedRecording = recording.replace(new RegExp(env.ACCOUNT_NAME, "g"), "fakestorageaccount"); if (env.ACCOUNT_KEY) { updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); } diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts index 30a1bec9b327..c8ee60fc84e1 100644 --- a/sdk/test-utils/recorder/src/index.ts +++ b/sdk/test-utils/recorder/src/index.ts @@ -3,3 +3,5 @@ export { record } from "./recorder"; export { delay } from "./delay"; +export { env } from "./utils"; +export { setReplaceableVariables, setReplacements } from "./baseRecorder"; diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index c876f8baf2fd..e43fa4a403f7 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,12 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. -import { getUniqueName, isBrowser } from "./utils"; -import { NiseRecorder, NockRecorder, Recorder } from "./baseRecorder"; - -const env = isBrowser() ? (window as any).__env__ : process.env; -const isRecording = env.TEST_MODE === "record"; -const isPlayingBack = env.TEST_MODE === "playback"; +import { getUniqueName, isBrowser, env } from "./utils"; +import { NiseRecorder, NockRecorder, Recorder, setEnviromentOnLoad } from "./baseRecorder"; export function record(testContext: any) { let recorder: Recorder; @@ -21,6 +17,11 @@ export function record(testContext: any) { testTitle = testContext.test.title; } + const isRecording = env.TEST_MODE === "record"; + const isPlayingBack = env.TEST_MODE === "playback"; + + setEnviromentOnLoad(); + if (isBrowser()) { recorder = new NiseRecorder(testHierarchy, testTitle); } else { diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index c8dcc49535ae..5a9daf4c6a0d 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -1,6 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. +export const env = isBrowser() ? (window as any).__env__ : process.env; + +export function escapeRegExp(str: string): string { + return encodeURIComponent(str).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} + /** * @returns {Promise} */ From ca40bb558adc8b60e0ace71ce4f139855d8420ff Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 12:26:32 -0700 Subject: [PATCH 41/83] import nock --- sdk/test-utils/recorder/package.json | 6 ++++-- sdk/test-utils/recorder/src/baseRecorder.ts | 9 ++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index 061b8047fe82..43cfaff06997 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -57,11 +57,12 @@ "dependencies": { "@types/fs-extra": "~7.0.0", "@types/nise": "^1.4.0", + "@types/nock": "^10.0.1", "@types/query-string": "6.2.0", "fs-extra": "~8.0.1", "nise": "^1.4.10", + "nock": "^10.0.6", "query-string": "^5.0.0", - "tslib": "^1.9.3", "rimraf": "^2.6.2", "rollup": "^1.16.3", "rollup-plugin-commonjs": "^10.0.0", @@ -71,6 +72,7 @@ "rollup-plugin-shim": "^1.0.0", "rollup-plugin-sourcemaps": "^0.4.2", "rollup-plugin-terser": "^5.1.1", - "rollup-plugin-visualizer": "^2.0.0" + "rollup-plugin-visualizer": "^2.0.0", + "tslib": "^1.9.3" } } diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index e1458d732d4f..48e061f5bc2e 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -6,8 +6,7 @@ import nise from "nise"; import queryString from "query-string"; import { isBrowser, blobToString, escapeRegExp, env } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; - -let nock: any; +import nock from "nock"; const isRecording = env.TEST_MODE === "record"; const isPlayingBack = env.TEST_MODE === "playback"; @@ -29,10 +28,6 @@ export function setReplacements(maps: any): void { } export function setEnviromentOnLoad() { - if (!isBrowser() && (isRecording || isPlayingBack)) { - nock = require("nock"); - } - if (isBrowser() && isRecording) { customConsoleLog(); } @@ -165,7 +160,7 @@ export class NockRecorder extends Recorder { for (const fixture of fixtures) { // We're not matching query string parameters because they may contain sensitive information, and Nock does not allow us to customize it easily - const updatedFixture = fixture.replace(/\.query\(.*\)/, ".query(true)"); + const updatedFixture = fixture.toString().replace(/\.query\(.*\)/, ".query(true)"); file.write(this.filterSecrets(updatedFixture) + "\n"); } From 14093adccd9aae2a2f27ba2773199f94384e0160 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 14:42:43 -0700 Subject: [PATCH 42/83] update pnpm-lock --- common/config/rush/pnpm-lock.yaml | 772 +++++++++++++++++------------- 1 file changed, 450 insertions(+), 322 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index e114efbfc0ef..5427d1c86845 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -6,7 +6,7 @@ dependencies: '@azure/ms-rest-azure-js': 1.3.8 '@azure/ms-rest-js': 1.8.13 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@rush-temp/abort-controller': 'file:projects/abort-controller.tgz' '@rush-temp/core-amqp': 'file:projects/core-amqp.tgz' '@rush-temp/core-arm': 'file:projects/core-arm.tgz' @@ -35,7 +35,6 @@ dependencies: '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/express': 4.17.0 - '@types/form-data': 2.2.1 '@types/fs-extra': 7.0.0 '@types/glob': 7.1.1 '@types/is-buffer': 2.0.0 @@ -57,16 +56,16 @@ dependencies: '@types/tunnel': 0.0.0 '@types/underscore': 1.9.2 '@types/uuid': 3.4.5 - '@types/webpack': 4.4.34 + '@types/webpack': 4.4.35 '@types/webpack-dev-middleware': 2.0.3 '@types/ws': 6.0.1 '@types/xml2js': 0.4.4 '@types/yargs': 11.1.2 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 abortcontroller-polyfill: 1.3.0 assert: 1.5.0 - async-lock: 1.2.0 + async-lock: 1.2.2 axios: 0.19.0 axios-mock-adapter: 1.17.0_axios@0.19.0 azure-storage: 2.10.3 @@ -101,21 +100,21 @@ dependencies: is-buffer: 2.0.3 jssha: 2.3.1 jws: 3.2.2 - karma: 4.1.0 - karma-chai: 0.1.0_chai@4.2.0+karma@4.1.0 + karma: 4.2.0 + karma-chai: 0.1.0_chai@4.2.0+karma@4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-json-preprocessor: 0.3.3_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 - karma-rollup-preprocessor: 7.0.0_rollup@1.16.7 + karma-rollup-preprocessor: 7.0.0_rollup@1.17.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 karma-webpack: 4.0.2_webpack@4.35.3 @@ -145,21 +144,21 @@ dependencies: rhea: 1.0.8 rhea-promise: 0.1.15 rimraf: 2.6.3 - rollup: 1.16.7 + rollup: 1.17.0 rollup-plugin-alias: 1.5.2 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-inject: 3.0.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-resolve: 0.0.1-predev.1 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-terser: 5.1.1_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-uglify: 6.0.2_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 semaphore: 1.0.5 semver: 5.7.0 shx: 0.3.2 @@ -180,18 +179,18 @@ dependencies: util: 0.11.1 uuid: 3.3.2 webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.5_webpack@4.35.3 + webpack-cli: 3.3.6_webpack@4.35.3 webpack-dev-middleware: 3.7.0_webpack@4.35.3 ws: 6.2.1 xhr-mock: 2.4.1 xml2js: 0.4.19 yargs: 11.1.0 - yarn: 1.16.0 + yarn: 1.17.3 lockfileVersion: 5.1 packages: /@azure/amqp-common/0.1.9_rhea-promise@0.1.15: dependencies: - async-lock: 1.2.0 + async-lock: 1.2.2 debug: 3.2.6 is-buffer: 2.0.3 jssha: 2.3.1 @@ -208,7 +207,7 @@ packages: '@azure/ms-rest-nodeauth': 0.9.3 '@types/async-lock': 1.1.1 '@types/is-buffer': 2.0.0 - async-lock: 1.2.0 + async-lock: 1.2.2 buffer: 5.2.1 debug: 3.2.6 events: 3.0.0 @@ -236,7 +235,7 @@ packages: /@azure/event-hubs/1.0.8: dependencies: '@azure/amqp-common': 0.1.9_rhea-promise@0.1.15 - async-lock: 1.2.0 + async-lock: 1.2.2 debug: 3.2.6 is-buffer: 2.0.2 jssha: 2.3.1 @@ -374,7 +373,7 @@ packages: dev: false resolution: integrity: sha512-LYMnA1cB2W3YuCOAFruNvnQBZ64OzEnsHxzcxclBhTcUGag6NrtGnip90AVTvVzFlXDLoT7trvPEenlWflWZFQ== - /@microsoft/api-extractor/7.3.1: + /@microsoft/api-extractor/7.3.2: dependencies: '@microsoft/api-extractor-model': 7.2.0 '@microsoft/node-core-library': 3.13.0 @@ -388,7 +387,7 @@ packages: dev: false hasBin: true resolution: - integrity: sha512-tldZDD8tRRc9d4LKdZbNptB958S5pIsf0Nu8eOEpcxoffM3sofG3O8+RZ2Rm9JpAVeGcxPA3r0hWyQ+srNqs+Q== + integrity: sha512-7F/mQl09qFo09kDM9aIYBNUOwqX+IYM0nlsU+ipmSS92ifG21fWBOyqhuEE9hciKXho6dMIIGTTQa7L/HP4diA== /@microsoft/node-core-library/3.13.0: dependencies: '@types/fs-extra': 5.0.4 @@ -522,12 +521,6 @@ packages: dev: false resolution: integrity: sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== - /@types/form-data/2.2.1: - dependencies: - '@types/node': 8.10.50 - dev: false - resolution: - integrity: sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ== /@types/fs-extra/5.0.4: dependencies: '@types/node': 8.10.50 @@ -613,10 +606,10 @@ packages: dev: false resolution: integrity: sha512-OthuN+2FuzfZO3yONJ/QVjKmLEuRagS9TV9lEId+WHL9KhftYG+/2z+pxlr0UgVVXSpVD8woie/3fzQn8ft/Ow== - /@types/node/12.6.2: + /@types/node/12.6.3: dev: false resolution: - integrity: sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ== + integrity: sha512-7TEYTQT1/6PP53NftXXabIZDaZfaoBdeBm8Md/i7zsWRoBe0YwOXguyK8vhHs8ehgB/w9U4K/6EWuTyp0W6nIA== /@types/node/8.10.50: dev: false resolution: @@ -700,12 +693,12 @@ packages: dependencies: '@types/connect': 3.4.32 '@types/memory-fs': 0.3.2 - '@types/webpack': 4.4.34 + '@types/webpack': 4.4.35 loglevel: 1.6.3 dev: false resolution: integrity: sha512-DzNJJ6ah/6t1n8sfAgQyEbZ/OMmFcF9j9P3aesnm7G6/iBFR/qiGin8K89J0RmaWIBzhTMdDg3I5PmKmSv7N9w== - /@types/webpack/4.4.34: + /@types/webpack/4.4.35: dependencies: '@types/anymatch': 1.3.1 '@types/node': 8.10.50 @@ -714,7 +707,7 @@ packages: source-map: 0.6.1 dev: false resolution: - integrity: sha512-GnEBgjHsfO1M7DIQ0dAupSofcmDItE3Zsu3reK8SQpl/6N0rtUQxUmQzVFAS5ou/FGjsYKjXAWfItLZ0kNFTfQ== + integrity: sha512-kf+mn/+CB4HsFb+Rz0QBRlo8nNC9LFhwqeK5xxhd3FEPRWJv6MFVnljKV5ARac56+syO8vIhq+nGt860+3wx7A== /@types/ws/6.0.1: dependencies: '@types/events': 3.0.0 @@ -736,12 +729,12 @@ packages: dev: false resolution: integrity: sha1-LrHQCl5Ow/pYx2r94S4YK2bcXBw= - /@typescript-eslint/eslint-plugin/1.11.0_8d1711d609953acbf65aedec42f2b5c5: + /@typescript-eslint/eslint-plugin/1.12.0_db854cf46887ef4aa7b9323cccc417a5: dependencies: - '@typescript-eslint/experimental-utils': 1.11.0_eslint@5.16.0+typescript@3.5.3 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/experimental-utils': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 eslint: 5.16.0 - eslint-utils: 1.3.1 + eslint-utils: 1.4.0 functional-red-black-tree: 1.0.1 regexpp: 2.0.1 tsutils: 3.14.0_typescript@3.5.3 @@ -753,10 +746,10 @@ packages: eslint: ^5.0.0 typescript: '*' resolution: - integrity: sha512-mXv9ccCou89C8/4avKHuPB2WkSZyY/XcTQUXd5LFZAcLw1I3mWYVjUu6eS9Ja0QkP/ClolbcW9tb3Ov/pMdcqw== - /@typescript-eslint/experimental-utils/1.11.0_eslint@5.16.0+typescript@3.5.3: + integrity: sha512-J/ZTZF+pLNqjXBGNfq5fahsoJ4vJOkYbitWPavA05IrZ7BXUaf4XWlhUB/ic1lpOGTRpLWF+PLAePjiHp6dz8g== + /@typescript-eslint/experimental-utils/1.12.0_eslint@5.16.0+typescript@3.5.3: dependencies: - '@typescript-eslint/typescript-estree': 1.11.0 + '@typescript-eslint/typescript-estree': 1.12.0 eslint: 5.16.0 eslint-scope: 4.0.3 typescript: 3.5.3 @@ -767,12 +760,12 @@ packages: eslint: '*' typescript: '*' resolution: - integrity: sha512-7LbfaqF6B8oa8cp/315zxKk8FFzosRzzhF8Kn/ZRsRsnpm7Qcu25cR/9RnAQo5utZ2KIWVgaALr+ZmcbG47ruw== - /@typescript-eslint/parser/1.11.0_eslint@5.16.0+typescript@3.5.3: + integrity: sha512-s0soOTMJloytr9GbPteMLNiO2HvJ+qgQkRNplABXiVw6vq7uQRvidkby64Gqt/nA7pys74HksHwRULaB/QRVyw== + /@typescript-eslint/parser/1.12.0_eslint@5.16.0+typescript@3.5.3: dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 1.11.0_eslint@5.16.0+typescript@3.5.3 - '@typescript-eslint/typescript-estree': 1.11.0 + '@typescript-eslint/experimental-utils': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/typescript-estree': 1.12.0 eslint: 5.16.0 eslint-visitor-keys: 1.0.0 dev: false @@ -782,8 +775,8 @@ packages: eslint: ^5.0.0 typescript: '*' resolution: - integrity: sha512-5xBExyXaxVyczrZvbRKEXvaTUFFq7gIM9BynXukXZE0zF3IQP/FxF4mPmmh3gJ9egafZFqByCpPTFm3dk4SY7Q== - /@typescript-eslint/typescript-estree/1.11.0: + integrity: sha512-0uzbaa9ZLCA5yMWJywnJJ7YVENKGWVUhJDV5UrMoldC5HoI54W5kkdPhTfmtFKpPFp93MIwmJj0/61ztvmz5Dw== + /@typescript-eslint/typescript-estree/1.12.0: dependencies: lodash.unescape: 4.0.1 semver: 5.5.0 @@ -791,7 +784,7 @@ packages: engines: node: '>=6.14.0' resolution: - integrity: sha512-fquUHF5tAx1sM2OeRCC7wVxFd1iMELWMGCzOSmJ3pLzArj9+kRixdlC4d5MncuzXpjEqc6045p3KwM0o/3FuUA== + integrity: sha512-nwN6yy//XcVhFs0ZyU+teJHB8tbCm7AIA8mu6E2r5hu6MajwYBY3Uwop7+rPZWUN/IUOHpL8C+iUPMDVYUU3og== /@webassemblyjs/ast/1.8.5: dependencies: '@webassemblyjs/helper-module-context': 1.8.5 @@ -980,7 +973,7 @@ packages: /adal-node/0.1.28: dependencies: '@types/node': 8.10.50 - async: 3.1.0 + async: 2.6.3 date-utils: 1.2.21 jws: 3.2.2 request: 2.88.0 @@ -1005,23 +998,23 @@ packages: node: '>= 4.0.0' resolution: integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - /ajv-errors/1.0.1_ajv@6.10.1: + /ajv-errors/1.0.1_ajv@6.10.2: dependencies: - ajv: 6.10.1 + ajv: 6.10.2 dev: false peerDependencies: ajv: '>=5.0.0' resolution: integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - /ajv-keywords/3.4.1_ajv@6.10.1: + /ajv-keywords/3.4.1_ajv@6.10.2: dependencies: - ajv: 6.10.1 + ajv: 6.10.2 dev: false peerDependencies: ajv: ^6.9.1 resolution: integrity: sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - /ajv/6.10.1: + /ajv/6.10.2: dependencies: fast-deep-equal: 2.0.1 fast-json-stable-stringify: 2.0.0 @@ -1029,7 +1022,7 @@ packages: uri-js: 4.2.2 dev: false resolution: - integrity: sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ== + integrity: sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== /amdefine/1.0.1: dev: false engines: @@ -1125,6 +1118,13 @@ packages: dev: false resolution: integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + /anymatch/3.0.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.0.7 + dev: false + resolution: + integrity: sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== /append-buffer/1.0.2: dependencies: buffer-equal: 1.0.0 @@ -1363,10 +1363,10 @@ packages: dev: false resolution: integrity: sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - /async-lock/1.2.0: + /async-lock/1.2.2: dev: false resolution: - integrity: sha512-81HzTQm4+qMj6PwNlnR+y9g7pDdGGzd/YBUrQnHk+BhR28ja2qv497NkQQc1KcKEqh/RShm07di2b0cIWVFrNQ== + integrity: sha512-uczz62z2fMWOFbyo6rG4NlV2SdxugJT6sZA2QcfB1XaSjEiOh8CuOb/TttyMnYQCda6nkWecJe465tGQDPJiKw== /async-settle/1.0.0: dependencies: async-done: 1.3.2 @@ -1385,16 +1385,12 @@ packages: dev: false resolution: integrity: sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw== - /async/2.6.2: + /async/2.6.3: dependencies: lodash: 4.17.14 dev: false resolution: - integrity: sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - /async/3.1.0: - dev: false - resolution: - integrity: sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== + integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== /asynckit/0.4.0: dev: false resolution: @@ -1991,6 +1987,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + /binary-extensions/2.0.0: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== /binary-search-bounds/2.0.3: dev: false resolution: @@ -2048,6 +2050,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== /brorand/1.1.0: dev: false resolution: @@ -2115,8 +2125,8 @@ packages: integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== /browserslist/3.2.8: dependencies: - caniuse-lite: 1.0.30000983 - electron-to-chromium: 1.3.190 + caniuse-lite: 1.0.30000984 + electron-to-chromium: 1.3.191 dev: false hasBin: true resolution: @@ -2298,10 +2308,10 @@ packages: node: '>=6' resolution: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - /caniuse-lite/1.0.30000983: + /caniuse-lite/1.0.30000984: dev: false resolution: - integrity: sha512-/llD1bZ6qwNkt41AsvjsmwNOoA4ZB+8iqmf5LVyeSXuBODT/hAMFNVOh84NdUzoiYiSKqo5vQ3ZzeYHSi/olDQ== + integrity: sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA== /caseless/0.12.0: dev: false resolution: @@ -2388,6 +2398,22 @@ packages: fsevents: 1.2.9 resolution: integrity: sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + /chokidar/3.0.2: + dependencies: + anymatch: 3.0.3 + braces: 3.0.2 + glob-parent: 5.0.0 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.1.1 + dev: false + engines: + node: '>= 8' + optionalDependencies: + fsevents: 2.0.7 + resolution: + integrity: sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== /chownr/1.1.2: dev: false resolution: @@ -2713,6 +2739,11 @@ packages: requiresBuild: true resolution: integrity: sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + /core-js/3.1.4: + dev: false + requiresBuild: true + resolution: + integrity: sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ== /core-util-is/1.0.2: dev: false resolution: @@ -3150,10 +3181,10 @@ packages: dev: false resolution: integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - /electron-to-chromium/1.3.190: + /electron-to-chromium/1.3.191: dev: false resolution: - integrity: sha512-cs9WnTnGBGnYYVFMCtLmr9jXNTOkdp95RLz5VhwzDn7dErg1Lnt9o4d01gEH69XlmRKWUr91Yu1hA+Hi8qW0PA== + integrity: sha512-jasjtY5RUy/TOyiUYM2fb4BDaPZfm6CXRFeJDMfFsXYADGxUN49RBqtgB7EL2RmJXeIRUk9lM1U6A5yk2YJMPQ== /elliptic/6.5.0: dependencies: bn.js: 4.11.8 @@ -3405,12 +3436,14 @@ packages: node: '>=4.0.0' resolution: integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - /eslint-utils/1.3.1: + /eslint-utils/1.4.0: + dependencies: + eslint-visitor-keys: 1.0.0 dev: false engines: node: '>=6' resolution: - integrity: sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + integrity: sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== /eslint-visitor-keys/1.0.0: dev: false engines: @@ -3420,13 +3453,13 @@ packages: /eslint/5.16.0: dependencies: '@babel/code-frame': 7.0.0 - ajv: 6.10.1 + ajv: 6.10.2 chalk: 2.4.2 cross-spawn: 6.0.5 debug: 4.1.1 doctrine: 3.0.0 eslint-scope: 4.0.3 - eslint-utils: 1.3.1 + eslint-utils: 1.4.0 eslint-visitor-keys: 1.0.0 espree: 5.0.1 esquery: 1.0.1 @@ -3779,6 +3812,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + /fill-range/7.0.1: + dependencies: + to-regex-range: 5.0.1 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== /finalhandler/1.1.2: dependencies: debug: 2.6.9 @@ -4039,6 +4080,13 @@ packages: requiresBuild: true resolution: integrity: sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + /fsevents/2.0.7: + dev: false + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + resolution: + integrity: sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== /function-bind/1.1.1: dev: false resolution: @@ -4106,6 +4154,14 @@ packages: dev: false resolution: integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + /glob-parent/5.0.0: + dependencies: + is-glob: 4.0.1 + dev: false + engines: + node: '>= 6' + resolution: + integrity: sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== /glob-stream/6.1.0: dependencies: extend: 3.0.2 @@ -4324,7 +4380,7 @@ packages: integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= /har-validator/5.1.3: dependencies: - ajv: 6.10.1 + ajv: 6.10.2 har-schema: 2.0.0 dev: false engines: @@ -4719,6 +4775,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + /is-binary-path/2.1.0: + dependencies: + binary-extensions: 2.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== /is-buffer/1.1.6: dev: false resolution: @@ -4865,6 +4929,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + /is-number/7.0.0: + dev: false + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== /is-obj/1.0.1: dev: false engines: @@ -5240,10 +5310,10 @@ packages: dev: false resolution: integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - /karma-chai/0.1.0_chai@4.2.0+karma@4.1.0: + /karma-chai/0.1.0_chai@4.2.0+karma@4.2.0: dependencies: chai: 4.2.0 - karma: 4.1.0 + karma: 4.2.0 dev: false peerDependencies: chai: '*' @@ -5267,10 +5337,10 @@ packages: dev: false resolution: integrity: sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== - /karma-edge-launcher/0.4.2_karma@4.1.0: + /karma-edge-launcher/0.4.2_karma@4.2.0: dependencies: edge-launcher: 1.2.2 - karma: 4.1.0 + karma: 4.2.0 dev: false engines: node: '>=4' @@ -5286,18 +5356,18 @@ packages: dev: false resolution: integrity: sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA== - /karma-ie-launcher/1.0.0_karma@4.1.0: + /karma-ie-launcher/1.0.0_karma@4.2.0: dependencies: - karma: 4.1.0 + karma: 4.2.0 lodash: 4.17.14 dev: false peerDependencies: karma: '>=0.9' resolution: integrity: sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw= - /karma-json-preprocessor/0.3.3_karma@4.1.0: + /karma-json-preprocessor/0.3.3_karma@4.2.0: dependencies: - karma: 4.1.0 + karma: 4.2.0 dev: false peerDependencies: karma: '>=0.9' @@ -5309,9 +5379,9 @@ packages: dev: false resolution: integrity: sha512-kNCi+0UrXAeTJMpMsHkHNbfmlErsYT+/haNakJIhsE/gtj3Jx7zWRg7BTc1HHSbH5KeVXVRJr3/KLB/NHWY7Hg== - /karma-junit-reporter/1.2.0_karma@4.1.0: + /karma-junit-reporter/1.2.0_karma@4.2.0: dependencies: - karma: 4.1.0 + karma: 4.2.0 path-is-absolute: 1.0.1 xmlbuilder: 8.2.2 dev: false @@ -5319,10 +5389,10 @@ packages: karma: '>=0.9' resolution: integrity: sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y= - /karma-mocha-reporter/2.2.5_karma@4.1.0: + /karma-mocha-reporter/2.2.5_karma@4.2.0: dependencies: chalk: 2.4.2 - karma: 4.1.0 + karma: 4.2.0 log-symbols: 2.2.0 strip-ansi: 4.0.0 dev: false @@ -5347,11 +5417,11 @@ packages: karma-coverage: '>=0.5.4' resolution: integrity: sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw== - /karma-rollup-preprocessor/7.0.0_rollup@1.16.7: + /karma-rollup-preprocessor/7.0.0_rollup@1.17.0: dependencies: chokidar: 2.1.6 debounce: 1.2.0 - rollup: 1.16.7 + rollup: 1.17.0 dev: false engines: node: '>= 8.0.0' @@ -5371,7 +5441,7 @@ packages: acorn-walk: 6.2.0 babel-core: 6.26.3 babel-preset-env: 1.7.0 - log4js: 4.5.0 + log4js: 4.5.1 magic-string: 0.25.3 dev: false resolution: @@ -5392,15 +5462,15 @@ packages: webpack: ^4.0.0 resolution: integrity: sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A== - /karma/4.1.0: + /karma/4.2.0: dependencies: bluebird: 3.5.5 body-parser: 1.19.0 - braces: 2.3.2 - chokidar: 2.1.6 + braces: 3.0.2 + chokidar: 3.0.2 colors: 1.3.3 connect: 3.7.0 - core-js: 2.6.9 + core-js: 3.1.4 di: 0.0.1 dom-serialize: 2.2.1 flatted: 2.0.1 @@ -5409,7 +5479,7 @@ packages: http-proxy: 1.17.0 isbinaryfile: 3.0.3 lodash: 4.17.14 - log4js: 4.5.0 + log4js: 4.5.1 mime: 2.4.4 minimatch: 3.0.4 optimist: 0.6.1 @@ -5426,7 +5496,7 @@ packages: node: '>= 8' hasBin: true resolution: - integrity: sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw== + integrity: sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA== /kind-of/1.1.0: dev: false engines: @@ -5634,18 +5704,18 @@ packages: node: '>=6.0' resolution: integrity: sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ== - /log4js/4.5.0: + /log4js/4.5.1: dependencies: date-format: 2.0.0 debug: 4.1.1 flatted: 2.0.1 rfdc: 1.1.4 - streamroller: 1.0.5 + streamroller: 1.0.6 dev: false engines: node: '>=6.0' resolution: - integrity: sha512-mYtGcbmu//OprhT7prJM2erY9nPXM2TMLM/mBLPo4FojntEZz/V34d06SVBXeQ6EsryMkLJhHuXCWCQNoPW8hQ== + integrity: sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== /loglevel/1.6.3: dev: false engines: @@ -6435,7 +6505,7 @@ packages: spawn-wrap: 1.4.2 test-exclude: 5.2.3 uuid: 3.3.2 - yargs: 13.2.4 + yargs: 13.3.0 yargs-parser: 13.1.1 dev: false engines: @@ -6921,6 +6991,12 @@ packages: dev: false resolution: integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + /picomatch/2.0.7: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== /pidtree/0.3.0: dev: false engines: @@ -7315,6 +7391,14 @@ packages: node: '>=0.10' resolution: integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + /readdirp/3.1.1: + dependencies: + picomatch: 2.0.7 + dev: false + engines: + node: '>= 8' + resolution: + integrity: sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== /rechoir/0.6.2: dependencies: resolve: 1.11.1 @@ -7640,13 +7724,13 @@ packages: dev: false resolution: integrity: sha512-ODeZXhTxpD48sfcYLAFc1BGrsXKDj7o1CSNH3uYbdK3o0NxyMmaQPTNgW+ko+am92DLC8QSTe4kyxTuEkI5S5w== - /rollup-plugin-commonjs/10.0.1_rollup@1.16.7: + /rollup-plugin-commonjs/10.0.1_rollup@1.17.0: dependencies: estree-walker: 0.6.1 is-reference: 1.1.3 magic-string: 0.25.3 resolve: 1.11.1 - rollup: 1.16.7 + rollup: 1.17.0 rollup-pluginutils: 2.8.1 dev: false peerDependencies: @@ -7684,13 +7768,13 @@ packages: dev: false resolution: integrity: sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== - /rollup-plugin-node-resolve/5.2.0_rollup@1.16.7: + /rollup-plugin-node-resolve/5.2.0_rollup@1.17.0: dependencies: '@types/resolve': 0.0.8 builtin-modules: 3.1.0 is-module: 1.0.0 resolve: 1.11.1 - rollup: 1.16.7 + rollup: 1.17.0 rollup-pluginutils: 2.8.1 dev: false peerDependencies: @@ -7712,9 +7796,9 @@ packages: dev: false resolution: integrity: sha512-rZqFD43y4U9nSqVq3iyWBiDwmBQJY8Txi04yI9jTKD3xcl7CbFjh1qRpQshUB3sONLubDzm7vJiwB+1MEGv67w== - /rollup-plugin-sourcemaps/0.4.2_rollup@1.16.7: + /rollup-plugin-sourcemaps/0.4.2_rollup@1.17.0: dependencies: - rollup: 1.16.7 + rollup: 1.17.0 rollup-pluginutils: 2.8.1 source-map-resolve: 0.5.2 dev: false @@ -7725,11 +7809,11 @@ packages: rollup: '>=0.31.2' resolution: integrity: sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= - /rollup-plugin-terser/5.1.1_rollup@1.16.7: + /rollup-plugin-terser/5.1.1_rollup@1.17.0: dependencies: '@babel/code-frame': 7.0.0 jest-worker: 24.6.0 - rollup: 1.16.7 + rollup: 1.17.0 rollup-pluginutils: 2.8.1 serialize-javascript: 1.7.0 terser: 4.1.2 @@ -7738,11 +7822,11 @@ packages: rollup: '>=0.66.0 <2' resolution: integrity: sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ== - /rollup-plugin-uglify/6.0.2_rollup@1.16.7: + /rollup-plugin-uglify/6.0.2_rollup@1.17.0: dependencies: '@babel/code-frame': 7.0.0 jest-worker: 24.6.0 - rollup: 1.16.7 + rollup: 1.17.0 serialize-javascript: 1.7.0 uglify-js: 3.6.0 dev: false @@ -7750,12 +7834,12 @@ packages: rollup: '>=0.66.0 <2' resolution: integrity: sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== - /rollup-plugin-visualizer/2.4.4_rollup@1.16.7: + /rollup-plugin-visualizer/2.4.4_rollup@1.17.0: dependencies: mkdirp: 0.5.1 open: 6.4.0 pupa: 2.0.0 - rollup: 1.16.7 + rollup: 1.17.0 source-map: 0.7.3 dev: false engines: @@ -7770,15 +7854,15 @@ packages: dev: false resolution: integrity: sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== - /rollup/1.16.7: + /rollup/1.17.0: dependencies: '@types/estree': 0.0.39 - '@types/node': 12.6.2 + '@types/node': 12.6.3 acorn: 6.2.0 dev: false hasBin: true resolution: - integrity: sha512-P3GVcbVSLLjHWFLKGerYRe3Q/yggRXmTZFx/4WZf4wzGwO6hAg5jyMAFMQKc0dts8rFID4BQngfoz6yQbI7iMQ== + integrity: sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw== /run-async/2.3.0: dependencies: is-promise: 2.1.0 @@ -7829,9 +7913,9 @@ packages: integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== /schema-utils/1.0.0: dependencies: - ajv: 6.10.1 - ajv-errors: 1.0.1_ajv@6.10.1 - ajv-keywords: 3.4.1_ajv@6.10.1 + ajv: 6.10.2 + ajv-errors: 1.0.1_ajv@6.10.2 + ajv-keywords: 3.4.1_ajv@6.10.2 dev: false engines: node: '>= 4' @@ -8296,9 +8380,9 @@ packages: node: '>=0.12.0' resolution: integrity: sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ== - /streamroller/1.0.5: + /streamroller/1.0.6: dependencies: - async: 2.6.2 + async: 2.6.3 date-format: 2.0.0 debug: 3.2.6 fs-extra: 7.0.1 @@ -8307,7 +8391,7 @@ packages: engines: node: '>=6.0' resolution: - integrity: sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw== + integrity: sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== /strict-uri-encode/1.1.0: dev: false engines: @@ -8481,7 +8565,7 @@ packages: integrity: sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= /table/5.4.1: dependencies: - ajv: 6.10.1 + ajv: 6.10.2 lodash: 4.17.14 slice-ansi: 2.1.0 string-width: 3.1.0 @@ -8654,6 +8738,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + dev: false + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== /to-regex/3.0.2: dependencies: define-property: 2.0.2 @@ -9173,7 +9265,7 @@ packages: dev: false resolution: integrity: sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - /webpack-cli/3.3.5_webpack@4.35.3: + /webpack-cli/3.3.6_webpack@4.35.3: dependencies: chalk: 2.4.2 cross-spawn: 6.0.5 @@ -9194,7 +9286,7 @@ packages: peerDependencies: webpack: 4.x.x resolution: - integrity: sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ== + integrity: sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== /webpack-dev-middleware/3.7.0_webpack@4.35.3: dependencies: memory-fs: 0.4.1 @@ -9232,8 +9324,8 @@ packages: '@webassemblyjs/wasm-edit': 1.8.5 '@webassemblyjs/wasm-parser': 1.8.5 acorn: 6.2.0 - ajv: 6.10.1 - ajv-keywords: 3.4.1_ajv@6.10.1 + ajv: 6.10.2 + ajv-keywords: 3.4.1_ajv@6.10.2 chrome-trace-event: 1.0.2 enhanced-resolve: 4.1.0 eslint-scope: 4.0.3 @@ -9476,6 +9568,21 @@ packages: dev: false resolution: integrity: sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + /yargs/13.3.0: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.0 + yargs-parser: 13.1.1 + dev: false + resolution: + integrity: sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== /yargs/7.1.0: dependencies: camelcase: 3.0.0 @@ -9494,13 +9601,13 @@ packages: dev: false resolution: integrity: sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - /yarn/1.16.0: + /yarn/1.17.3: dev: false engines: node: '>=4.0.0' hasBin: true resolution: - integrity: sha512-cfemyGlnWKA1zopUUgebTPf8C4WkPIZ+TJmklwcEAJ4u6oWPtJeAzrsamaGGh/+b1XWe8W51yzAImC4AWbWR1g== + integrity: sha512-CgA8o7nRZaQvmeF/WBx2FC7f9W/0X59T2IaLYqgMo6637wfp5mMEsM3YXoJtKUspnpmDJKl/gGFhnqS+sON7hA== /yauzl/2.4.1: dependencies: fd-slicer: 1.0.1 @@ -9536,11 +9643,11 @@ packages: integrity: sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== 'file:projects/abort-controller.tgz': dependencies: - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/mocha': 5.2.7 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 delay: 4.3.0 @@ -9550,16 +9657,16 @@ packages: eslint-plugin-no-null: 1.0.2_eslint@5.16.0 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -9567,19 +9674,19 @@ packages: nyc: 14.1.1 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 dev: false name: '@rush-temp/abort-controller' resolution: - integrity: sha512-QzyWDAVpqT9O978eRMOueC1BnAEvglhzhy7BxxR21arkIKwj8ivcYwLVdQZDkZipTky/O4MZlO3ZnDGi89QlZQ== + integrity: sha512-2+IDAPkc8w6F7v+Qtv+0QlKup7BbSj9/FJRqus2Fv6lv4Qwfhhl1dII2Ttv0Y3D1jF0IlqOecuzEef9zxLc/jA== tarball: 'file:projects/abort-controller.tgz' version: 0.0.0 'file:projects/core-amqp.tgz': @@ -9594,10 +9701,10 @@ packages: '@types/mocha': 5.2.7 '@types/node': 8.10.50 '@types/sinon': 5.0.7 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 - async-lock: 1.2.0 + async-lock: 1.2.2 buffer: 5.2.1 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 @@ -9613,7 +9720,7 @@ packages: events: 3.0.0 is-buffer: 2.0.3 jssha: 2.3.1 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-mocha: 1.3.0 mocha: 5.2.0 @@ -9626,17 +9733,17 @@ packages: rhea: 1.0.8 rhea-promise: 0.1.15 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-inject: 3.0.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 sinon: 7.3.2 stream-browserify: 2.0.2 ts-node: 7.0.1 @@ -9648,7 +9755,7 @@ packages: dev: false name: '@rush-temp/core-amqp' resolution: - integrity: sha512-Jz3QXVrDs186fKzZbn1zBpEPrOrnBzkbg9YdZtgRpVomMCNkzXuAS3xiqWNTUeCtfrJmencleLHXjMOiAqwDZA== + integrity: sha512-pH12zXk5V3XB+ZgCEfAwPIhOySH/1TOgwMRcPRGpjWewRNJNYZNL4dX/yu4Gq+ms8XKgK2u+Yl8lp7N/7CYmWw== tarball: 'file:projects/core-amqp.tgz' version: 0.0.0 'file:projects/core-arm.tgz': @@ -9664,10 +9771,10 @@ packages: nyc: 14.1.1 opn-cli: 4.1.0 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 shx: 0.3.2 ts-loader: 5.4.5_typescript@3.5.3 ts-node: 7.0.1 @@ -9675,7 +9782,7 @@ packages: tslint: 5.18.0_typescript@3.5.3 typescript: 3.5.3 uglify-js: 3.6.0 - yarn: 1.16.0 + yarn: 1.17.3 dev: false name: '@rush-temp/core-arm' resolution: @@ -9685,8 +9792,8 @@ packages: 'file:projects/core-asynciterator-polyfill.tgz': dependencies: '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 eslint-detailed-reporter: 0.8.0_eslint@5.16.0 @@ -9703,11 +9810,11 @@ packages: version: 0.0.0 'file:projects/core-auth.tgz': dependencies: - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/mocha': 5.2.7 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 @@ -9722,22 +9829,22 @@ packages: mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 dev: false name: '@rush-temp/core-auth' resolution: - integrity: sha512-akV7r5ANBOjNmBbw1NvDSYcbBy/J7I1hJ6QFDYA1wj2z6sU7lb1FJI/lDaobNjy7AvzZ+BsHy9Yj3plqmvlGaA== + integrity: sha512-MhDSymfCLIHeHlYVi0KQ4oXsKUrRGUrEtwNYEbB8nq7BkXZRsiuEyv8LuffmWh+ipeHLWPhMnEW94EoRIqSiyw== tarball: 'file:projects/core-auth.tgz' version: 0.0.0 'file:projects/core-http.tgz': @@ -9745,7 +9852,6 @@ packages: '@azure/logger-js': 1.3.2 '@types/chai': 4.1.7 '@types/express': 4.17.0 - '@types/form-data': 2.2.1 '@types/glob': 7.1.1 '@types/karma': 3.0.3 '@types/mocha': 5.2.7 @@ -9755,11 +9861,11 @@ packages: '@types/tough-cookie': 2.3.5 '@types/tunnel': 0.0.0 '@types/uuid': 3.4.5 - '@types/webpack': 4.4.34 + '@types/webpack': 4.4.35 '@types/webpack-dev-middleware': 2.0.3 '@types/xml2js': 0.4.4 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 abortcontroller-polyfill: 1.3.0 axios: 0.19.0 axios-mock-adapter: 1.17.0_axios@0.19.0 @@ -9773,11 +9879,11 @@ packages: express: 4.17.1 form-data: 2.5.0 glob: 7.1.4 - karma: 4.1.0 - karma-chai: 0.1.0_chai@4.2.0+karma@4.1.0 + karma: 4.2.0 + karma-chai: 0.1.0_chai@4.2.0+karma@4.2.0 karma-chrome-launcher: 2.2.0 karma-mocha: 1.3.0 - karma-rollup-preprocessor: 7.0.0_rollup@1.16.7 + karma-rollup-preprocessor: 7.0.0_rollup@1.17.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 karma-webpack: 4.0.2_webpack@4.35.3 @@ -9791,15 +9897,15 @@ packages: process: 0.11.10 puppeteer: 1.18.1 rimraf: 2.6.3 - rollup: 1.16.7 + rollup: 1.17.0 rollup-plugin-alias: 1.5.2 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-resolve: 0.0.1-predev.1 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 semver: 5.7.0 shx: 0.3.2 sinon: 7.3.2 @@ -9812,22 +9918,22 @@ packages: uglify-js: 3.6.0 uuid: 3.3.2 webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.5_webpack@4.35.3 + webpack-cli: 3.3.6_webpack@4.35.3 webpack-dev-middleware: 3.7.0_webpack@4.35.3 xhr-mock: 2.4.1 xml2js: 0.4.19 - yarn: 1.16.0 + yarn: 1.17.3 dev: false name: '@rush-temp/core-http' resolution: - integrity: sha512-wm2OlqXnbEFpZKYmqGqKlsgmfdgzTYODsAlnhvfpLXD+uwHFQOHVNc6KUFdY8SAoH3t1kyaZjyxI+nTp0ihMcQ== + integrity: sha512-j8oocZ+3uRVuagmj58ue9BHFKpv2fqQMJlL2LX3PQS4q0H2Rwv+z2kppAbFmAcORldCuShH8X2K61znVkFwCVw== tarball: 'file:projects/core-http.tgz' version: 0.0.0 'file:projects/core-paging.tgz': dependencies: '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 eslint-detailed-reporter: 0.8.0_eslint@5.16.0 @@ -9851,8 +9957,8 @@ packages: '@types/sinon': 5.0.7 '@types/tunnel': 0.0.0 '@types/underscore': 1.9.2 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 binary-search-bounds: 2.0.3 create-hmac: 1.1.7 eslint: 5.16.0 @@ -9877,7 +9983,7 @@ packages: tunnel: 0.0.6 typescript: 3.5.3 webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.5_webpack@4.35.3 + webpack-cli: 3.3.6_webpack@4.35.3 dev: false name: '@rush-temp/cosmos' resolution: @@ -9886,7 +9992,7 @@ packages: version: 0.0.0 'file:projects/event-hubs.tgz': dependencies: - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -9898,10 +10004,10 @@ packages: '@types/node': 8.10.50 '@types/uuid': 3.4.5 '@types/ws': 6.0.1 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 - async-lock: 1.2.0 + async-lock: 1.2.2 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 chai-string: 1.5.0_chai@4.2.0 @@ -9917,16 +10023,16 @@ packages: https-proxy-agent: 2.2.2 is-buffer: 2.0.3 jssha: 2.3.1 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -9936,16 +10042,16 @@ packages: puppeteer: 1.18.1 rhea-promise: 0.1.15 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-inject: 3.0.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 ts-mocha: 6.0.0_mocha@5.2.0 ts-node: 7.0.1 tslib: 1.10.0 @@ -9955,13 +10061,13 @@ packages: dev: false name: '@rush-temp/event-hubs' resolution: - integrity: sha512-4SXlBNNpio9rKF27gt7/ROBdlKbdDYx5i0Vx2M9yYumMcG+kkGTBb/k80ef+RKx1FuvRCeEsZbsVlWFMYvDxWA== + integrity: sha512-E0udJXYTcWrpWxUM38hWHnk35qsmXDG5ywVW4j492xsASvwyE/lBUl0vXZ/IT+2w3GHnEQiydeNxysUw6EflQg== tarball: 'file:projects/event-hubs.tgz' version: 0.0.0 'file:projects/event-processor-host.tgz': dependencies: '@azure/event-hubs': 1.0.8 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -9971,9 +10077,9 @@ packages: '@types/mocha': 5.2.7 '@types/node': 8.10.50 '@types/uuid': 3.4.5 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 - async-lock: 1.2.0 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + async-lock: 1.2.2 azure-storage: 2.10.3 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 @@ -9995,14 +10101,14 @@ packages: path-browserify: 1.0.0 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-uglify: 6.0.2_rollup@1.17.0 ts-node: 7.0.1 tslib: 1.10.0 typescript: 3.5.3 @@ -10020,23 +10126,23 @@ packages: '@types/node': 8.10.50 '@types/qs': 6.5.3 '@types/uuid': 3.4.5 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 events: 3.0.0 inherits: 2.0.4 jws: 3.2.2 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 karma-env-preprocessor: 0.1.1 - karma-json-preprocessor: 0.3.3_karma@4.1.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -10045,15 +10151,15 @@ packages: puppeteer: 1.18.1 qs: 6.7.0 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-terser: 5.1.1_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 @@ -10066,11 +10172,11 @@ packages: version: 0.0.0 'file:projects/keyvault-certificates.tgz': dependencies: - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/chai': 4.1.7 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 chai: 4.2.0 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 @@ -10080,9 +10186,9 @@ packages: eslint-plugin-promise: 4.2.1 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 uglify-js: 3.6.0 @@ -10095,15 +10201,15 @@ packages: version: 0.0.0 'file:projects/keyvault-keys.tgz': dependencies: - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/chai': 4.1.7 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nock': 10.0.3 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 chai: 4.2.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10118,9 +10224,9 @@ packages: nock: 10.0.6 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 @@ -10136,15 +10242,15 @@ packages: dependencies: '@azure/ms-rest-azure-js': 1.3.8 '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/chai': 4.1.7 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nock': 10.0.3 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 chai: 4.2.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10159,9 +10265,9 @@ packages: nock: 10.0.6 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 @@ -10178,7 +10284,7 @@ packages: '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 '@azure/arm-servicebus': 0.1.0 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -10189,8 +10295,8 @@ packages: '@types/mocha': 5.2.7 '@types/node': 8.10.50 '@types/ws': 6.0.1 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 buffer: 5.2.1 chai: 4.2.0 @@ -10207,16 +10313,16 @@ packages: eslint-plugin-promise: 4.2.1 https-proxy-agent: 2.2.2 is-buffer: 2.0.3 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 long: 4.0.0 mocha: 5.2.0 @@ -10231,16 +10337,16 @@ packages: rhea: 1.0.8 rhea-promise: 0.1.15 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-inject: 3.0.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-terser: 5.1.1_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 ts-node: 7.0.1 tslib: 1.10.0 typescript: 3.5.3 @@ -10254,7 +10360,7 @@ packages: 'file:projects/storage-blob.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 @@ -10262,8 +10368,8 @@ packages: '@types/nock': 10.0.3 '@types/node': 8.10.50 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10279,18 +10385,18 @@ packages: gulp: 4.0.2 gulp-zip: 4.2.0 inherits: 2.0.4 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-json-preprocessor: 0.3.3_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -10302,15 +10408,15 @@ packages: puppeteer: 1.18.1 query-string: 5.1.1 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10319,13 +10425,13 @@ packages: dev: false name: '@rush-temp/storage-blob' resolution: - integrity: sha512-GN9dJLmBjN9/yKq4HFq2nJ9sTh+F7bFEhsbZXOreWSYotiyVBo9HbqxjCj9GHlWcyYcQ3JtXt2CEggqmZgV/JA== + integrity: sha512-4105iXB3hoaFSq5UdvNfztT1BgIPpS9xe/jnH5QPvhO5vxg7S0zIh7RuKqQE9BjpVpbNYU03ANCVnaymnDmZOQ== tarball: 'file:projects/storage-blob.tgz' version: 0.0.0 'file:projects/storage-file.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 @@ -10333,8 +10439,8 @@ packages: '@types/nock': 10.0.3 '@types/node': 8.10.50 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10350,18 +10456,18 @@ packages: gulp: 4.0.2 gulp-zip: 4.2.0 inherits: 2.0.4 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-json-preprocessor: 0.3.3_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -10373,15 +10479,15 @@ packages: puppeteer: 1.18.1 query-string: 5.1.1 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10390,13 +10496,13 @@ packages: dev: false name: '@rush-temp/storage-file' resolution: - integrity: sha512-IRqfOeXpG7XSL5GrT4zL3mvy2ZzCeCICSmo3Tj6V6h9eEHHnWwqcfd7FZR1sYVvAn+nN4NhFph3ptdrSW1hSmg== + integrity: sha512-juOCmmDWgZhQNzudPSlmhETCWJ2pXvezQg1oaVg+MNtkkz8uD2q03kXb7yfYOEM+w9cegsJZUp3jCXt61VkPtQ== tarball: 'file:projects/storage-file.tgz' version: 0.0.0 'file:projects/storage-queue.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 @@ -10404,8 +10510,8 @@ packages: '@types/nock': 10.0.3 '@types/node': 8.10.50 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10420,18 +10526,18 @@ packages: gulp: 4.0.2 gulp-zip: 4.2.0 inherits: 2.0.4 - karma: 4.1.0 + karma: 4.2.0 karma-chrome-launcher: 2.2.0 karma-coverage: 1.1.2 - karma-edge-launcher: 0.4.2_karma@4.1.0 + karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.1.0 - karma-ie-launcher: 1.0.0_karma@4.1.0 - karma-json-preprocessor: 0.3.3_karma@4.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 - karma-junit-reporter: 1.2.0_karma@4.1.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 - karma-mocha-reporter: 2.2.5_karma@4.1.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 @@ -10443,15 +10549,15 @@ packages: puppeteer: 1.18.1 query-string: 5.1.1 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10460,17 +10566,17 @@ packages: dev: false name: '@rush-temp/storage-queue' resolution: - integrity: sha512-mWuY5OZImZ9GGy7h2otuIgonajJJHiVfWXPqWB5mD/YArcWtFLqw8ozB3ZaRZrE7FQ6C9xR3jpeHwO3jA9jhlw== + integrity: sha512-s5r16h2hU8MIPBfqhtCgY59+GGhaRwA+vdgVyFzzlWvwd3IE3MDSc/GjVHDXFt0bHes3PU3AQQU6el2IURCm2w== tarball: 'file:projects/storage-queue.tgz' version: 0.0.0 'file:projects/template.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.1 + '@microsoft/api-extractor': 7.3.2 '@types/mocha': 5.2.7 '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.11.0_8d1711d609953acbf65aedec42f2b5c5 - '@typescript-eslint/parser': 1.11.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 + '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 @@ -10481,42 +10587,65 @@ packages: eslint-plugin-promise: 4.2.1 events: 3.0.0 inherits: 2.0.4 + karma: 4.2.0 + karma-chrome-launcher: 2.2.0 + karma-coverage: 1.1.2 + karma-edge-launcher: 0.4.2_karma@4.2.0 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-junit-reporter: 1.2.0_karma@4.2.0 + karma-mocha: 1.3.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 + karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 rimraf: 2.6.3 - rollup: 1.16.7 - rollup-plugin-commonjs: 10.0.1_rollup@1.16.7 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.16.7 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.16.7 - rollup-plugin-uglify: 6.0.2_rollup@1.16.7 - rollup-plugin-visualizer: 2.4.4_rollup@1.16.7 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 dev: false name: '@rush-temp/template' resolution: - integrity: sha512-p4x160RdYLlW5VjMpev7fMKCtQoXJ8VFTzHASa7PWeYp41D7G9L7uWUO6PRYysglX5Vm9WuZZpsDmfg+ccVKmQ== + integrity: sha512-Lbng6NWBk6fVPMUAdf3pqeb/y6PrAfaBE8BlVthaVo1FsUn1CnIYdCPJylV3q1WReebpXxvvoh7isVsDNvVZ+Q== tarball: 'file:projects/template.tgz' version: 0.0.0 'file:projects/test-utils-recorder.tgz': dependencies: '@types/fs-extra': 7.0.0 '@types/nise': 1.4.0 + '@types/nock': 10.0.3 '@types/query-string': 6.2.0 fs-extra: 8.0.1 nise: 1.5.0 + nock: 10.0.6 query-string: 5.1.1 + rimraf: 2.6.3 + rollup: 1.17.0 + rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-multi-entry: 2.1.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 + rollup-plugin-replace: 2.2.0 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 tslib: 1.10.0 dev: false name: '@rush-temp/test-utils-recorder' resolution: - integrity: sha512-qFTQoRarxJcjbQivag94ZgufbG5QNR9szDVFo6nEhIyu5ROf+xdJybNEw9A7TJMEo2G18Jwb0HaDxcvUB0PEWA== + integrity: sha512-hnvV5vDHpV/5b/OtgLX49cR/cRXQg6DFtSy1aA1wlGvkU3+nmOEsehYSpSR8B7d49Q3it/cn1ZaI9EimcyVemA== tarball: 'file:projects/test-utils-recorder.tgz' version: 0.0.0 'file:projects/testhub.tgz': @@ -10525,7 +10654,7 @@ packages: '@types/node': 8.10.50 '@types/uuid': 3.4.5 '@types/yargs': 11.1.2 - async-lock: 1.2.0 + async-lock: 1.2.2 death: 1.1.0 debug: 3.2.6 is-buffer: 2.0.3 @@ -10581,7 +10710,6 @@ specifiers: '@types/debug': ^0.0.31 '@types/dotenv': ^6.1.0 '@types/express': ^4.16.0 - '@types/form-data': ^2.2.1 '@types/fs-extra': ~7.0.0 '@types/glob': ^7.1.1 '@types/is-buffer': ^2.0.0 @@ -10637,7 +10765,7 @@ specifiers: events: ^3.0.0 execa: 1.0.0 express: ^4.16.3 - form-data: ^2.3.2 + form-data: ^2.5.0 fs-extra: ~8.0.1 glob: ^7.1.2 gulp: ^4.0.0 From 92bedd870aafd87e335a4bff1948c3d8fdb1f44e Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 14:49:27 -0700 Subject: [PATCH 43/83] mark nock as external for browser --- sdk/test-utils/recorder/rollup.base.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index 86514e637593..3b9c6fbb0709 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -55,7 +55,7 @@ export function nodeConfig(test = false) { export function browserConfig(test = false, production = false) { const baseConfig = { input: input, - external: ["fs-extra"], + external: ["fs-extra", "nock"], output: { file: "browser/azure-test-utils-recorder.js", format: "umd", From 00bb5710bc66cf7cd8052edfe4ca299857b7cb72 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 15:00:39 -0700 Subject: [PATCH 44/83] expose setENV on load --- sdk/test-utils/recorder/src/baseRecorder.ts | 2 +- sdk/test-utils/recorder/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 48e061f5bc2e..08599e4a86d0 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -33,7 +33,7 @@ export function setEnviromentOnLoad() { } if (isPlayingBack) { - // Providing dummy values to avoid the error + // Providing dummy values to avoid the error [ENVs for storage packages] env.ACCOUNT_NAME = "fakestorageaccount"; env.ACCOUNT_KEY = "aaaaa"; env.ACCOUNT_SAS = "aaaaa"; diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts index c8ee60fc84e1..c06ab1ca9034 100644 --- a/sdk/test-utils/recorder/src/index.ts +++ b/sdk/test-utils/recorder/src/index.ts @@ -4,4 +4,4 @@ export { record } from "./recorder"; export { delay } from "./delay"; export { env } from "./utils"; -export { setReplaceableVariables, setReplacements } from "./baseRecorder"; +export { setReplaceableVariables, setReplacements, setEnviromentOnLoad } from "./baseRecorder"; From 35b6e97317b6bb57bf0a4a27531f671cbf37d339 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 17:03:31 -0700 Subject: [PATCH 45/83] updates to file path and setEnviromentOnLoad - node tests -record and playback works --- sdk/test-utils/recorder/rollup.base.config.js | 2 +- sdk/test-utils/recorder/src/baseRecorder.ts | 26 +++++++++++++++---- sdk/test-utils/recorder/src/recorder.ts | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index 3b9c6fbb0709..b1da4aea4a56 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -55,7 +55,7 @@ export function nodeConfig(test = false) { export function browserConfig(test = false, production = false) { const baseConfig = { input: input, - external: ["fs-extra", "nock"], + external: ["fs-extra", "nock", "path"], output: { file: "browser/azure-test-utils-recorder.js", format: "umd", diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 08599e4a86d0..2bc958d9e0e7 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -7,9 +7,15 @@ import queryString from "query-string"; import { isBrowser, blobToString, escapeRegExp, env } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; import nock from "nock"; +import path from "path"; -const isRecording = env.TEST_MODE === "record"; -const isPlayingBack = env.TEST_MODE === "playback"; +let isRecording: boolean; +let isPlayingBack: boolean; + +function envTestMode() { + isRecording = env.TEST_MODE === "record"; + isPlayingBack = env.TEST_MODE === "playback"; +} let replaceableVariables: { [x: string]: string } = {}; export function setReplaceableVariables(a: { [x: string]: string }): void { @@ -28,6 +34,7 @@ export function setReplacements(maps: any): void { } export function setEnviromentOnLoad() { + envTestMode(); if (isBrowser() && isRecording) { customConsoleLog(); } @@ -110,7 +117,7 @@ export abstract class Recorder { } public abstract record(): void; - public abstract playback(): void; + public abstract playback(filePath: string): void; public abstract stop(): void; } @@ -125,8 +132,17 @@ export class NockRecorder extends Recorder { }); } - public playback(): void { - this.uniqueTestInfo = require("../recordings/" + this.filepath).testInfo; + public playback(filePath: string): void { + const searchTerm = "\\"; + this.uniqueTestInfo = require(path.resolve( + filePath + .substring(0, filePath.lastIndexOf(searchTerm)) + .substring( + 0, + filePath.substring(0, filePath.lastIndexOf(searchTerm)).lastIndexOf(searchTerm) + 1 + ), + "./recordings/" + this.filepath + )).testInfo; } public stop(): void { diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index e43fa4a403f7..a95a413f7d7c 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -36,7 +36,7 @@ export function record(testContext: any) { if (isRecording) { recorder.record(); } else if (isPlayingBack) { - recorder.playback(); + recorder.playback(testContext.currentTest.file); } return { From 6d371b99e7ce03279c03e2f85fd9d101871e9edd Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 23:43:25 -0700 Subject: [PATCH 46/83] T -> t in the rollup browser config for consistency --- sdk/test-utils/recorder/rollup.base.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index b1da4aea4a56..fbf75c5f780b 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -59,7 +59,7 @@ export function browserConfig(test = false, production = false) { output: { file: "browser/azure-test-utils-recorder.js", format: "umd", - name: "TestUtilsRecorder", + name: "testUtilsRecorder", sourcemap: true }, preserveSymlinks: false, From 6b5bf79fc8a03ad2898761d98da2001165e069f3 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 15 Jul 2019 23:56:38 -0700 Subject: [PATCH 47/83] update browser field in package.json --- sdk/test-utils/recorder/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index 43cfaff06997..cf5bf09b017f 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -4,6 +4,9 @@ "description": "This library provides interfaces and helper methods to provide recording and playback capabilities for the tests in Azure JS/TS SDKs", "main": "dist/index.js", "module": "dist-esm/src/index.js", + "browser": { + "dist/index.js": "./browser/azure-test-utils-recorder.js" + }, "types": "./typings/index.d.ts", "scripts": { "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", From e970d0f1ebb4e053a1ef4b997a4f8ba7d3d4526e Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 17 Jul 2019 17:12:22 -0700 Subject: [PATCH 48/83] update newDate and add some types --- sdk/test-utils/recorder/package.json | 1 + sdk/test-utils/recorder/src/baseRecorder.ts | 6 +- sdk/test-utils/recorder/src/index.ts | 2 +- sdk/test-utils/recorder/src/recorder.ts | 72 ++++++++++++++++----- 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index cf5bf09b017f..9852aa5456ac 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -59,6 +59,7 @@ "private": true, "dependencies": { "@types/fs-extra": "~7.0.0", + "@types/mocha": "^5.2.5", "@types/nise": "^1.4.0", "@types/nock": "^10.0.1", "@types/query-string": "6.2.0", diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 2bc958d9e0e7..9618514e9609 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -55,7 +55,7 @@ const skip = [ "browsers/aborter/recording_should_abort_after_aborter_timeout.json" ]; -export abstract class Recorder { +export abstract class BaseRecorder { protected readonly filepath: string; public uniqueTestInfo: any = {}; @@ -121,7 +121,7 @@ export abstract class Recorder { public abstract stop(): void; } -export class NockRecorder extends Recorder { +export class NockRecorder extends BaseRecorder { constructor(testHierarchy: string, testTitle: string) { super("node", testHierarchy, testTitle, "js"); } @@ -201,7 +201,7 @@ export class NockRecorder extends Recorder { // Nise module does not have a native implementation of record/playback like Nock does // This class overrides requests' 'open', 'send' and 'onreadystatechange' functions, adding our own code to them to deal with requests -export class NiseRecorder extends Recorder { +export class NiseRecorder extends BaseRecorder { private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; private recordings: any[] = []; diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts index c06ab1ca9034..c45beab01cfc 100644 --- a/sdk/test-utils/recorder/src/index.ts +++ b/sdk/test-utils/recorder/src/index.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. -export { record } from "./recorder"; +export { record, Recorder } from "./recorder"; export { delay } from "./delay"; export { env } from "./utils"; export { setReplaceableVariables, setReplacements, setEnviromentOnLoad } from "./baseRecorder"; diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index a95a413f7d7c..c89892904ee6 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -2,19 +2,61 @@ // Licensed under the MIT License. See License.txt in the project root for license information. import { getUniqueName, isBrowser, env } from "./utils"; -import { NiseRecorder, NockRecorder, Recorder, setEnviromentOnLoad } from "./baseRecorder"; +import { NiseRecorder, NockRecorder, BaseRecorder, setEnviromentOnLoad } from "./baseRecorder"; -export function record(testContext: any) { - let recorder: Recorder; +/** + * @export + * An interface that allows recording and playback capabilities for the tests in Azure TS SDKs. + */ +export interface Recorder { + /** + * `stop()` method is supposed to be called at the end of the test, stops and saves the recording in the "record" mode. + * Has no effect in the playback/live test modes. + */ + stop(): void; + /** + * In live test mode, random string is generated, appended to `prefix` and returned. + * + * In record mode, random string is generated, appended to `prefix` and returned, and is saved in the recordings by assigning the `label`. + * + * In playback mode, the string in the recordings associated to the `label` is returned. + * + * If the `label`(optional param) is not provided, `prefix` is used as the `label`. + * + * @param {string} [prefix] Prefix for the generated random string + * @param {string} [label] (Optional) Label to be assigned for the generated string [necessary for playing back the recordings]. If label is not provided, prefix is assumed as the label + * @returns {string} + */ + getUniqueName: (prefix: string, label?: string) => string; + /** + * In live test mode, `new Date();` is returned. + * + * In record mode, `new Date();` is returned, and is saved in the recordings by assigning the `label`. + * + * In playback mode, the date in the recordings associated to the `label` is returned. + * + * @param {string} [label] Label to be assigned for the date [necessary for playing back the recordings] + * @returns {Date} + */ + newDate: (label: string) => Date; +} + +/** + * + * @param {Mocha.Context} [testContext] + * @returns {Recorder} + */ +export function record(testContext: Mocha.Context): Recorder { + let recorder: BaseRecorder; let testHierarchy: string; let testTitle: string; if (testContext.currentTest) { - testHierarchy = testContext.currentTest.parent.fullTitle(); + testHierarchy = testContext.currentTest.parent!.fullTitle(); testTitle = testContext.currentTest.title; } else { - testHierarchy = testContext.test.parent.fullTitle(); - testTitle = testContext.test.title; + testHierarchy = testContext.test!.parent!.fullTitle(); + testTitle = testContext.test!.title; } const isRecording = env.TEST_MODE === "record"; @@ -36,7 +78,7 @@ export function record(testContext: any) { if (isRecording) { recorder.record(); } else if (isPlayingBack) { - recorder.playback(testContext.currentTest.file); + recorder.playback(testContext.currentTest!.file!); } return { @@ -45,28 +87,28 @@ export function record(testContext: any) { recorder.stop(); } }, - getUniqueName: function(prefix: string, recorderId?: string): string { + getUniqueName: function(prefix: string, label?: string): string { let name: string; - if (!recorderId) { - recorderId = prefix; + if (!label) { + label = prefix; } if (isRecording) { name = getUniqueName(prefix); - recorder.uniqueTestInfo[recorderId] = name; + recorder.uniqueTestInfo["uniqueName"][label] = name; } else if (isPlayingBack) { - name = recorder.uniqueTestInfo[recorderId]; + name = recorder.uniqueTestInfo["uniqueName"][label]; } else { name = getUniqueName(prefix); } return name; }, - newDate: function(recorderId: string): Date { + newDate: function(label: string): Date { let date: Date; if (isRecording) { date = new Date(); - recorder.uniqueTestInfo[recorderId] = date.toISOString(); + recorder.uniqueTestInfo["newDate"][label] = date.toISOString(); } else if (isPlayingBack) { - date = new Date(recorder.uniqueTestInfo[recorderId]); + date = new Date(recorder.uniqueTestInfo["newDate"][label]); } else { date = new Date(); } From eb8000e7857f30b14de4996d3e5348b00c3c2f38 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 17 Jul 2019 17:58:23 -0700 Subject: [PATCH 49/83] added interface for TestInfo --- sdk/test-utils/recorder/src/baseRecorder.ts | 4 ++-- sdk/test-utils/recorder/src/utils.ts | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 9618514e9609..fabbcf550117 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -4,7 +4,7 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; -import { isBrowser, blobToString, escapeRegExp, env } from "./utils"; +import { isBrowser, blobToString, escapeRegExp, env, TestInfo } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; import nock from "nock"; import path from "path"; @@ -57,7 +57,7 @@ const skip = [ export abstract class BaseRecorder { protected readonly filepath: string; - public uniqueTestInfo: any = {}; + public uniqueTestInfo: TestInfo = { uniqueName: {}, newDate: {} }; constructor(env: string, testHierarchy: string, testTitle: string, ext: string) { this.filepath = diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 5a9daf4c6a0d..30b449801cb9 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -1,6 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. +export interface TestInfo { + uniqueName: { [x: string]: string }; + newDate: { [x: string]: string }; +} + export const env = isBrowser() ? (window as any).__env__ : process.env; export function escapeRegExp(str: string): string { From c3cf6e3832b3e48932c2fab3eaa7ade299bc7477 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 17 Jul 2019 20:33:41 -0700 Subject: [PATCH 50/83] isRecording, isPlayingBack - boolean functions --- sdk/test-utils/recorder/src/baseRecorder.ts | 25 ++++++++++----------- sdk/test-utils/recorder/src/delay.ts | 7 ++---- sdk/test-utils/recorder/src/recorder.ts | 21 ++++++++--------- sdk/test-utils/recorder/src/utils.ts | 8 +++++++ 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index fabbcf550117..feceed0393b1 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -4,23 +4,23 @@ import fs from "fs-extra"; import nise from "nise"; import queryString from "query-string"; -import { isBrowser, blobToString, escapeRegExp, env, TestInfo } from "./utils"; +import { + isBrowser, + blobToString, + escapeRegExp, + env, + TestInfo, + isPlayingBack, + isRecording +} from "./utils"; import { customConsoleLog } from "./customConsoleLog"; import nock from "nock"; import path from "path"; -let isRecording: boolean; -let isPlayingBack: boolean; - -function envTestMode() { - isRecording = env.TEST_MODE === "record"; - isPlayingBack = env.TEST_MODE === "playback"; -} - let replaceableVariables: { [x: string]: string } = {}; export function setReplaceableVariables(a: { [x: string]: string }): void { replaceableVariables = a; - if (isPlayingBack) { + if (isPlayingBack()) { // Providing dummy values to avoid the error Object.keys(a).map((k) => { env[k] = a[k]; @@ -34,12 +34,11 @@ export function setReplacements(maps: any): void { } export function setEnviromentOnLoad() { - envTestMode(); - if (isBrowser() && isRecording) { + if (isBrowser() && isRecording()) { customConsoleLog(); } - if (isPlayingBack) { + if (isPlayingBack()) { // Providing dummy values to avoid the error [ENVs for storage packages] env.ACCOUNT_NAME = "fakestorageaccount"; env.ACCOUNT_KEY = "aaaaa"; diff --git a/sdk/test-utils/recorder/src/delay.ts b/sdk/test-utils/recorder/src/delay.ts index 8212bf303931..53e4b5dfcc3f 100644 --- a/sdk/test-utils/recorder/src/delay.ts +++ b/sdk/test-utils/recorder/src/delay.ts @@ -1,10 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. -import { isBrowser } from "./utils"; -const env = isBrowser() ? (window as any).__env__ : process.env; -const isPlayingBack = env.TEST_MODE === "playback"; - +import { isPlayingBack } from "./utils"; /** * Usage - `await delay()` * This `delay` has no effect if the `TEST_MODE` is `"playback"`. @@ -14,5 +11,5 @@ const isPlayingBack = env.TEST_MODE === "playback"; * @returns {Promise} Resolved promise */ export function delay(milliseconds: number): Promise | null { - return isPlayingBack ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); + return isPlayingBack() ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); } diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index c89892904ee6..7d1b5c7810d5 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. -import { getUniqueName, isBrowser, env } from "./utils"; +import { getUniqueName, isBrowser, isRecording, isPlayingBack } from "./utils"; import { NiseRecorder, NockRecorder, BaseRecorder, setEnviromentOnLoad } from "./baseRecorder"; /** @@ -59,9 +59,6 @@ export function record(testContext: Mocha.Context): Recorder { testTitle = testContext.test!.title; } - const isRecording = env.TEST_MODE === "record"; - const isPlayingBack = env.TEST_MODE === "playback"; - setEnviromentOnLoad(); if (isBrowser()) { @@ -70,20 +67,20 @@ export function record(testContext: Mocha.Context): Recorder { recorder = new NockRecorder(testHierarchy, testTitle); } - if (recorder.skip() && (isRecording || isPlayingBack)) { + if (recorder.skip() && (isRecording() || isPlayingBack())) { testContext.skip(); } // If neither recording nor playback is enabled, requests hit the live-service and no recordings are generated - if (isRecording) { + if (isRecording()) { recorder.record(); - } else if (isPlayingBack) { + } else if (isPlayingBack()) { recorder.playback(testContext.currentTest!.file!); } return { stop: function() { - if (isRecording) { + if (isRecording()) { recorder.stop(); } }, @@ -92,10 +89,10 @@ export function record(testContext: Mocha.Context): Recorder { if (!label) { label = prefix; } - if (isRecording) { + if (isRecording()) { name = getUniqueName(prefix); recorder.uniqueTestInfo["uniqueName"][label] = name; - } else if (isPlayingBack) { + } else if (isPlayingBack()) { name = recorder.uniqueTestInfo["uniqueName"][label]; } else { name = getUniqueName(prefix); @@ -104,10 +101,10 @@ export function record(testContext: Mocha.Context): Recorder { }, newDate: function(label: string): Date { let date: Date; - if (isRecording) { + if (isRecording()) { date = new Date(); recorder.uniqueTestInfo["newDate"][label] = date.toISOString(); - } else if (isPlayingBack) { + } else if (isPlayingBack()) { date = new Date(recorder.uniqueTestInfo["newDate"][label]); } else { date = new Date(); diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 30b449801cb9..bfce4851c58b 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -8,6 +8,14 @@ export interface TestInfo { export const env = isBrowser() ? (window as any).__env__ : process.env; +export function isRecording() { + return env.TEST_MODE === "record"; +} + +export function isPlayingBack() { + return env.TEST_MODE === "playback"; +} + export function escapeRegExp(str: string): string { return encodeURIComponent(str).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } From 62797a4c20ac0b4d292000f51df78264c139fd72 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 17 Jul 2019 20:35:00 -0700 Subject: [PATCH 51/83] env -> runtime rename --- sdk/test-utils/recorder/src/baseRecorder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index feceed0393b1..5a9c44c7f913 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -58,9 +58,9 @@ export abstract class BaseRecorder { protected readonly filepath: string; public uniqueTestInfo: TestInfo = { uniqueName: {}, newDate: {} }; - constructor(env: string, testHierarchy: string, testTitle: string, ext: string) { + constructor(runtime: string, testHierarchy: string, testTitle: string, ext: string) { this.filepath = - env + + runtime + "/" + this.formatPath(testHierarchy) + "/recording_" + From c93f3eb23cbbf4223f02a40b2ba522be6e3a33a3 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 17 Jul 2019 22:27:51 -0700 Subject: [PATCH 52/83] Update Guidelines for the new common recorder --- sdk/test-utils/recorder/GUIDELINES.md | 269 +++++++++++++++++--------- 1 file changed, 173 insertions(+), 96 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index 596107d8c909..dba318061ca1 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -1,83 +1,113 @@ # GUIDELINES FOR RECORD AND PLAYBACK -## NOCK [for node tests] - -- [nock](https://www.npmjs.com/package/nock)-package is being used to test modules that perform HTTP requests. -- To mock an existing live system, we record and playback the HTTP calls using `nock.recorder`. -- Recording relies on intercepting real requests and responses and then persisting them for later use. - ---- - -## NISE [for browser tests] - -- Nock has no support for browsers. For them, we're using [nise](https://www.npmjs.com/package/nise). -- Nise works in a way similar to Nock, intercepting HTTP requests and mocking responses. -- Unlike Nock, Nise does not have a native record/playback feature. -- Some Nise functions are being overwritten to enable record and playback. -- Added new Karma plugins to access the disk and write/read recording files ([karma-json-to-file-reporter](https://www.npmjs.com/package/karma-json-to-file-reporter) to write and [karma-json-preprocessor](https://www.npmjs.com/package/karma-json-preprocessor) to read). - ---- - ## Setup for record and playback -**New env variable for recordings - TEST_MODE** [Supposed to be added in the `.env` file to be able to do record and playback] +**New env variable for recordings - TEST_MODE** [Supposed to be added in the environment(or `.env` file if the package uses `dotenv` as a devDependency) to be able to do record and playback] - If TEST_MODE = "record", - Tests hit the live-service - - Nock/Nise are used for recording the request-responses for future use + - Nock/Nise are leveraged for recording the request-responses for future use - If recordings are already present, forces re-recording - Else If TEST_MODE = "playback", - Existing recordings are used - Else - Tests hit the live-service, we don't record the requests/responses ---- +Add `@azure/test-utils-recorder` as a devDependency of your sdk. -## Skipped tests +## Adding a new test/test-suite -- Some tests are skipped because record and playback do not work properly when running them. -- The reasons for skipping every test are listed in the code [ `test/utils/recorder.ts` ] . Possible reasons for skipping a test: +- `recorder` package assumes that the tests in the sdk are leveraging [mocha](https://mochajs.org/) and [rollup](https://rollupjs.org/guide/en/) (and [karma](https://karma-runner.github.io/latest/index.html) test runner for browser tests) as suggested by the [template](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/template/template) package in the repo. - - **Abort:** browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way nise handles it) - - **Character:** there are characters in the message that are not supported in browser logging or in ECMAScript - - **Progress:** Nock does not record a request if it's aborted in a 'progress' callback - - **Size:** the generated recording file is too big and would considerably increase the size of the package - - **Tempfile:** the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information - - **UUID:** a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it +- Follow the below template for adding a new test. `before` and `after` sections are optional, `beforeEach` and `afterEach` sections are compulsory. -- We leverage mocha's `.skip()` functionality to skip the test - `this.skip()` - https://mochajs.org/#inclusive-tests - By this, the tests in the skip list will only be executed if the `TEST_MODE` is neither `"record"` nor `"playback"`. + ```typescript + import { record } from "@azure/test-utils-recorder"; ---- + describe("", () => { + // before section is optional + before(async function() { + recorder = record(this); + /*Place your code here*/ + recorder.stop(); + }); -## Recordings + // after section is optional + after(async function() { + recorder = record(this); + /*Place your code here*/ + recorder.stop(); + }); -- Recordings are being saved in one folder for each describe-block test suite - recording file structure - - `recordings/node//recording_.js` for node tests and - - `recordings/browsers//recording_.json` for browser tests. -- The file name of the recording for a test preserves the title of the `describe`-block and the corresponding `it`-block (with special characters appropriated). The recordings for browser tests go into the `./recordings/browsers/` folder(Similarly, node recordings in the `./recordings/node/` folder). + beforeEach(async function() { + recorder = record(this); + /*Place your code here*/ + }); - For example + afterEach(async () => { + /*Place your code here*/ + recorder.stop(); + }); - ```typescript - describe("Aborter", () => { - it("should abort when abort() is called", async () => { - ... - ... + it("", async () => { + /*Place your code here*/ }); }); ``` - (Browser Test) Recording corresponding to the above test is placed at - `./recordings/browsers/aborter/recording_should_abort_when_abort_is_called.json` +- When `recorder.stop();` is called, the recording stops and is saved as explained below. + +- Recordings corresponding to `before` or `after` sections are saved under `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. + +- Recordings corresponding to `beforeEach` or `afterEach` sections are saved along with the test recordings(`recordings/{node|browsers}//recording_.{js|json}`). + +- `Mocha.Context` is being leveraged to obtain the test title and other required information to save and replay the recordings. + +- Any function call that affects http requests and is not in the `it`-block and belongs to a `describe`-block must go in one of the `beforeEach`, `afterEach`, `before` or `after` sections. + +### Member functions getUniqueName() and newDate() of the `Recorder` + +- Retaining (randomly) generated info of the test run during recording is crucial in order to replay the http requests for the test during `"playback"` mode. + +- `Recorder` returned by the `record()` method has `getUniqueName()` and `newDate()` member functions along with the `stop()`. + + ```typescript + recorder = record(this); + + const randomName = recorder.getUniqueName("random"); + const tmr = recorder.newDate("tmr"); + ``` + +- When `recorder.stop()` is called for a test, we save that unique information corresponding to the test run along with the test recording in the `record` mode. + +- In `playback` mode, the saved unique information is pulled out from the existing recording in order to replay the http requests. + +- `newDate: (label: string) => Date;` + + - In live test mode, `new Date()` is returned. + + - In record mode, `new Date()` is returned, and is saved in the recordings by assigning the `label`. + + - In playback mode, the date in the recordings associated to the `label` is returned. + +- `getUniqueName: (prefix: string, label?: string) => string` - [ Following this rule - `./recordings/browsers//recording_.json` ] + - In live test mode, random string is generated, appended to `prefix` and returned. -- Just like the test recordings, we save the requests and responses from the before and after sections of the describe block in - `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. -- In node recordings(Nock), the query parameters are being skipped and only the SAS Token query parameters are being skipped in browser recordings(Nise). -- ENV Variables - As an additional layer of security, any potential secrets in the recordings are replaced with dummy values. In case of storage-packages, `ACCOUNT_NAME` is replaced with "fakestorageaccount", secret part of `ACCOUNT_SAS` and `ACCOUNT_KEY` are replaced with "aaaaa". These dummy values are used as the secrets during the playback mode. + - In record mode, random string is generated, appended to `prefix` and returned, and is saved in the test-recordings by assigning the provided `label`. + + - In playback mode, the string in the recordings associated to the `label` is returned. + + - If the `label`(optional param) is not provided, `prefix` is used as the label. + +- Any unique information of the test run that is important for playing back the http request must be saved along with the recordings in the record mode. + +- If a new test/test-suite is added, execute the test/test-suite(or all the tests) by setting the env variable `TEST_MODE = record` and **commit** the generated recording files. + +### Importing `delay` from `@azure/test-utils-recorder` + +- This `delay` has no effect if the `TEST_MODE` is `"playback"`. +- `delay` works as expected(`await delay()`) if the `TEST_MODE` is not `"playback"`. --- @@ -100,34 +130,18 @@ --- -## Adding a new test/test-suite - -- Any function call that affects http requests or generates [unique information](#UniqueInfo) that is not in the `it`-block and belongs to a `describe`-block must go in one of the `beforeEach`, `afterEach`, `before` or `after` sections. - -- Recordings corresponding to `before` or `after` sections are saved under `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. +## Recordings -- Recordings corresponding to `beforeEach` or `afterEach` sections are saved along with the test recordings(`recordings/{node|browsers}//recording_.{js|json}`). +- Recordings are being saved in one folder for each describe-block test suite + recording file structure + - `recordings/node//recording_.js` for node tests and + - `recordings/browsers//recording_.json` for browser tests. +- The file name of the recording for a test preserves the title of the `describe`-block and the corresponding `it`-block (with special characters appropriated). The recordings for node tests go into the `./recordings/node/` folder(Similarly, browser recordings in the `./recordings/browsers/` folder). -- Follow the below template for adding any new test. `before` and `after` sections are optional, `beforeEach` and `afterEach` sections are compulsory. + For example ```typescript - import { record } from "./utils/recorder"; - - describe("", () => { - // before section is optional - before(async function() { - recorder = record(this); - /*Place your code here*/ - recorder.stop(); - }); - - // after section is optional - after(async function() { - recorder = record(this); - /*Place your code here*/ - recorder.stop(); - }); - + describe("Aborter", () => { beforeEach(async function() { recorder = record(this); /*Place your code here*/ @@ -138,39 +152,102 @@ recorder.stop(); }); - it("", async () => { - /*Place your code here*/ + it("should abort when abort() is called", async () => { + ... + ... }); }); ``` -- **Saving randomly generated information/unique info of a test run. Example - `getUniqueName` in storage-queue** + (Node Test) Recording corresponding to the above test is placed at + `./recordings/node/aborter/recording_should_abort_when_abort_is_called.js` - - Before Record and Playback, `getUniqueName` was being imported from `utils` in the `.spec.ts` test files. `getUniqueName` generates a new value each time we run. + [ Following this rule - `./recordings/node//recording_.js` ] - - Retaining that unique value is crucial in order to replay the http request during `"playback"` mode, which also implies that any unique information related to the test must be saved in order to replay the http requests. +- Just like the test recordings, we save the requests and responses from the `before` and `after` sections of the describe block in - `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. +- In node recordings(Nock), the query parameters are not being stored and the SAS Token query parameters are not being stored in browser recordings(Nise). - - When `recorder.stop();` is called for a test, we save that unique information corresponding to the test run along with the test recording. +### ENV Variables - - During `playback` mode, the saved unique information must be pulled out from the existing recording in order to replay the http requests. +- Any potential plain secrets in the recordings are replaced with dummy values. +- `setReplaceableVariables` and `setReplacements` methods are being exposed from the recorder package so that the environment variables can be managed from the tests in the sdk. These two methods can be imported from `@azure/test-utils-recorder`. +- Taking tests in the Keyvault sdk as an example - - For the case of `getUniqueName`, to keep things clean in the `spec.ts` files, we have moved the `getUniqueName` into the `recorder.ts`. - i.e., a wrapper is added around `getUniqueName` in `recorder.ts` which takes care of the `TEST_MODE` + ```typescript + setReplaceableVariables({ + AZURE_CLIENT_ID: "azure_client_id", + AZURE_CLIENT_SECRET: "azure_client_secret", + AZURE_TENANT_ID: "azure_tenant_id", + KEYVAULT_NAME: "keyvault_name" + }); + ``` + + Calling the `setReplaceableVariables` method would mean that + + - In playback mode, the environment variables will be overriden by the provided values. + - In record mode, occurences of the environment variables in the recordings are replaced with the provided values. + - This has no effect in the `live` test mode. - - if `TEST_MODE` = `"record"`, `recorder.getUniqueName()` will work the same as the usual `getUniqueName()`. - - if `TEST_MODE` = `"playback"`, `recorder.getUniqueName()` will pull out the value from existing recording. + ```typescript + setReplacements([ + (recording: any): any => + recording.replace(/"access_token":"[^"]*"/g, `"access_token":"access_token"`), + (recording: any): any => + keySuffix === "" ? recording : recording.replace(new RegExp(keySuffix, "g"), "") + ]); + ``` - [Same is the case with `newDate` function] + Calling the `setReplacements` method would mean that - - Any unique information of the test run that is important for playing back the http request must be saved along with the recordings in the record mode. + - In `record` mode, occurences of any strings in the recordings that match the regular expressions are replaced with the provided values. + - This has no effect in the `live` test mode or `playback` mode. -- If a new test/test-suite is added, execute the test/test-suite(or all the tests) by setting the env variable `TEST_MODE = record` and **commit** the generated recording files. +- The above methods can be called from the `before` section so that the tests can leverage the environment variables. + +- Currently, the environment variables for storage-packages are managed by the recorder. `ACCOUNT_NAME` is replaced with `"fakestorageaccount"`, secret part of `ACCOUNT_SAS` and `ACCOUNT_KEY` are replaced with `"aaaaa"`. + + The same dummy values are used as the environment variables during the playback mode. + +--- + +## Skipping a test + +- Currently, some tests (in storage packages) are being skipped because record and playback does not work as expected while executing them, the reasons are listed below. + + - **Abort:** browser testing unexpectedly finishes when a request is aborted during playback (unknown reason; probably related to the way `nise` handles it) + - **Character:** there are characters in the message that are not supported in browser logging or in ECMAScript + - **Progress:** Nock does not record a request if it's aborted in a 'progress' callback + - **Size:** the generated recording file is too big and would considerably increase the size of the package + - **Tempfile:** the request makes use of a random tempfile created locally, and the recorder does not support recording it as unique information + - **UUID:** a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it -- If the new test is supposed to skipped, it must be added in the skip list as described in the earlier section. Doing this would allow the tests in the skip list to be executed only if the `TEST_MODE` is neither `"record"` nor `"playback"`. +- We leverage mocha's `.skip()` functionality to skip the test + `this.skip()` - https://mochajs.org/#inclusive-tests + By this, the tests in the skip list will only be executed if the `TEST_MODE` is neither `"record"` nor `"playback"`. + +- If the new test is supposed to skipped, it must be added in the skip list. Doing this would allow the tests in the skip list to be executed only if the `TEST_MODE` is neither `"record"` nor `"playback"`. + +--- + +# More Information + +## NOCK [for node tests] + +- [nock](https://www.npmjs.com/package/nock)-package is being leveraged to test modules that perform HTTP requests. +- To mock an existing live system, we record and playback the HTTP calls using `nock.recorder`. +- Recording relies on intercepting real requests and responses and then persisting them for later use. + +--- + +## NISE [for browser tests] + +- Nock has no support for browsers. [nise](https://www.npmjs.com/package/nise)-package is being leveraged for browser tests. +- Nise works in a way similar to Nock, intercepting HTTP requests and mocking responses. +- Unlike Nock, Nise does not have a native record/playback feature. +- Some Nise functions are being overwritten to enable record and playback. +- karma.conf.js is supposed to be updated with the new Karma plugins which are required to access the disk and write/read recording files ([karma-json-to-file-reporter](https://www.npmjs.com/package/karma-json-to-file-reporter) to write and [karma-json-preprocessor](https://www.npmjs.com/package/karma-json-preprocessor) to read). -- Importing the `delay` from recorder.ts - - This `delay` has no effect if the `TEST_MODE` is `"playback"`. - - `delay` works as expected(`await delay()`) if the `TEST_MODE` is not `"playback"`. + -------- TO DO ----------- --- @@ -188,8 +265,8 @@ - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. - Console logs with `.writeFile` property are captured and are written to a file(as test recordings). - Any other console statements are captured and printed normally. - - Example - console.warn("hello"); -> console.log({ warn: "hello" }); - - Example - console.log("hello"); -> console.log({ log: "hello" }); + - Example - `console.warn("hello"); -> console.log({ warn: "hello" });` + - Example - `console.log("hello"); -> console.log({ log: "hello" });` --- From 1bb172c9a847bfee0c420aedb2baa34bcab30731 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 18 Jul 2019 15:21:03 -0700 Subject: [PATCH 53/83] Updating browser recorder.stop() method to satisfy KeyVault --- sdk/test-utils/recorder/src/baseRecorder.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 5a9c44c7f913..dcf9a9e0737e 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -371,15 +371,20 @@ export class NiseRecorder extends BaseRecorder { } public stop(): void { + for (let i = 0; i < this.recordings.length; i++) { + for (const k of Object.keys(this.recordings[i])) { + if (typeof this.recordings[i][k] === "string") { + this.recordings[i][k] = this.filterSecrets(this.recordings[i][k]); + } + } + } // We're sending the recordings to the 'karma-json-to-file-reporter' via console.log console.log( - this.filterSecrets( - JSON.stringify({ - writeFile: true, - path: "./recordings/" + this.filepath, - content: { recordings: this.recordings, uniqueTestInfo: this.uniqueTestInfo } - }) - ) + JSON.stringify({ + writeFile: true, + path: "./recordings/" + this.filepath, + content: { recordings: this.recordings, uniqueTestInfo: this.uniqueTestInfo } + }) ); } } From c03ac25b5915e6b388675eeef4aec729f562d88e Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 22 Jul 2019 17:57:56 -0700 Subject: [PATCH 54/83] commit pnpm-lock --- common/config/rush/pnpm-lock.yaml | 259 +++++++++++++++++++++++++++--- 1 file changed, 236 insertions(+), 23 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 5427d1c86845..fc77178cdbcb 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -1,9 +1,12 @@ dependencies: + '@azure/abort-controller': 1.0.0-preview.1 '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 '@azure/arm-servicebus': 0.1.0 - '@azure/event-hubs': 1.0.8 + '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 + '@azure/core-paging': 1.0.0-preview.1 + '@azure/event-hubs': 2.1.1 + '@azure/event-processor-host': 1.0.6 '@azure/logger-js': 1.3.2 - '@azure/ms-rest-azure-js': 1.3.8 '@azure/ms-rest-js': 1.8.13 '@azure/ms-rest-nodeauth': 0.9.3 '@microsoft/api-extractor': 7.3.2 @@ -171,7 +174,6 @@ dependencies: ts-mocha: 6.0.0_mocha@5.2.0 ts-node: 7.0.1 tslib: 1.10.0 - tslint: 5.18.0_typescript@3.5.3 tunnel: 0.0.6 typescript: 3.5.3 uglify-js: 3.6.0 @@ -188,6 +190,12 @@ dependencies: yarn: 1.17.3 lockfileVersion: 5.1 packages: + /@azure/abort-controller/1.0.0-preview.1: + dependencies: + tslib: 1.10.0 + dev: false + resolution: + integrity: sha512-NnJqi6oHqt06Q2hz4nO1HO0QlyusBa3E/wezvn9flHEtl0IHYSmzGbtlb+MaAJ5GzxwqSevQ4q1+4B8fvVijOA== /@azure/amqp-common/0.1.9_rhea-promise@0.1.15: dependencies: async-lock: 1.2.2 @@ -232,6 +240,16 @@ packages: dev: false resolution: integrity: sha512-mjfeTrEayb1koiy9hq/c9mfa5mys4P6zZdW2QAx4Ma0x4W6/f24O3p0109NHRkiHRay4QsOY3PaTy6CBlvIp+g== + /@azure/core-asynciterator-polyfill/1.0.0-preview.1: + dev: false + resolution: + integrity: sha512-hMp0y+j/odkAyTa5TYewn4hUlFdEe3sR9uTd2Oq+se61RtuDsqM7UWrNNlyylPyjIENSZHJVWN7jte/jvvMN2Q== + /@azure/core-paging/1.0.0-preview.1: + dependencies: + '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 + dev: false + resolution: + integrity: sha512-mZHkadyAbhV1+brHEsWICnURW6E72D2HReM+8MWDn5oVJdlxD51w14PeqsOZC4UDYv4x2Eww5+PFRTEOrNB1Uw== /@azure/event-hubs/1.0.8: dependencies: '@azure/amqp-common': 0.1.9_rhea-promise@0.1.15 @@ -246,6 +264,33 @@ packages: dev: false resolution: integrity: sha512-iYaB08erq2Eg5sUOXD0GXn4OmkqC67xczLfnlaaF0fLtgk999ePTuFqj4LHYT5HHUdDumYZ+U3WjPSvb0ztHJw== + /@azure/event-hubs/2.1.1: + dependencies: + '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 + '@azure/ms-rest-nodeauth': 0.9.3 + async-lock: 1.2.2 + debug: 3.2.6 + is-buffer: 2.0.3 + jssha: 2.3.1 + rhea-promise: 0.1.15 + tslib: 1.10.0 + uuid: 3.3.2 + dev: false + resolution: + integrity: sha512-nGnFBPcB/rs+5YWwmHJg+d3Cs7BrjtVfuD1eEv8j+ui2X6uXxB88wom1A2t/7xsSzkunQSrXJ2mCwdHxKI5aHw== + /@azure/event-processor-host/1.0.6: + dependencies: + '@azure/event-hubs': 1.0.8 + async-lock: 1.2.2 + azure-storage: 2.10.3 + debug: 3.2.6 + ms-rest-azure: 2.6.0 + path-browserify: 1.0.0 + tslib: 1.10.0 + uuid: 3.3.2 + dev: false + resolution: + integrity: sha512-SjlC+eXXeVWEU0oSK7Q6xVhbFd9G7tG+F6QK7orqpIYSzn0NPtDeKZasTO+nS0uvrUDKr3vs2DiK+fEjz8hm5g== /@azure/logger-js/1.3.2: dependencies: tslib: 1.10.0 @@ -551,6 +596,10 @@ packages: dev: false resolution: integrity: sha512-LFt+YA7Lv2IZROMwokZKiPNORAV5N3huMs3IKnzlE430HWhWYZ8b+78HiwJXJJP1V2IEjinyJURuRJfGoaFSIA== + /@types/json-schema/7.0.3: + dev: false + resolution: + integrity: sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== /@types/json5/0.0.29: dev: false optional: true @@ -733,6 +782,7 @@ packages: dependencies: '@typescript-eslint/experimental-utils': 1.12.0_eslint@5.16.0+typescript@3.5.3 '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/typescript-estree': 1.13.0 eslint: 5.16.0 eslint-utils: 1.4.0 functional-red-black-tree: 1.0.1 @@ -747,6 +797,25 @@ packages: typescript: '*' resolution: integrity: sha512-J/ZTZF+pLNqjXBGNfq5fahsoJ4vJOkYbitWPavA05IrZ7BXUaf4XWlhUB/ic1lpOGTRpLWF+PLAePjiHp6dz8g== + /@typescript-eslint/eslint-plugin/1.13.0_0b5e999c52a893676e7127c05369c7b6: + dependencies: + '@typescript-eslint/experimental-utils': 1.13.0_eslint@5.16.0 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 + '@typescript-eslint/typescript-estree': 1.13.0 + eslint: 5.16.0 + eslint-utils: 1.4.0 + functional-red-black-tree: 1.0.1 + regexpp: 2.0.1 + tsutils: 3.14.0_typescript@3.5.3 + dev: false + engines: + node: ^6.14.0 || ^8.10.0 || >=9.10.0 + peerDependencies: + '@typescript-eslint/parser': ^1.9.0 + eslint: ^5.0.0 + typescript: '*' + resolution: + integrity: sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== /@typescript-eslint/experimental-utils/1.12.0_eslint@5.16.0+typescript@3.5.3: dependencies: '@typescript-eslint/typescript-estree': 1.12.0 @@ -761,6 +830,19 @@ packages: typescript: '*' resolution: integrity: sha512-s0soOTMJloytr9GbPteMLNiO2HvJ+qgQkRNplABXiVw6vq7uQRvidkby64Gqt/nA7pys74HksHwRULaB/QRVyw== + /@typescript-eslint/experimental-utils/1.13.0_eslint@5.16.0: + dependencies: + '@types/json-schema': 7.0.3 + '@typescript-eslint/typescript-estree': 1.13.0 + eslint: 5.16.0 + eslint-scope: 4.0.3 + dev: false + engines: + node: ^6.14.0 || ^8.10.0 || >=9.10.0 + peerDependencies: + eslint: '*' + resolution: + integrity: sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== /@typescript-eslint/parser/1.12.0_eslint@5.16.0+typescript@3.5.3: dependencies: '@types/eslint-visitor-keys': 1.0.0 @@ -776,6 +858,20 @@ packages: typescript: '*' resolution: integrity: sha512-0uzbaa9ZLCA5yMWJywnJJ7YVENKGWVUhJDV5UrMoldC5HoI54W5kkdPhTfmtFKpPFp93MIwmJj0/61ztvmz5Dw== + /@typescript-eslint/parser/1.13.0_eslint@5.16.0: + dependencies: + '@types/eslint-visitor-keys': 1.0.0 + '@typescript-eslint/experimental-utils': 1.13.0_eslint@5.16.0 + '@typescript-eslint/typescript-estree': 1.13.0 + eslint: 5.16.0 + eslint-visitor-keys: 1.0.0 + dev: false + engines: + node: ^6.14.0 || ^8.10.0 || >=9.10.0 + peerDependencies: + eslint: ^5.0.0 + resolution: + integrity: sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== /@typescript-eslint/typescript-estree/1.12.0: dependencies: lodash.unescape: 4.0.1 @@ -785,6 +881,15 @@ packages: node: '>=6.14.0' resolution: integrity: sha512-nwN6yy//XcVhFs0ZyU+teJHB8tbCm7AIA8mu6E2r5hu6MajwYBY3Uwop7+rPZWUN/IUOHpL8C+iUPMDVYUU3og== + /@typescript-eslint/typescript-estree/1.13.0: + dependencies: + lodash.unescape: 4.0.1 + semver: 5.5.0 + dev: false + engines: + node: '>=6.14.0' + resolution: + integrity: sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== /@webassemblyjs/ast/1.8.5: dependencies: '@webassemblyjs/helper-module-context': 1.8.5 @@ -6175,6 +6280,19 @@ packages: mocha: '>=2.2.5' resolution: integrity: sha512-pmpnEO4iDTmLfrT2RKqPsc5relG4crnDSGmXPuGogdda27A7kLujDNJV4EbTbXlVBCZXggN9rQYPEWMkOv4AAA== + /mocha-junit-reporter/1.23.1_mocha@5.2.0: + dependencies: + debug: 2.6.9 + md5: 2.2.1 + mkdirp: 0.5.1 + mocha: 5.2.0 + strip-ansi: 4.0.0 + xml: 1.0.1 + dev: false + peerDependencies: + mocha: '>=2.2.5' + resolution: + integrity: sha512-qeDvKlZyAH2YJE1vhryvjUQ06t2hcnwwu4k5Ddwn0GQINhgEYFhlGM0DwYCVUHq5cuo32qAW6HDsTHt7zz99Ng== /mocha-multi-reporters/1.1.7: dependencies: debug: 3.2.6 @@ -7848,6 +7966,20 @@ packages: rollup: '>=0.60.0' resolution: integrity: sha512-QMDrJfMwl8koU2IH8A/hb7zcE1Q+174uwjd9gtQ+ITbbmoGu9ro1pXoxGnTNXwkaAdlaRVECmfcAOga078Y+Qw== + /rollup-plugin-visualizer/2.5.3_rollup@1.17.0: + dependencies: + mkdirp: 0.5.1 + open: 6.4.0 + pupa: 2.0.0 + rollup: 1.17.0 + source-map: 0.7.3 + dev: false + engines: + node: '>=8.10' + peerDependencies: + rollup: '>=0.60.0' + resolution: + integrity: sha512-DIEN4EL/a1S6zq2AnoD8gkzN0jUR+rhQCKjyHFtocYWiaghOsXEtG+EPxp+4iGCoMvvvVUHrt4FK/inmktuyBQ== /rollup-pluginutils/2.8.1: dependencies: estree-walker: 0.6.1 @@ -9691,6 +9823,7 @@ packages: version: 0.0.0 'file:projects/core-amqp.tgz': dependencies: + '@azure/abort-controller': 1.0.0-preview.1 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -9755,7 +9888,7 @@ packages: dev: false name: '@rush-temp/core-amqp' resolution: - integrity: sha512-pH12zXk5V3XB+ZgCEfAwPIhOySH/1TOgwMRcPRGpjWewRNJNYZNL4dX/yu4Gq+ms8XKgK2u+Yl8lp7N/7CYmWw== + integrity: sha512-9LHxNb4QrxyNRXfAf5u1uisfKB2+L3H/fet8fGbe8aotNAfIeVipiftCD8oaATz7qdnG+FXQwLVxXMaz4dI7rg== tarball: 'file:projects/core-amqp.tgz' version: 0.0.0 'file:projects/core-arm.tgz': @@ -9763,7 +9896,15 @@ packages: '@types/chai': 4.1.7 '@types/mocha': 5.2.7 '@types/node': 8.10.50 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 chai: 4.2.0 + eslint: 5.16.0 + eslint-config-prettier: 4.3.0_eslint@5.16.0 + eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-plugin-no-null: 1.0.2_eslint@5.16.0 + eslint-plugin-no-only-tests: 2.3.1 + eslint-plugin-promise: 4.2.1 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 mocha-multi-reporters: 1.1.7 @@ -9786,7 +9927,7 @@ packages: dev: false name: '@rush-temp/core-arm' resolution: - integrity: sha512-iqatN3+7EsYjlQfHNRWpD+h77oFaHTVpkODkMxwHHCzK6H2vO/XA3/1tFyDceW5mDXb9cn+AE1PJMAzS2rYPWg== + integrity: sha512-ydCkKGPwdsqk3cZtb5s+PlhnUJNHifGymT1Rh6PjJCVoOOXGTXqZYc4k/EI9DMk/sgI4Vo9cQknrmjG5hRz5dw== tarball: 'file:projects/core-arm.tgz' version: 0.0.0 'file:projects/core-asynciterator-polyfill.tgz': @@ -9810,6 +9951,7 @@ packages: version: 0.0.0 'file:projects/core-auth.tgz': dependencies: + '@azure/abort-controller': 1.0.0-preview.1 '@microsoft/api-extractor': 7.3.2 '@types/mocha': 5.2.7 '@types/node': 8.10.50 @@ -9844,7 +9986,7 @@ packages: dev: false name: '@rush-temp/core-auth' resolution: - integrity: sha512-MhDSymfCLIHeHlYVi0KQ4oXsKUrRGUrEtwNYEbB8nq7BkXZRsiuEyv8LuffmWh+ipeHLWPhMnEW94EoRIqSiyw== + integrity: sha512-D6tMjROHeCf7ijXZIPhewnP5sPK7Aj+k5Na5O5OU629HF7qLBczazjTCnpnnex4X8yvi4X3b82rX/LD2OxZ0dQ== tarball: 'file:projects/core-auth.tgz' version: 0.0.0 'file:projects/core-http.tgz': @@ -9926,11 +10068,12 @@ packages: dev: false name: '@rush-temp/core-http' resolution: - integrity: sha512-j8oocZ+3uRVuagmj58ue9BHFKpv2fqQMJlL2LX3PQS4q0H2Rwv+z2kppAbFmAcORldCuShH8X2K61znVkFwCVw== + integrity: sha512-boYkGbWKFBT8jqs2q2lgsBLUfHRsHzd4utdb9GWM8kR/3Goq7pqiXBSHAnuSaowbK0/QqsCtuZ6bYCnaS1ORQg== tarball: 'file:projects/core-http.tgz' version: 0.0.0 'file:projects/core-paging.tgz': dependencies: + '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 '@types/node': 8.10.50 '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 @@ -9945,7 +10088,7 @@ packages: dev: false name: '@rush-temp/core-paging' resolution: - integrity: sha512-YuAVCVgDrwxv97SIkTM1n/hwYLjncsTgyooCUYQ4vw3o1WglSnpREVymQFVZ8Fa+S/ael7NdzsGaYp3lyTKXCg== + integrity: sha512-MTsl2eG0FXkUyouQVkSEpgLuG6tNUKE8ckhH8y4B3VUevh/MOS/ghpCqXFRKEAMF7jVfB1s2BSSorGYFuWlcDg== tarball: 'file:projects/core-paging.tgz' version: 0.0.0 'file:projects/cosmos.tgz': @@ -9992,6 +10135,8 @@ packages: version: 0.0.0 'file:projects/event-hubs.tgz': dependencies: + '@azure/abort-controller': 1.0.0-preview.1 + '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 @@ -10061,12 +10206,13 @@ packages: dev: false name: '@rush-temp/event-hubs' resolution: - integrity: sha512-E0udJXYTcWrpWxUM38hWHnk35qsmXDG5ywVW4j492xsASvwyE/lBUl0vXZ/IT+2w3GHnEQiydeNxysUw6EflQg== + integrity: sha512-1GJu6YVyxIFLe1hq0W9+is9tGnNt5ExJ6aHDvGGPX+j1zCZnh2x0Lb/fK0VTUcEybCw9D+lLpTd4vXNYphTMww== tarball: 'file:projects/event-hubs.tgz' version: 0.0.0 'file:projects/event-processor-host.tgz': dependencies: - '@azure/event-hubs': 1.0.8 + '@azure/event-hubs': 2.1.1 + '@azure/ms-rest-nodeauth': 0.9.3 '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 @@ -10116,7 +10262,7 @@ packages: dev: false name: '@rush-temp/event-processor-host' resolution: - integrity: sha512-kNXtALlFQOATlvSkSIJ2PU54lX/OY/yD33fxY4KXBUcEZ3fJTaH8iXmV0S89Ry/eaOHtHU/Iia1Yfs7u7d4avA== + integrity: sha512-YEltFsweWeV5/IHJyEd/kVz7RG4iRz2AWE6rsw23UIXJaMkEc3nhsw/FtJpWq8bGWs8Dp3pvzKx1VezkCFB9MQ== tarball: 'file:projects/event-processor-host.tgz' version: 0.0.0 'file:projects/identity.tgz': @@ -10167,7 +10313,7 @@ packages: dev: false name: '@rush-temp/identity' resolution: - integrity: sha512-aTY3uzVLj4sklLp1V6DUub81jrSYfIKZwnVBn/oUi7cKhBnjY7efgGVxxaRfNNi8tg5js+DBRFI6HDKSfOdABA== + integrity: sha512-aLe+RHGk7M6wqCmNrblNMYMUtng49pfjo7pctPvnPORnPMD3acKp1+Ld3wQaAjImwPxlq60O1eulxRKAGM/fag== tarball: 'file:projects/identity.tgz' version: 0.0.0 'file:projects/keyvault-certificates.tgz': @@ -10196,20 +10342,25 @@ packages: dev: false name: '@rush-temp/keyvault-certificates' resolution: - integrity: sha512-OnKHRTzszS738exvoRLs2jaUoM3n0EW/Vnuwh04GVxor6GUG7K2wo06C+qoq3sqI5VG6CuEwMKfsSTmkLJfaMg== + integrity: sha512-QXnSrcEl4SWcc1wYPRy2BeupDtio52G/miaEJAgse04u88EeU5YoZpQNtZ9l2rzpd/wuJmB2GMkVgUXRnB6zgg== tarball: 'file:projects/keyvault-certificates.tgz' version: 0.0.0 'file:projects/keyvault-keys.tgz': dependencies: + '@azure/abort-controller': 1.0.0-preview.1 + '@azure/core-paging': 1.0.0-preview.1 '@microsoft/api-extractor': 7.3.2 '@types/chai': 4.1.7 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 + '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/node': 8.10.50 + '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10220,13 +10371,39 @@ packages: eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 fs-extra: 8.0.1 + karma: 4.2.0 + karma-chrome-launcher: 2.2.0 + karma-coverage: 1.1.2 + karma-edge-launcher: 0.4.2_karma@4.2.0 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 + karma-json-to-file-reporter: 1.0.1 + karma-junit-reporter: 1.2.0_karma@4.2.0 + karma-mocha: 1.3.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 + karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 + mocha-multi: 1.1.0_mocha@5.2.0 + nise: 1.5.0 nock: 10.0.6 + nyc: 14.1.1 prettier: 1.18.2 + puppeteer: 1.18.1 + query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 + rollup-plugin-replace: 2.2.0 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.3_rollup@1.17.0 + source-map-support: 0.5.12 ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 @@ -10235,11 +10412,13 @@ packages: dev: false name: '@rush-temp/keyvault-keys' resolution: - integrity: sha512-K1QS7ykok+p7DjKnd3GUg6k9W9nTXkux6iJOvt6i/UyVBSMIJ9v/szsLAd/6Osofj9ZMUfeCF46PXKccYkszeA== + integrity: sha512-kv1LOiu2pl432/WjarVRLropOwyQrGkOU4tdlA6MiTR9aeysnBosJzkOlScA6HdnBA1rUaoZoILYXQg7x6eS+g== tarball: 'file:projects/keyvault-keys.tgz' version: 0.0.0 'file:projects/keyvault-secrets.tgz': dependencies: + '@azure/abort-controller': 1.0.0-preview.1 + '@azure/core-paging': 1.0.0-preview.1 '@azure/ms-rest-azure-js': 1.3.8 '@azure/ms-rest-js': 1.8.13 '@microsoft/api-extractor': 7.3.2 @@ -10247,10 +10426,13 @@ packages: '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 + '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/node': 8.10.50 + '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10261,13 +10443,39 @@ packages: eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 fs-extra: 8.0.1 + karma: 4.2.0 + karma-chrome-launcher: 2.2.0 + karma-coverage: 1.1.2 + karma-edge-launcher: 0.4.2_karma@4.2.0 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.1.0 + karma-ie-launcher: 1.0.0_karma@4.2.0 + karma-json-preprocessor: 0.3.3_karma@4.2.0 + karma-json-to-file-reporter: 1.0.1 + karma-junit-reporter: 1.2.0_karma@4.2.0 + karma-mocha: 1.3.0 + karma-mocha-reporter: 2.2.5_karma@4.2.0 + karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 + mocha-multi: 1.1.0_mocha@5.2.0 + nise: 1.5.0 nock: 10.0.6 + nyc: 14.1.1 prettier: 1.18.2 + puppeteer: 1.18.1 + query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 + rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 + rollup-plugin-replace: 2.2.0 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 + rollup-plugin-terser: 5.1.1_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.3_rollup@1.17.0 + source-map-support: 0.5.12 ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 @@ -10276,7 +10484,7 @@ packages: dev: false name: '@rush-temp/keyvault-secrets' resolution: - integrity: sha512-OkaQmEoxug4+KDAkDDIVeRR9XtS6dSMHYgJD4mAlOolYt9IcYTKAPr20xbwztnBb+1eS91OmbtQjixPdt0c2bQ== + integrity: sha512-x5m+5BJfn2ssYVl2jzY4YVgvVpgOHP8IQdoFzVG5NlUhYld2DHz4KsEzgYUGdQx5SNud9KLLimjIb4f9FPzSjQ== tarball: 'file:projects/keyvault-secrets.tgz' version: 0.0.0 'file:projects/service-bus.tgz': @@ -10354,7 +10562,7 @@ packages: dev: false name: '@rush-temp/service-bus' resolution: - integrity: sha512-nN9BMqfkMl0zCjMC3AsdgCSFBF/axAJwWNdiM43XVzpa+924exQPM+dh6ahZ8JUBeBI7M1Y2ygR57+Hms+4D2w== + integrity: sha512-rkb1doDhx3T0RhPqtdxGi4/jeyG/9Wr5ZfAYDUy+Ck2LzlPuJcbl/S08urt5y51dalNoZHP3n6cjykuKoK0Ylg== tarball: 'file:projects/service-bus.tgz' version: 0.0.0 'file:projects/storage-blob.tgz': @@ -10624,6 +10832,7 @@ packages: 'file:projects/test-utils-recorder.tgz': dependencies: '@types/fs-extra': 7.0.0 + '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 '@types/query-string': 6.2.0 @@ -10645,12 +10854,13 @@ packages: dev: false name: '@rush-temp/test-utils-recorder' resolution: - integrity: sha512-hnvV5vDHpV/5b/OtgLX49cR/cRXQg6DFtSy1aA1wlGvkU3+nmOEsehYSpSR8B7d49Q3it/cn1ZaI9EimcyVemA== + integrity: sha512-VnQY6s1VxAZ/OgQU3RZqTXMpU8lT3KnjF1JhCsd6nSzde2LkukXfMs3zHSC/qc8pNqZauiPxk9geyEAvVtt7ww== tarball: 'file:projects/test-utils-recorder.tgz' version: 0.0.0 'file:projects/testhub.tgz': dependencies: - '@azure/event-hubs': 1.0.8 + '@azure/event-hubs': 2.1.1 + '@azure/event-processor-host': 1.0.6 '@types/node': 8.10.50 '@types/uuid': 3.4.5 '@types/yargs': 11.1.2 @@ -10670,15 +10880,19 @@ packages: dev: false name: '@rush-temp/testhub' resolution: - integrity: sha512-c3cFI0Our99carkgcyOFLmX5QRh5fIqyVv9S75VRX7woNtBGXPvWRE8VOxEN9o8N8FjSEQzc6PPEO6YRz7ok8Q== + integrity: sha512-Lt7NGJIhEbyVoQ1sJ4eUnUg7nGIkdgatRJJMWz18ZVWxKFXPxbBjxPsvIJNirR8QdA3efLv1FhyM4lszfJHcjw== tarball: 'file:projects/testhub.tgz' version: 0.0.0 +registry: '' specifiers: - '@azure/amqp-common': ^1.0.0-preview.6 + '@azure/abort-controller': 1.0.0-preview.1 + '@azure/amqp-common': 1.0.0-preview.6 '@azure/arm-servicebus': ^0.1.0 - '@azure/event-hubs': ^1.0.6 + '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 + '@azure/core-paging': 1.0.0-preview.1 + '@azure/event-hubs': ^2.1.1 + '@azure/event-processor-host': ^1.0.6 '@azure/logger-js': ^1.0.2 - '@azure/ms-rest-azure-js': ^1.3.2 '@azure/ms-rest-js': ^1.2.6 '@azure/ms-rest-nodeauth': ^0.9.2 '@microsoft/api-extractor': ^7.1.5 @@ -10846,7 +11060,6 @@ specifiers: ts-mocha: ^6.0.0 ts-node: ^7.0.1 tslib: ^1.9.3 - tslint: ^5.7.0 tunnel: 0.0.6 typescript: ^3.2.2 uglify-js: ^3.4.9 From b5fa9420b75185ac2c3d9475ee5a1d9daf6a5e5c Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 23 Jul 2019 14:13:27 -0700 Subject: [PATCH 55/83] use path.resolve to cater both linux and windows --- sdk/test-utils/recorder/src/baseRecorder.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index dcf9a9e0737e..89143cfe857d 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -132,15 +132,9 @@ export class NockRecorder extends BaseRecorder { } public playback(filePath: string): void { - const searchTerm = "\\"; this.uniqueTestInfo = require(path.resolve( - filePath - .substring(0, filePath.lastIndexOf(searchTerm)) - .substring( - 0, - filePath.substring(0, filePath.lastIndexOf(searchTerm)).lastIndexOf(searchTerm) + 1 - ), - "./recordings/" + this.filepath + filePath, + "../../recordings/" + this.filepath )).testInfo; } From d2c19aa9fab3e9789e510781ccc54894860cccb8 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 25 Jul 2019 17:37:10 -0700 Subject: [PATCH 56/83] update PNPM lock --- common/config/rush/pnpm-lock.yaml | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index fc77178cdbcb..580d03617a72 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -1,11 +1,10 @@ dependencies: '@azure/abort-controller': 1.0.0-preview.1 '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 - '@azure/arm-servicebus': 0.1.0 + '@azure/arm-servicebus': 3.2.0 '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 '@azure/event-hubs': 2.1.1 - '@azure/event-processor-host': 1.0.6 '@azure/logger-js': 1.3.2 '@azure/ms-rest-js': 1.8.13 '@azure/ms-rest-nodeauth': 0.9.3 @@ -232,14 +231,14 @@ packages: rhea-promise: ^0.1.15 resolution: integrity: sha512-5XJZaJGtGoPmLhFx5y0vfCXiAHksoA4fdSnHAfkgEm4krhCW1jt1LH/6aJdUwUTJe+bz6m3Pv0sG/ILG0Vd65g== - /@azure/arm-servicebus/0.1.0: + /@azure/arm-servicebus/3.2.0: dependencies: '@azure/ms-rest-azure-js': 1.3.8 '@azure/ms-rest-js': 1.8.13 tslib: 1.10.0 dev: false resolution: - integrity: sha512-mjfeTrEayb1koiy9hq/c9mfa5mys4P6zZdW2QAx4Ma0x4W6/f24O3p0109NHRkiHRay4QsOY3PaTy6CBlvIp+g== + integrity: sha512-e0nNyP0O802YMb4jq0nsVduIBHRWtmX/AtiWMCDI1f0KtcEmNRPfbP8DxU6iNgwnV09qy3EfaRfSY0vMsYs5cg== /@azure/core-asynciterator-polyfill/1.0.0-preview.1: dev: false resolution: @@ -10223,6 +10222,7 @@ packages: '@types/mocha': 5.2.7 '@types/node': 8.10.50 '@types/uuid': 3.4.5 + '@types/ws': 6.0.1 '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 async-lock: 1.2.2 @@ -10239,6 +10239,7 @@ packages: eslint-plugin-no-null: 1.0.2_eslint@5.16.0 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 + https-proxy-agent: 2.2.2 mocha: 5.2.0 mocha-junit-reporter: 1.23.0_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 @@ -10259,10 +10260,11 @@ packages: tslib: 1.10.0 typescript: 3.5.3 uuid: 3.3.2 + ws: 6.2.1 dev: false name: '@rush-temp/event-processor-host' resolution: - integrity: sha512-YEltFsweWeV5/IHJyEd/kVz7RG4iRz2AWE6rsw23UIXJaMkEc3nhsw/FtJpWq8bGWs8Dp3pvzKx1VezkCFB9MQ== + integrity: sha512-ArbUM9DPleTcwpTC+4K/0fPHmaYl4POCPoGdwyFmHWq6Jci/i2QUwzKVsRt/g1x/N2QmpX9b1ptBbQbCFo5w4A== tarball: 'file:projects/event-processor-host.tgz' version: 0.0.0 'file:projects/identity.tgz': @@ -10490,7 +10492,7 @@ packages: 'file:projects/service-bus.tgz': dependencies: '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 - '@azure/arm-servicebus': 0.1.0 + '@azure/arm-servicebus': 3.2.0 '@azure/ms-rest-nodeauth': 0.9.3 '@microsoft/api-extractor': 7.3.2 '@types/async-lock': 1.1.1 @@ -10562,7 +10564,7 @@ packages: dev: false name: '@rush-temp/service-bus' resolution: - integrity: sha512-rkb1doDhx3T0RhPqtdxGi4/jeyG/9Wr5ZfAYDUy+Ck2LzlPuJcbl/S08urt5y51dalNoZHP3n6cjykuKoK0Ylg== + integrity: sha512-IckVg8CV310wLgunRCl2OAi+Nvn+GWQsHf3IDe2BoFOc/JzXKqC7/ETh98lua+jyePPL7ycdGhxxzzRCLieFIA== tarball: 'file:projects/service-bus.tgz' version: 0.0.0 'file:projects/storage-blob.tgz': @@ -10880,18 +10882,17 @@ packages: dev: false name: '@rush-temp/testhub' resolution: - integrity: sha512-Lt7NGJIhEbyVoQ1sJ4eUnUg7nGIkdgatRJJMWz18ZVWxKFXPxbBjxPsvIJNirR8QdA3efLv1FhyM4lszfJHcjw== + integrity: sha512-rdhMvXi7mvg+wP0vVdqhouZr17v9a3n4KDMSyuUPU9qhOvY6bMfqoeIXrzgWkCXtR9yjL15gwJHKWsBlByGE4A== tarball: 'file:projects/testhub.tgz' version: 0.0.0 registry: '' specifiers: '@azure/abort-controller': 1.0.0-preview.1 '@azure/amqp-common': 1.0.0-preview.6 - '@azure/arm-servicebus': ^0.1.0 + '@azure/arm-servicebus': ^3.2.0 '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 '@azure/event-hubs': ^2.1.1 - '@azure/event-processor-host': ^1.0.6 '@azure/logger-js': ^1.0.2 '@azure/ms-rest-js': ^1.2.6 '@azure/ms-rest-nodeauth': ^0.9.2 From a13e72f76cdd3e6d92f0828f9d6c5fdbbf1fd806 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 25 Jul 2019 23:01:23 -0700 Subject: [PATCH 57/83] commit pnpm lock file --- common/config/rush/pnpm-lock.yaml | 733 ++++++++++++------------------ 1 file changed, 279 insertions(+), 454 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 580d03617a72..b8d9b4d9d153 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -8,7 +8,7 @@ dependencies: '@azure/logger-js': 1.3.2 '@azure/ms-rest-js': 1.8.13 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@rush-temp/abort-controller': 'file:projects/abort-controller.tgz' '@rush-temp/core-amqp': 'file:projects/core-amqp.tgz' '@rush-temp/core-arm': 'file:projects/core-arm.tgz' @@ -47,7 +47,7 @@ dependencies: '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/priorityqueuejs': 1.0.1 '@types/qs': 6.5.3 '@types/query-string': 6.2.0 @@ -58,13 +58,13 @@ dependencies: '@types/tunnel': 0.0.0 '@types/underscore': 1.9.2 '@types/uuid': 3.4.5 - '@types/webpack': 4.4.35 + '@types/webpack': 4.32.1 '@types/webpack-dev-middleware': 2.0.3 '@types/ws': 6.0.1 '@types/xml2js': 0.4.4 '@types/yargs': 11.1.2 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 abortcontroller-polyfill: 1.3.0 assert: 1.5.0 async-lock: 1.2.2 @@ -116,14 +116,14 @@ dependencies: karma-mocha: 1.3.0 karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 - karma-rollup-preprocessor: 7.0.0_rollup@1.17.0 + karma-rollup-preprocessor: 7.0.2_rollup@1.17.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 - karma-webpack: 4.0.2_webpack@4.35.3 + karma-webpack: 4.0.2_webpack@4.37.0 long: 4.0.0 mocha: 5.2.0 mocha-chrome: 1.1.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 mocha-multi-reporters: 1.1.7 moment: 2.24.0 @@ -139,7 +139,7 @@ dependencies: priorityqueuejs: 1.0.0 process: 0.11.10 promise: 8.0.3 - puppeteer: 1.18.1 + puppeteer: 1.19.0 qs: 6.7.0 query-string: 5.1.1 requirejs: 2.3.6 @@ -149,7 +149,7 @@ dependencies: rollup: 1.17.0 rollup-plugin-alias: 1.5.2 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 - rollup-plugin-inject: 3.0.0 + rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 @@ -160,7 +160,7 @@ dependencies: rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 rollup-plugin-uglify: 6.0.2_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 semaphore: 1.0.5 semver: 5.7.0 shx: 0.3.2 @@ -179,11 +179,11 @@ dependencies: url: 0.11.0 util: 0.11.1 uuid: 3.3.2 - webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.6_webpack@4.35.3 - webpack-dev-middleware: 3.7.0_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 + webpack-cli: 3.3.6_webpack@4.37.0 + webpack-dev-middleware: 3.7.0_webpack@4.37.0 ws: 6.2.1 - xhr-mock: 2.4.1 + xhr-mock: 2.5.0 xml2js: 0.4.19 yargs: 11.1.0 yarn: 1.17.3 @@ -195,20 +195,6 @@ packages: dev: false resolution: integrity: sha512-NnJqi6oHqt06Q2hz4nO1HO0QlyusBa3E/wezvn9flHEtl0IHYSmzGbtlb+MaAJ5GzxwqSevQ4q1+4B8fvVijOA== - /@azure/amqp-common/0.1.9_rhea-promise@0.1.15: - dependencies: - async-lock: 1.2.2 - debug: 3.2.6 - is-buffer: 2.0.3 - jssha: 2.3.1 - ms-rest-azure: 2.6.0 - rhea-promise: 0.1.15 - tslib: 1.10.0 - dev: false - peerDependencies: - rhea-promise: ^0.1.13 - resolution: - integrity: sha512-B/HFWNbqAjFjhj8x/zlHcpuYtsr92l3ZVArJdumi2kpN2Di/h4g6GIa2JeQEDD+rkLa3oAR6zHKfJbGnybOmvg== /@azure/amqp-common/1.0.0-preview.6_rhea-promise@0.1.15: dependencies: '@azure/ms-rest-nodeauth': 0.9.3 @@ -249,20 +235,6 @@ packages: dev: false resolution: integrity: sha512-mZHkadyAbhV1+brHEsWICnURW6E72D2HReM+8MWDn5oVJdlxD51w14PeqsOZC4UDYv4x2Eww5+PFRTEOrNB1Uw== - /@azure/event-hubs/1.0.8: - dependencies: - '@azure/amqp-common': 0.1.9_rhea-promise@0.1.15 - async-lock: 1.2.2 - debug: 3.2.6 - is-buffer: 2.0.2 - jssha: 2.3.1 - ms-rest-azure: 2.6.0 - rhea-promise: 0.1.15 - tslib: 1.10.0 - uuid: 3.3.2 - dev: false - resolution: - integrity: sha512-iYaB08erq2Eg5sUOXD0GXn4OmkqC67xczLfnlaaF0fLtgk999ePTuFqj4LHYT5HHUdDumYZ+U3WjPSvb0ztHJw== /@azure/event-hubs/2.1.1: dependencies: '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 @@ -277,19 +249,6 @@ packages: dev: false resolution: integrity: sha512-nGnFBPcB/rs+5YWwmHJg+d3Cs7BrjtVfuD1eEv8j+ui2X6uXxB88wom1A2t/7xsSzkunQSrXJ2mCwdHxKI5aHw== - /@azure/event-processor-host/1.0.6: - dependencies: - '@azure/event-hubs': 1.0.8 - async-lock: 1.2.2 - azure-storage: 2.10.3 - debug: 3.2.6 - ms-rest-azure: 2.6.0 - path-browserify: 1.0.0 - tslib: 1.10.0 - uuid: 3.3.2 - dev: false - resolution: - integrity: sha512-SjlC+eXXeVWEU0oSK7Q6xVhbFd9G7tG+F6QK7orqpIYSzn0NPtDeKZasTO+nS0uvrUDKr3vs2DiK+fEjz8hm5g== /@azure/logger-js/1.3.2: dependencies: tslib: 1.10.0 @@ -328,39 +287,39 @@ packages: dev: false resolution: integrity: sha512-aFHRw/IHhg3I9ZJW+Va4L+sCirFHMVIu6B7lFdL5mGLfG3xC5vDIdd957LRXFgy2OiKFRUC0QaKknd0YCsQIqA== - /@babel/code-frame/7.0.0: + /@babel/code-frame/7.5.5: dependencies: '@babel/highlight': 7.5.0 dev: false resolution: - integrity: sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - /@babel/generator/7.5.0: + integrity: sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + /@babel/generator/7.5.5: dependencies: - '@babel/types': 7.5.0 + '@babel/types': 7.5.5 jsesc: 2.5.2 - lodash: 4.17.14 + lodash: 4.17.15 source-map: 0.5.7 trim-right: 1.0.1 dev: false resolution: - integrity: sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== + integrity: sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== /@babel/helper-function-name/7.1.0: dependencies: '@babel/helper-get-function-arity': 7.0.0 '@babel/template': 7.4.4 - '@babel/types': 7.5.0 + '@babel/types': 7.5.5 dev: false resolution: integrity: sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== /@babel/helper-get-function-arity/7.0.0: dependencies: - '@babel/types': 7.5.0 + '@babel/types': 7.5.5 dev: false resolution: integrity: sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== /@babel/helper-split-export-declaration/7.4.4: dependencies: - '@babel/types': 7.5.0 + '@babel/types': 7.5.5 dev: false resolution: integrity: sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== @@ -372,66 +331,66 @@ packages: dev: false resolution: integrity: sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - /@babel/parser/7.5.0: + /@babel/parser/7.5.5: dev: false engines: node: '>=6.0.0' hasBin: true resolution: - integrity: sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== + integrity: sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== /@babel/template/7.4.4: dependencies: - '@babel/code-frame': 7.0.0 - '@babel/parser': 7.5.0 - '@babel/types': 7.5.0 + '@babel/code-frame': 7.5.5 + '@babel/parser': 7.5.5 + '@babel/types': 7.5.5 dev: false resolution: integrity: sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - /@babel/traverse/7.5.0: + /@babel/traverse/7.5.5: dependencies: - '@babel/code-frame': 7.0.0 - '@babel/generator': 7.5.0 + '@babel/code-frame': 7.5.5 + '@babel/generator': 7.5.5 '@babel/helper-function-name': 7.1.0 '@babel/helper-split-export-declaration': 7.4.4 - '@babel/parser': 7.5.0 - '@babel/types': 7.5.0 + '@babel/parser': 7.5.5 + '@babel/types': 7.5.5 debug: 4.1.1 globals: 11.12.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: - integrity: sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== - /@babel/types/7.5.0: + integrity: sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== + /@babel/types/7.5.5: dependencies: esutils: 2.0.2 - lodash: 4.17.14 + lodash: 4.17.15 to-fast-properties: 2.0.0 dev: false resolution: - integrity: sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== - /@microsoft/api-extractor-model/7.2.0: + integrity: sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== + /@microsoft/api-extractor-model/7.3.0: dependencies: '@microsoft/node-core-library': 3.13.0 - '@microsoft/tsdoc': 0.12.9 + '@microsoft/tsdoc': 0.12.10 '@types/node': 8.5.8 dev: false resolution: - integrity: sha512-LYMnA1cB2W3YuCOAFruNvnQBZ64OzEnsHxzcxclBhTcUGag6NrtGnip90AVTvVzFlXDLoT7trvPEenlWflWZFQ== - /@microsoft/api-extractor/7.3.2: + integrity: sha512-GfRaGz6d8fPhMOG70l2zS1s6Z8rCxcTHnwfVjb+6ln25eB4fN/jeDRlLKot+HOsVcbxvVseoeB0ZQL9nIsfbXw== + /@microsoft/api-extractor/7.3.4: dependencies: - '@microsoft/api-extractor-model': 7.2.0 + '@microsoft/api-extractor-model': 7.3.0 '@microsoft/node-core-library': 3.13.0 '@microsoft/ts-command-line': 4.2.6 - '@microsoft/tsdoc': 0.12.9 + '@microsoft/tsdoc': 0.12.10 colors: 1.2.5 - lodash: 4.17.14 + lodash: 4.17.15 resolve: 1.8.1 source-map: 0.6.1 typescript: 3.5.3 dev: false hasBin: true resolution: - integrity: sha512-7F/mQl09qFo09kDM9aIYBNUOwqX+IYM0nlsU+ipmSS92ifG21fWBOyqhuEE9hciKXho6dMIIGTTQa7L/HP4diA== + integrity: sha512-CPs2s1miV4JVju5sqrnFSjJMBiKnpfjeIe6vSj9aiCGWmwa4r7FHo81Htz8mLHTTQg3Uh8B4IqNDNu2xPm2QIw== /@microsoft/node-core-library/3.13.0: dependencies: '@types/fs-extra': 5.0.4 @@ -454,10 +413,10 @@ packages: dev: false resolution: integrity: sha512-GFLPg9Z5yiNca3di/V6Zt3tAvj1de9EK0eL88tE+1eckQSH405UQcm7D+H8LbEhRpqpG+ZqN9LXCAEw4L5uchg== - /@microsoft/tsdoc/0.12.9: + /@microsoft/tsdoc/0.12.10: dev: false resolution: - integrity: sha512-sDhulvuVk65eMppYOE6fr6mMI6RUqs53KUg9deYzNCBpP+2FhR0OFB5innEfdtSedk0LK+1Ppu6MxkfiNjS/Cw== + integrity: sha512-tsog/HTdM88/WyR0Jz7XWTI0ghbJkt9soFXnQJrINDyaTGzbCoJjRttaW/IY5eAp4eqDyfg++jq6o+byEDOkIQ== /@sinonjs/commons/1.4.0: dependencies: type-detect: 4.0.8 @@ -475,7 +434,7 @@ packages: dependencies: '@sinonjs/commons': 1.4.0 array-from: 2.1.1 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA== @@ -502,7 +461,7 @@ packages: /@types/body-parser/1.17.0: dependencies: '@types/connect': 3.4.32 - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w== @@ -524,7 +483,7 @@ packages: integrity: sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== /@types/connect/3.4.32: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== @@ -534,7 +493,7 @@ packages: integrity: sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A== /@types/dotenv/6.1.1: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg== @@ -552,7 +511,7 @@ packages: integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== /@types/express-serve-static-core/4.16.7: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/range-parser': 1.2.3 dev: false resolution: @@ -567,13 +526,13 @@ packages: integrity: sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== /@types/fs-extra/5.0.4: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g== /@types/fs-extra/7.0.0: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-ndoMMbGyuToTy4qB6Lex/inR98nPiNHacsgMPvy+zqMLgSxbt8VtWpDArpGp69h1fEDQHn1KB+9DWD++wgbwYA== @@ -581,13 +540,13 @@ packages: dependencies: '@types/events': 3.0.0 '@types/minimatch': 3.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== /@types/is-buffer/2.0.0: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-0f7N/e3BAz32qDYvgB4d2cqv1DqUwvGxHkXsrucICn8la1Vb6Yl6Eg8mPScGwUiqHJeE7diXlzaK+QMA9m4Gxw== @@ -610,14 +569,14 @@ packages: integrity: sha512-oBnY3csYnXfqZXDRBJwP1nDDJCW/+VMJ88UHT4DCy0deSXpJIQvMCwYlnmdW4M+u7PiSfQc44LmiFcUbJ8hLEw== /@types/jws/3.2.0: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-2s6isKtNTfbfeP/VtvdB9JXE1LkFXndO2AjQ2f+nvTqwL8bxK1s9qxmymwklCpNthJG16dwvpsBjKE14Yc/pbA== /@types/karma/3.0.3: dependencies: '@types/bluebird': 3.5.27 - '@types/node': 8.10.50 + '@types/node': 8.10.51 log4js: 3.0.6 dev: false resolution: @@ -628,7 +587,7 @@ packages: integrity: sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== /@types/memory-fs/0.3.2: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-j5AcZo7dbMxHoOimcHEIh0JZe5e1b8q8AqGSpZJrYc7xOgCIP79cIjTdx5jSDLtySnQDwkDTqwlC7Xw7uXw7qg== @@ -650,18 +609,18 @@ packages: integrity: sha512-DPxmjiDwubsNmguG5X4fEJ+XCyzWM3GXWsqQlvUcjJKa91IOoJUy51meDr0GkzK64qqNcq85ymLlyjoct9tInw== /@types/nock/10.0.3: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-OthuN+2FuzfZO3yONJ/QVjKmLEuRagS9TV9lEId+WHL9KhftYG+/2z+pxlr0UgVVXSpVD8woie/3fzQn8ft/Ow== - /@types/node/12.6.3: + /@types/node/12.6.8: dev: false resolution: - integrity: sha512-7TEYTQT1/6PP53NftXXabIZDaZfaoBdeBm8Md/i7zsWRoBe0YwOXguyK8vhHs8ehgB/w9U4K/6EWuTyp0W6nIA== - /@types/node/8.10.50: + integrity: sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + /@types/node/8.10.51: dev: false resolution: - integrity: sha512-+ZbcUwJdaBgOZpwXeT0v+gHC/jQbEfzoc9s4d0rN0JIKeQbuTrT+A2n1aQY6LpZjrLXJT7avVUqiCecCJeeZxA== + integrity: sha512-cArrlJp3Yv6IyFT/DYe+rlO8o3SIHraALbBW/+CcCYW/a9QucpLI+n2p4sRxAvl2O35TiecpX2heSZtJjvEO+Q== /@types/node/8.5.8: dev: false resolution: @@ -684,7 +643,7 @@ packages: integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== /@types/resolve/0.0.8: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== @@ -717,7 +676,7 @@ packages: integrity: sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== /@types/tunnel/0.0.0: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg== @@ -733,7 +692,7 @@ packages: integrity: sha512-KgOKTAD+9X+qvZnB5S1+onqKc4E+PZ+T6CM/NA5ohRPLHJXb+yCJMVf8pWOnvuBuKFNUAJW8N97IA6lba6mZGg== /@types/uuid/3.4.5: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-MNL15wC3EKyw1VLF+RoVO4hJJdk9t/Hlv3rt1OL65Qvuadm4BYo6g9ZJQqoq7X8NBFSsQXgAujWciovh2lpVjA== @@ -741,31 +700,31 @@ packages: dependencies: '@types/connect': 3.4.32 '@types/memory-fs': 0.3.2 - '@types/webpack': 4.4.35 + '@types/webpack': 4.32.1 loglevel: 1.6.3 dev: false resolution: integrity: sha512-DzNJJ6ah/6t1n8sfAgQyEbZ/OMmFcF9j9P3aesnm7G6/iBFR/qiGin8K89J0RmaWIBzhTMdDg3I5PmKmSv7N9w== - /@types/webpack/4.4.35: + /@types/webpack/4.32.1: dependencies: '@types/anymatch': 1.3.1 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/tapable': 1.0.4 '@types/uglify-js': 3.0.4 source-map: 0.6.1 dev: false resolution: - integrity: sha512-kf+mn/+CB4HsFb+Rz0QBRlo8nNC9LFhwqeK5xxhd3FEPRWJv6MFVnljKV5ARac56+syO8vIhq+nGt860+3wx7A== + integrity: sha512-9n38CBx9uga1FEAdTipnt0EkbKpsCJFh7xJb1LE65FFb/A6OOLFX022vYsGC1IyVCZ/GroNg9u/RMmlDxGcLIw== /@types/ws/6.0.1: dependencies: '@types/events': 3.0.0 - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q== /@types/xml2js/0.4.4: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 dev: false resolution: integrity: sha512-O6Xgai01b9PB3IGA0lRIp1Ex3JBcxGDhdO0n3NIIpCyDOAjxcIGQFmkvgJpP8anTrthxOUQjBfLdRRi0Zn/TXA== @@ -777,35 +736,15 @@ packages: dev: false resolution: integrity: sha1-LrHQCl5Ow/pYx2r94S4YK2bcXBw= - /@typescript-eslint/eslint-plugin/1.12.0_db854cf46887ef4aa7b9323cccc417a5: - dependencies: - '@typescript-eslint/experimental-utils': 1.12.0_eslint@5.16.0+typescript@3.5.3 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 - '@typescript-eslint/typescript-estree': 1.13.0 - eslint: 5.16.0 - eslint-utils: 1.4.0 - functional-red-black-tree: 1.0.1 - regexpp: 2.0.1 - tsutils: 3.14.0_typescript@3.5.3 - dev: false - engines: - node: ^6.14.0 || ^8.10.0 || >=9.10.0 - peerDependencies: - '@typescript-eslint/parser': ^1.9.0 - eslint: ^5.0.0 - typescript: '*' - resolution: - integrity: sha512-J/ZTZF+pLNqjXBGNfq5fahsoJ4vJOkYbitWPavA05IrZ7BXUaf4XWlhUB/ic1lpOGTRpLWF+PLAePjiHp6dz8g== /@typescript-eslint/eslint-plugin/1.13.0_0b5e999c52a893676e7127c05369c7b6: dependencies: '@typescript-eslint/experimental-utils': 1.13.0_eslint@5.16.0 '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 - '@typescript-eslint/typescript-estree': 1.13.0 eslint: 5.16.0 eslint-utils: 1.4.0 functional-red-black-tree: 1.0.1 regexpp: 2.0.1 - tsutils: 3.14.0_typescript@3.5.3 + tsutils: 3.14.1_typescript@3.5.3 dev: false engines: node: ^6.14.0 || ^8.10.0 || >=9.10.0 @@ -815,20 +754,6 @@ packages: typescript: '*' resolution: integrity: sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== - /@typescript-eslint/experimental-utils/1.12.0_eslint@5.16.0+typescript@3.5.3: - dependencies: - '@typescript-eslint/typescript-estree': 1.12.0 - eslint: 5.16.0 - eslint-scope: 4.0.3 - typescript: 3.5.3 - dev: false - engines: - node: ^6.14.0 || ^8.10.0 || >=9.10.0 - peerDependencies: - eslint: '*' - typescript: '*' - resolution: - integrity: sha512-s0soOTMJloytr9GbPteMLNiO2HvJ+qgQkRNplABXiVw6vq7uQRvidkby64Gqt/nA7pys74HksHwRULaB/QRVyw== /@typescript-eslint/experimental-utils/1.13.0_eslint@5.16.0: dependencies: '@types/json-schema': 7.0.3 @@ -842,21 +767,6 @@ packages: eslint: '*' resolution: integrity: sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== - /@typescript-eslint/parser/1.12.0_eslint@5.16.0+typescript@3.5.3: - dependencies: - '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 1.12.0_eslint@5.16.0+typescript@3.5.3 - '@typescript-eslint/typescript-estree': 1.12.0 - eslint: 5.16.0 - eslint-visitor-keys: 1.0.0 - dev: false - engines: - node: ^6.14.0 || ^8.10.0 || >=9.10.0 - peerDependencies: - eslint: ^5.0.0 - typescript: '*' - resolution: - integrity: sha512-0uzbaa9ZLCA5yMWJywnJJ7YVENKGWVUhJDV5UrMoldC5HoI54W5kkdPhTfmtFKpPFp93MIwmJj0/61ztvmz5Dw== /@typescript-eslint/parser/1.13.0_eslint@5.16.0: dependencies: '@types/eslint-visitor-keys': 1.0.0 @@ -871,15 +781,6 @@ packages: eslint: ^5.0.0 resolution: integrity: sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== - /@typescript-eslint/typescript-estree/1.12.0: - dependencies: - lodash.unescape: 4.0.1 - semver: 5.5.0 - dev: false - engines: - node: '>=6.14.0' - resolution: - integrity: sha512-nwN6yy//XcVhFs0ZyU+teJHB8tbCm7AIA8mu6E2r5hu6MajwYBY3Uwop7+rPZWUN/IUOHpL8C+iUPMDVYUU3og== /@typescript-eslint/typescript-estree/1.13.0: dependencies: lodash.unescape: 4.0.1 @@ -1046,9 +947,9 @@ packages: node: '>= 0.6' resolution: integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - /acorn-jsx/5.0.1_acorn@6.2.0: + /acorn-jsx/5.0.1_acorn@6.2.1: dependencies: - acorn: 6.2.0 + acorn: 6.2.1 dev: false peerDependencies: acorn: ^6.0.0 @@ -1067,17 +968,17 @@ packages: hasBin: true resolution: integrity: sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - /acorn/6.2.0: + /acorn/6.2.1: dev: false engines: node: '>=0.4.0' hasBin: true resolution: - integrity: sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== + integrity: sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== /adal-node/0.1.28: dependencies: - '@types/node': 8.10.50 - async: 2.6.3 + '@types/node': 8.10.51 + async: 3.1.0 date-utils: 1.2.21 jws: 3.2.2 request: 2.88.0 @@ -1485,16 +1386,20 @@ packages: integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= /async/2.6.0: dependencies: - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw== /async/2.6.3: dependencies: - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + /async/3.1.0: + dev: false + resolution: + integrity: sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== /asynckit/0.4.0: dev: false resolution: @@ -1571,7 +1476,7 @@ packages: convert-source-map: 1.6.0 debug: 2.6.9 json5: 0.5.1 - lodash: 4.17.14 + lodash: 4.17.15 minimatch: 3.0.4 path-is-absolute: 1.0.1 private: 0.1.8 @@ -1587,7 +1492,7 @@ packages: babel-types: 6.26.0 detect-indent: 4.0.0 jsesc: 1.3.0 - lodash: 4.17.14 + lodash: 4.17.15 source-map: 0.5.7 trim-right: 1.0.1 dev: false @@ -1615,7 +1520,7 @@ packages: babel-helper-function-name: 6.24.1 babel-runtime: 6.26.0 babel-types: 6.26.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= @@ -1662,7 +1567,7 @@ packages: dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= @@ -1744,7 +1649,7 @@ packages: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= @@ -1964,7 +1869,7 @@ packages: babel-runtime: 6.26.0 core-js: 2.6.9 home-or-tmp: 2.0.0 - lodash: 4.17.14 + lodash: 4.17.15 mkdirp: 0.5.1 source-map-support: 0.4.18 dev: false @@ -1983,7 +1888,7 @@ packages: babel-traverse: 6.26.0 babel-types: 6.26.0 babylon: 6.18.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= @@ -1997,7 +1902,7 @@ packages: debug: 2.6.9 globals: 9.18.0 invariant: 2.2.4 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -2005,7 +1910,7 @@ packages: dependencies: babel-runtime: 6.26.0 esutils: 2.0.2 - lodash: 4.17.14 + lodash: 4.17.15 to-fast-properties: 1.0.3 dev: false resolution: @@ -2229,8 +2134,8 @@ packages: integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== /browserslist/3.2.8: dependencies: - caniuse-lite: 1.0.30000984 - electron-to-chromium: 1.3.191 + caniuse-lite: 1.0.30000985 + electron-to-chromium: 1.3.200 dev: false hasBin: true resolution: @@ -2291,12 +2196,6 @@ packages: dev: false resolution: integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - /builtin-modules/1.1.1: - dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= /builtin-modules/3.1.0: dev: false engines: @@ -2412,10 +2311,10 @@ packages: node: '>=6' resolution: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - /caniuse-lite/1.0.30000984: + /caniuse-lite/1.0.30000985: dev: false resolution: - integrity: sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA== + integrity: sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w== /caseless/0.12.0: dev: false resolution: @@ -2524,7 +2423,7 @@ packages: integrity: sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== /chrome-launcher/0.10.7: dependencies: - '@types/node': 8.10.50 + '@types/node': 8.10.51 is-wsl: 1.1.0 lighthouse-logger: 1.2.0 mkdirp: 0.5.1 @@ -2986,12 +2885,12 @@ packages: node: '>=4.0' resolution: integrity: sha1-YV6CjiM90aubua4JUODOzPpuytg= - /date-format/2.0.0: + /date-format/2.1.0: dev: false engines: node: '>=4.0' resolution: - integrity: sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== + integrity: sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== /date-now/0.1.4: dev: false resolution: @@ -3285,10 +3184,10 @@ packages: dev: false resolution: integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - /electron-to-chromium/1.3.191: + /electron-to-chromium/1.3.200: dev: false resolution: - integrity: sha512-jasjtY5RUy/TOyiUYM2fb4BDaPZfm6CXRFeJDMfFsXYADGxUN49RBqtgB7EL2RmJXeIRUk9lM1U6A5yk2YJMPQ== + integrity: sha512-PUurrpyDA74MuAjJRD+79ss5BqJlU3mdArRbuu4wO/dt6jc3Ic/6BDmFJxkdwbfq39cHf/XKm2vW98XSvut9Dg== /elliptic/6.5.0: dependencies: bn.js: 4.11.8 @@ -3503,7 +3402,7 @@ packages: /eslint-detailed-reporter/0.8.0_eslint@5.16.0: dependencies: eslint: 5.16.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false peerDependencies: eslint: 3.0.0 - 5.9999.9999 @@ -3556,7 +3455,7 @@ packages: integrity: sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== /eslint/5.16.0: dependencies: - '@babel/code-frame': 7.0.0 + '@babel/code-frame': 7.5.5 ajv: 6.10.2 chalk: 2.4.2 cross-spawn: 6.0.5 @@ -3579,7 +3478,7 @@ packages: js-yaml: 3.13.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.3.0 - lodash: 4.17.14 + lodash: 4.17.15 minimatch: 3.0.4 mkdirp: 0.5.1 natural-compare: 1.4.0 @@ -3590,7 +3489,7 @@ packages: semver: 5.7.0 strip-ansi: 4.0.0 strip-json-comments: 2.0.1 - table: 5.4.1 + table: 5.4.4 text-table: 0.2.0 dev: false engines: @@ -3600,8 +3499,8 @@ packages: integrity: sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== /espree/5.0.1: dependencies: - acorn: 6.2.0 - acorn-jsx: 5.0.1_acorn@6.2.0 + acorn: 6.2.1 + acorn-jsx: 5.0.1_acorn@6.2.1 eslint-visitor-keys: 1.0.0 dev: false engines: @@ -4800,7 +4699,7 @@ packages: cli-width: 2.2.0 external-editor: 3.1.0 figures: 2.0.0 - lodash: 4.17.14 + lodash: 4.17.15 mute-stream: 0.0.7 run-async: 2.3.0 rxjs: 6.5.2 @@ -4891,12 +4790,6 @@ packages: dev: false resolution: integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - /is-buffer/2.0.2: - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-imvkm8cOGKeZ/NwkAd+FAURi0hsL9gr3kvdi0r3MnqChcOdPaQRIOQiOU+sD40XzUIe6nFmSHYtQjbkDvaQbEg== /is-buffer/2.0.3: dev: false engines: @@ -5197,13 +5090,13 @@ packages: integrity: sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== /istanbul-lib-instrument/3.3.0: dependencies: - '@babel/generator': 7.5.0 - '@babel/parser': 7.5.0 + '@babel/generator': 7.5.5 + '@babel/parser': 7.5.5 '@babel/template': 7.4.4 - '@babel/traverse': 7.5.0 - '@babel/types': 7.5.0 + '@babel/traverse': 7.5.5 + '@babel/types': 7.5.5 istanbul-lib-coverage: 2.0.5 - semver: 6.2.0 + semver: 6.3.0 dev: false engines: node: '>=6' @@ -5435,7 +5328,7 @@ packages: dependencies: dateformat: 1.0.12 istanbul: 0.4.5 - lodash: 4.17.14 + lodash: 4.17.15 minimatch: 3.0.4 source-map: 0.5.7 dev: false @@ -5463,7 +5356,7 @@ packages: /karma-ie-launcher/1.0.0_karma@4.2.0: dependencies: karma: 4.2.0 - lodash: 4.17.14 + lodash: 4.17.15 dev: false peerDependencies: karma: '>=0.9' @@ -5521,9 +5414,9 @@ packages: karma-coverage: '>=0.5.4' resolution: integrity: sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw== - /karma-rollup-preprocessor/7.0.0_rollup@1.17.0: + /karma-rollup-preprocessor/7.0.2_rollup@1.17.0: dependencies: - chokidar: 2.1.6 + chokidar: 3.0.2 debounce: 1.2.0 rollup: 1.17.0 dev: false @@ -5532,7 +5425,7 @@ packages: peerDependencies: rollup: '>= 1.0.0' resolution: - integrity: sha512-/a7bBtinT4+fdbnatCh5ZWvbqIqPzse7O3tvT4x9tadXsxPqybo1Lilpe7AKEmvhAcUwGRlcLOWeV66lIPFrXQ== + integrity: sha512-A+kr5FoiMr/S8dIPij/nuzB9PLhkrh3umFowjumAOKBDVQRhPYs3kKmQ82hP3+2MB6CICqeB4MmiIE4iTwUmDQ== /karma-sourcemap-loader/0.3.7: dependencies: graceful-fs: 4.2.0 @@ -5541,7 +5434,7 @@ packages: integrity: sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg= /karma-typescript-es6-transform/4.1.1: dependencies: - acorn: 6.2.0 + acorn: 6.2.1 acorn-walk: 6.2.0 babel-core: 6.26.3 babel-preset-env: 1.7.0 @@ -5550,15 +5443,15 @@ packages: dev: false resolution: integrity: sha512-WTGGThwufBT73c20q30iTcXq8Jb3Wat/h+JW1lwKgMtymT5rVxLknoaUVNfenaV3+cRMiTEsBT773kz9jWk6IQ== - /karma-webpack/4.0.2_webpack@4.35.3: + /karma-webpack/4.0.2_webpack@4.37.0: dependencies: clone-deep: 4.0.1 loader-utils: 1.2.3 neo-async: 2.6.1 schema-utils: 1.0.0 source-map: 0.7.3 - webpack: 4.35.3_webpack@4.35.3 - webpack-dev-middleware: 3.7.0_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 + webpack-dev-middleware: 3.7.0_webpack@4.37.0 dev: false engines: node: '>= 8.9.0' @@ -5582,7 +5475,7 @@ packages: graceful-fs: 4.2.0 http-proxy: 1.17.0 isbinaryfile: 3.0.3 - lodash: 4.17.14 + lodash: 4.17.15 log4js: 4.5.1 mime: 2.4.4 minimatch: 3.0.4 @@ -5784,10 +5677,10 @@ packages: dev: false resolution: integrity: sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - /lodash/4.17.14: + /lodash/4.17.15: dev: false resolution: - integrity: sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== /log-symbols/2.2.0: dependencies: chalk: 2.4.2 @@ -5810,7 +5703,7 @@ packages: integrity: sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ== /log4js/4.5.1: dependencies: - date-format: 2.0.0 + date-format: 2.1.0 debug: 4.1.1 flatted: 2.0.1 rfdc: 1.1.4 @@ -6266,19 +6159,6 @@ packages: hasBin: true resolution: integrity: sha512-Zk1HvDF13TLOBH2sML+4T1o5Z3nwUYN9ah3gz4TUrnwx7Sdk0N+rq5n+uzw0/3BAQH9aejPCJILWoWi7HW0qyw== - /mocha-junit-reporter/1.23.0_mocha@5.2.0: - dependencies: - debug: 2.6.9 - md5: 2.2.1 - mkdirp: 0.5.1 - mocha: 5.2.0 - strip-ansi: 4.0.0 - xml: 1.0.1 - dev: false - peerDependencies: - mocha: '>=2.2.5' - resolution: - integrity: sha512-pmpnEO4iDTmLfrT2RKqPsc5relG4crnDSGmXPuGogdda27A7kLujDNJV4EbTbXlVBCZXggN9rQYPEWMkOv4AAA== /mocha-junit-reporter/1.23.1_mocha@5.2.0: dependencies: debug: 2.6.9 @@ -6295,7 +6175,7 @@ packages: /mocha-multi-reporters/1.1.7: dependencies: debug: 3.2.6 - lodash: 4.17.14 + lodash: 4.17.15 dev: false resolution: integrity: sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI= @@ -6484,7 +6364,7 @@ packages: debug: 4.1.1 deep-equal: 1.0.1 json-stringify-safe: 5.0.1 - lodash: 4.17.14 + lodash: 4.17.15 mkdirp: 0.5.1 propagate: 1.0.0 qs: 6.7.0 @@ -7336,7 +7216,7 @@ packages: node: '>=8' resolution: integrity: sha512-xxy6mj9KTirR7fpsdXrIaC4oUb/uvFfchrC4K3RFxYLQ/G05RlhJIKFF2ayCQnNaFI+fOxGWzEVUhYMXHNljeQ== - /puppeteer/1.18.1: + /puppeteer/1.19.0: dependencies: debug: 4.1.1 extract-zip: 1.6.7 @@ -7351,7 +7231,7 @@ packages: node: '>=6.4.0' requiresBuild: true resolution: - integrity: sha512-luUy0HPSuWPsPZ1wAp6NinE0zgetWtudf5zwZ6dHjMWfYpTQcmKveFRox7VBNhQ98OjNA9PQ9PzQyX8k/KrxTg== + integrity: sha512-2S6E6ygpoqcECaagDbBopoSOPDv0pAZvTbnBgUY+6hq0/XDFDOLEMNlHF/SKJlzcaZ9ckiKjKDuueWI3FN/WXw== /qjobs/1.2.0: dev: false engines: @@ -7854,14 +7734,14 @@ packages: rollup: '>=1.12.0' resolution: integrity: sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA== - /rollup-plugin-inject/3.0.0: + /rollup-plugin-inject/3.0.1: dependencies: estree-walker: 0.6.1 magic-string: 0.25.3 rollup-pluginutils: 2.8.1 dev: false resolution: - integrity: sha512-euo9UmiJDxyGPjlHecpOZjUcBOOzaI5fbnqmFulG0I8k3or4JMi7UHDcRCcjkeDORF966jsA2qYbvXrgrmgCuw== + integrity: sha512-zF0jOuSpBxdLwAeDsS/+zGYgseaoH9LwqRNsByuzmE3bxfQ4Pg2gDoXGGWiia7iFyA8nLT+6iHrAqQYtH3Olow== /rollup-plugin-json/4.0.0: dependencies: rollup-pluginutils: 2.8.1 @@ -7928,7 +7808,7 @@ packages: integrity: sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= /rollup-plugin-terser/5.1.1_rollup@1.17.0: dependencies: - '@babel/code-frame': 7.0.0 + '@babel/code-frame': 7.5.5 jest-worker: 24.6.0 rollup: 1.17.0 rollup-pluginutils: 2.8.1 @@ -7941,7 +7821,7 @@ packages: integrity: sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ== /rollup-plugin-uglify/6.0.2_rollup@1.17.0: dependencies: - '@babel/code-frame': 7.0.0 + '@babel/code-frame': 7.5.5 jest-worker: 24.6.0 rollup: 1.17.0 serialize-javascript: 1.7.0 @@ -7951,21 +7831,7 @@ packages: rollup: '>=0.66.0 <2' resolution: integrity: sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== - /rollup-plugin-visualizer/2.4.4_rollup@1.17.0: - dependencies: - mkdirp: 0.5.1 - open: 6.4.0 - pupa: 2.0.0 - rollup: 1.17.0 - source-map: 0.7.3 - dev: false - engines: - node: '>=8.10' - peerDependencies: - rollup: '>=0.60.0' - resolution: - integrity: sha512-QMDrJfMwl8koU2IH8A/hb7zcE1Q+174uwjd9gtQ+ITbbmoGu9ro1pXoxGnTNXwkaAdlaRVECmfcAOga078Y+Qw== - /rollup-plugin-visualizer/2.5.3_rollup@1.17.0: + /rollup-plugin-visualizer/2.5.4_rollup@1.17.0: dependencies: mkdirp: 0.5.1 open: 6.4.0 @@ -7978,7 +7844,7 @@ packages: peerDependencies: rollup: '>=0.60.0' resolution: - integrity: sha512-DIEN4EL/a1S6zq2AnoD8gkzN0jUR+rhQCKjyHFtocYWiaghOsXEtG+EPxp+4iGCoMvvvVUHrt4FK/inmktuyBQ== + integrity: sha512-ehMX8Us4UmHmt9y6uvBdtW3ASAQDqCcmp07Qrm8dBqQMf1eAd89Rc/owGZr0cDp764dvLKQRA03W+nWlRajl4w== /rollup-pluginutils/2.8.1: dependencies: estree-walker: 0.6.1 @@ -7988,8 +7854,8 @@ packages: /rollup/1.17.0: dependencies: '@types/estree': 0.0.39 - '@types/node': 12.6.3 - acorn: 6.2.0 + '@types/node': 12.6.8 + acorn: 6.2.1 dev: false hasBin: true resolution: @@ -8076,11 +7942,11 @@ packages: hasBin: true resolution: integrity: sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - /semver/6.2.0: + /semver/6.3.0: dev: false hasBin: true resolution: - integrity: sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== /send/0.17.1: dependencies: debug: 2.6.9 @@ -8514,10 +8380,10 @@ packages: /streamroller/1.0.6: dependencies: async: 2.6.3 - date-format: 2.0.0 + date-format: 2.1.0 debug: 3.2.6 fs-extra: 7.0.1 - lodash: 4.17.14 + lodash: 4.17.15 dev: false engines: node: '>=6.0' @@ -8694,17 +8560,17 @@ packages: dev: false resolution: integrity: sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= - /table/5.4.1: + /table/5.4.4: dependencies: ajv: 6.10.2 - lodash: 4.17.14 + lodash: 4.17.15 slice-ansi: 2.1.0 string-width: 3.1.0 dev: false engines: node: '>=6.0.0' resolution: - integrity: sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== + integrity: sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg== /tapable/1.1.3: dev: false engines: @@ -8730,7 +8596,7 @@ packages: node: '>=4' resolution: integrity: sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= - /terser-webpack-plugin/1.3.0_webpack@4.35.3: + /terser-webpack-plugin/1.3.0_webpack@4.37.0: dependencies: cacache: 11.3.3 find-cache-dir: 2.1.0 @@ -8740,7 +8606,7 @@ packages: serialize-javascript: 1.7.0 source-map: 0.6.1 terser: 4.1.2 - webpack: 4.35.3_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 webpack-sources: 1.3.0 worker-farm: 1.7.0 dev: false @@ -8998,40 +8864,7 @@ packages: dev: false resolution: integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - /tslint/5.18.0_typescript@3.5.3: - dependencies: - '@babel/code-frame': 7.0.0 - builtin-modules: 1.1.1 - chalk: 2.4.2 - commander: 2.20.0 - diff: 3.5.0 - glob: 7.1.4 - js-yaml: 3.13.1 - minimatch: 3.0.4 - mkdirp: 0.5.1 - resolve: 1.11.1 - semver: 5.7.0 - tslib: 1.10.0 - tsutils: 2.29.0_typescript@3.5.3 - typescript: 3.5.3 - dev: false - engines: - node: '>=4.8.0' - hasBin: true - peerDependencies: - typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' - resolution: - integrity: sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== - /tsutils/2.29.0_typescript@3.5.3: - dependencies: - tslib: 1.10.0 - typescript: 3.5.3 - dev: false - peerDependencies: - typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' - resolution: - integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - /tsutils/3.14.0_typescript@3.5.3: + /tsutils/3.14.1_typescript@3.5.3: dependencies: tslib: 1.10.0 typescript: 3.5.3 @@ -9041,7 +8874,7 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev' resolution: - integrity: sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw== + integrity: sha512-kiuZzD1uUA5DxGj/uxbde+ymp6VVdAxdzOIlAFbYKrPyla8/uiJ9JLBm1QsPhOm4Muj0/+cWEDP99yoCUcSl6Q== /tty-browserify/0.0.0: dev: false resolution: @@ -9396,7 +9229,7 @@ packages: dev: false resolution: integrity: sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - /webpack-cli/3.3.6_webpack@4.35.3: + /webpack-cli/3.3.6_webpack@4.37.0: dependencies: chalk: 2.4.2 cross-spawn: 6.0.5 @@ -9408,7 +9241,7 @@ packages: loader-utils: 1.2.3 supports-color: 6.1.0 v8-compile-cache: 2.0.3 - webpack: 4.35.3_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 yargs: 13.2.4 dev: false engines: @@ -9418,12 +9251,12 @@ packages: webpack: 4.x.x resolution: integrity: sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== - /webpack-dev-middleware/3.7.0_webpack@4.35.3: + /webpack-dev-middleware/3.7.0_webpack@4.37.0: dependencies: memory-fs: 0.4.1 mime: 2.4.4 range-parser: 1.2.1 - webpack: 4.35.3_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 webpack-log: 2.0.0 dev: false engines: @@ -9448,13 +9281,13 @@ packages: dev: false resolution: integrity: sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== - /webpack/4.35.3_webpack@4.35.3: + /webpack/4.37.0_webpack@4.37.0: dependencies: '@webassemblyjs/ast': 1.8.5 '@webassemblyjs/helper-module-context': 1.8.5 '@webassemblyjs/wasm-edit': 1.8.5 '@webassemblyjs/wasm-parser': 1.8.5 - acorn: 6.2.0 + acorn: 6.2.1 ajv: 6.10.2 ajv-keywords: 3.4.1_ajv@6.10.2 chrome-trace-event: 1.0.2 @@ -9470,7 +9303,7 @@ packages: node-libs-browser: 2.2.1 schema-utils: 1.0.0 tapable: 1.1.3 - terser-webpack-plugin: 1.3.0_webpack@4.35.3 + terser-webpack-plugin: 1.3.0_webpack@4.37.0 watchpack: 1.6.0 webpack-sources: 1.3.0 dev: false @@ -9480,7 +9313,7 @@ packages: peerDependencies: webpack: '*' resolution: - integrity: sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA== + integrity: sha512-iJPPvL7XpbcbwOthbzpa2BSPlmGp8lGDokAj/LdWtK80rsPoPOdANSbDBf2GAVLKZD3GhCuQ/gGkgN9HWs0Keg== /which-module/1.0.0: dev: false resolution: @@ -9565,13 +9398,13 @@ packages: dev: false resolution: integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - /xhr-mock/2.4.1: + /xhr-mock/2.5.0: dependencies: global: 4.4.0 url: 0.11.0 dev: false resolution: - integrity: sha1-y1AuPVC4suwxvWF2bOUWv8HdBy8= + integrity: sha512-OFd7nm5mJTVQl9rC3Orp1HiJqWOqlh7W1hem/Ld/At+bjs7Dy2FuWYwTuP3gP8Y51FjGbIRAW9B9hbQdrZOPzw== /xml/1.0.1: dev: false resolution: @@ -9774,11 +9607,11 @@ packages: integrity: sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== 'file:projects/abort-controller.tgz': dependencies: - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 delay: 4.3.0 @@ -9800,7 +9633,7 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi-reporters: 1.1.7 nyc: 14.1.1 prettier: 1.18.2 @@ -9831,10 +9664,10 @@ packages: '@types/is-buffer': 2.0.0 '@types/jssha': 2.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/sinon': 5.0.7 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 async-lock: 1.2.2 buffer: 5.2.1 @@ -9856,18 +9689,18 @@ packages: karma-chrome-launcher: 2.2.0 karma-mocha: 1.3.0 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 nyc: 14.1.1 prettier: 1.18.2 process: 0.11.10 - puppeteer: 1.18.1 + puppeteer: 1.19.0 rhea: 1.0.8 rhea-promise: 0.1.15 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 - rollup-plugin-inject: 3.0.0 + rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 @@ -9894,7 +9727,7 @@ packages: dependencies: '@types/chai': 4.1.7 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 chai: 4.2.0 @@ -9905,7 +9738,7 @@ packages: eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi-reporters: 1.1.7 npm-run-all: 4.1.5 nyc: 14.1.1 @@ -9914,12 +9747,11 @@ packages: rollup: 1.17.0 rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 shx: 0.3.2 ts-loader: 5.4.5_typescript@3.5.3 ts-node: 7.0.1 tslib: 1.10.0 - tslint: 5.18.0_typescript@3.5.3 typescript: 3.5.3 uglify-js: 3.6.0 yarn: 1.17.3 @@ -9931,9 +9763,9 @@ packages: version: 0.0.0 'file:projects/core-asynciterator-polyfill.tgz': dependencies: - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 eslint-detailed-reporter: 0.8.0_eslint@5.16.0 @@ -9951,11 +9783,11 @@ packages: 'file:projects/core-auth.tgz': dependencies: '@azure/abort-controller': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 @@ -9966,7 +9798,7 @@ packages: eslint-plugin-promise: 4.2.1 inherits: 2.0.4 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 rimraf: 2.6.3 @@ -9978,7 +9810,7 @@ packages: rollup-plugin-replace: 2.2.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 @@ -9996,17 +9828,17 @@ packages: '@types/glob': 7.1.1 '@types/karma': 3.0.3 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/semver': 5.5.0 '@types/sinon': 5.0.7 '@types/tough-cookie': 2.3.5 '@types/tunnel': 0.0.0 '@types/uuid': 3.4.5 - '@types/webpack': 4.4.35 + '@types/webpack': 4.32.1 '@types/webpack-dev-middleware': 2.0.3 '@types/xml2js': 0.4.4 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 abortcontroller-polyfill: 1.3.0 axios: 0.19.0 axios-mock-adapter: 1.17.0_axios@0.19.0 @@ -10024,19 +9856,19 @@ packages: karma-chai: 0.1.0_chai@4.2.0+karma@4.2.0 karma-chrome-launcher: 2.2.0 karma-mocha: 1.3.0 - karma-rollup-preprocessor: 7.0.0_rollup@1.17.0 + karma-rollup-preprocessor: 7.0.2_rollup@1.17.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 - karma-webpack: 4.0.2_webpack@4.35.3 + karma-webpack: 4.0.2_webpack@4.37.0 mocha: 5.2.0 mocha-chrome: 1.1.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi-reporters: 1.1.7 npm-run-all: 4.1.5 nyc: 14.1.1 opn-cli: 4.1.0 process: 0.11.10 - puppeteer: 1.18.1 + puppeteer: 1.19.0 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-alias: 1.5.2 @@ -10046,7 +9878,7 @@ packages: rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 rollup-plugin-resolve: 0.0.1-predev.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 semver: 5.7.0 shx: 0.3.2 sinon: 7.3.2 @@ -10058,10 +9890,10 @@ packages: typescript: 3.5.3 uglify-js: 3.6.0 uuid: 3.3.2 - webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.6_webpack@4.35.3 - webpack-dev-middleware: 3.7.0_webpack@4.35.3 - xhr-mock: 2.4.1 + webpack: 4.37.0_webpack@4.37.0 + webpack-cli: 3.3.6_webpack@4.37.0 + webpack-dev-middleware: 3.7.0_webpack@4.37.0 + xhr-mock: 2.5.0 xml2js: 0.4.19 yarn: 1.17.3 dev: false @@ -10073,9 +9905,9 @@ packages: 'file:projects/core-paging.tgz': dependencies: '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 eslint-detailed-reporter: 0.8.0_eslint@5.16.0 @@ -10093,14 +9925,14 @@ packages: 'file:projects/cosmos.tgz': dependencies: '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/priorityqueuejs': 1.0.1 '@types/semaphore': 1.1.0 '@types/sinon': 5.0.7 '@types/tunnel': 0.0.0 '@types/underscore': 1.9.2 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 binary-search-bounds: 2.0.3 create-hmac: 1.1.7 eslint: 5.16.0 @@ -10111,7 +9943,7 @@ packages: eslint-plugin-promise: 4.2.1 execa: 1.0.0 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 priorityqueuejs: 1.0.0 @@ -10124,8 +9956,8 @@ packages: tslib: 1.10.0 tunnel: 0.0.6 typescript: 3.5.3 - webpack: 4.35.3_webpack@4.35.3 - webpack-cli: 3.3.6_webpack@4.35.3 + webpack: 4.37.0_webpack@4.37.0 + webpack-cli: 3.3.6_webpack@4.37.0 dev: false name: '@rush-temp/cosmos' resolution: @@ -10136,7 +9968,7 @@ packages: dependencies: '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -10145,11 +9977,11 @@ packages: '@types/dotenv': 6.1.1 '@types/long': 4.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/uuid': 3.4.5 '@types/ws': 6.0.1 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 async-lock: 1.2.2 chai: 4.2.0 @@ -10179,16 +10011,16 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 rhea-promise: 0.1.15 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 - rollup-plugin-inject: 3.0.0 + rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 @@ -10212,7 +10044,7 @@ packages: dependencies: '@azure/event-hubs': 2.1.1 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -10220,11 +10052,11 @@ packages: '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/uuid': 3.4.5 '@types/ws': 6.0.1 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 async-lock: 1.2.2 azure-storage: 2.10.3 chai: 4.2.0 @@ -10241,9 +10073,8 @@ packages: eslint-plugin-promise: 4.2.1 https-proxy-agent: 2.2.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 - ms-rest-azure: 2.6.0 nyc: 14.1.1 path-browserify: 1.0.0 prettier: 1.18.2 @@ -10271,11 +10102,11 @@ packages: dependencies: '@types/jws': 3.2.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/qs': 6.5.3 '@types/uuid': 3.4.5 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 @@ -10293,10 +10124,10 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 qs: 6.7.0 rimraf: 2.6.3 rollup: 1.17.0 @@ -10307,7 +10138,7 @@ packages: rollup-plugin-replace: 2.2.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 @@ -10320,11 +10151,11 @@ packages: version: 0.0.0 'file:projects/keyvault-certificates.tgz': dependencies: - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/chai': 4.1.7 - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 chai: 4.2.0 eslint: 5.16.0 eslint-config-prettier: 4.3.0_eslint@5.16.0 @@ -10351,17 +10182,17 @@ packages: dependencies: '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/chai': 4.1.7 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 @@ -10393,7 +10224,7 @@ packages: nock: 10.0.6 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 @@ -10404,9 +10235,8 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.5.3_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 source-map-support: 0.5.12 - ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 uglify-js: 3.6.0 @@ -10421,19 +10251,17 @@ packages: dependencies: '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 - '@azure/ms-rest-azure-js': 1.3.8 - '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/chai': 4.1.7 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 @@ -10465,7 +10293,7 @@ packages: nock: 10.0.6 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 @@ -10476,9 +10304,8 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.5.3_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 source-map-support: 0.5.12 - ts-mocha: 6.0.0_mocha@5.2.0 tslib: 1.10.0 typescript: 3.5.3 uglify-js: 3.6.0 @@ -10494,7 +10321,7 @@ packages: '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 '@azure/arm-servicebus': 3.2.0 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/async-lock': 1.1.1 '@types/chai': 4.1.7 '@types/chai-as-promised': 7.1.0 @@ -10503,10 +10330,10 @@ packages: '@types/is-buffer': 2.0.0 '@types/long': 4.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/ws': 6.0.1 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 buffer: 5.2.1 chai: 4.2.0 @@ -10536,20 +10363,20 @@ packages: karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 long: 4.0.0 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 moment: 2.24.0 nyc: 14.1.1 prettier: 1.18.2 process: 0.11.10 promise: 8.0.3 - puppeteer: 1.18.1 + puppeteer: 1.19.0 rhea: 1.0.8 rhea-promise: 0.1.15 rimraf: 2.6.3 rollup: 1.17.0 rollup-plugin-commonjs: 10.0.1_rollup@1.17.0 - rollup-plugin-inject: 3.0.0 + rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-resolve: 5.2.0_rollup@1.17.0 @@ -10570,16 +10397,16 @@ packages: 'file:projects/storage-blob.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10609,13 +10436,13 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 nise: 1.5.0 nock: 10.0.6 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 @@ -10626,7 +10453,7 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10641,16 +10468,16 @@ packages: 'file:projects/storage-file.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10680,13 +10507,13 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 nise: 1.5.0 nock: 10.0.6 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 @@ -10697,7 +10524,7 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10712,16 +10539,16 @@ packages: 'file:projects/storage-queue.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/dotenv': 6.1.1 '@types/fs-extra': 7.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 dotenv: 7.0.0 @@ -10750,13 +10577,13 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 nise: 1.5.0 nock: 10.0.6 nyc: 14.1.1 prettier: 1.18.2 - puppeteer: 1.18.1 + puppeteer: 1.19.0 query-string: 5.1.1 rimraf: 2.6.3 rollup: 1.17.0 @@ -10767,7 +10594,7 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 source-map-support: 0.5.12 ts-node: 7.0.1 tslib: 1.10.0 @@ -10782,11 +10609,11 @@ packages: 'file:projects/template.tgz': dependencies: '@azure/ms-rest-js': 1.8.13 - '@microsoft/api-extractor': 7.3.2 + '@microsoft/api-extractor': 7.3.4 '@types/mocha': 5.2.7 - '@types/node': 8.10.50 - '@typescript-eslint/eslint-plugin': 1.12.0_db854cf46887ef4aa7b9323cccc417a5 - '@typescript-eslint/parser': 1.12.0_eslint@5.16.0+typescript@3.5.3 + '@types/node': 8.10.51 + '@typescript-eslint/eslint-plugin': 1.13.0_0b5e999c52a893676e7127c05369c7b6 + '@typescript-eslint/parser': 1.13.0_eslint@5.16.0 assert: 1.5.0 cross-env: 5.2.0 eslint: 5.16.0 @@ -10809,7 +10636,7 @@ packages: karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 mocha: 5.2.0 - mocha-junit-reporter: 1.23.0_mocha@5.2.0 + mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 rimraf: 2.6.3 @@ -10821,7 +10648,7 @@ packages: rollup-plugin-replace: 2.2.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.11.1 @@ -10851,7 +10678,7 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.17.0 rollup-plugin-terser: 5.1.1_rollup@1.17.0 - rollup-plugin-visualizer: 2.4.4_rollup@1.17.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.17.0 tslib: 1.10.0 dev: false name: '@rush-temp/test-utils-recorder' @@ -10862,8 +10689,7 @@ packages: 'file:projects/testhub.tgz': dependencies: '@azure/event-hubs': 2.1.1 - '@azure/event-processor-host': 1.0.6 - '@types/node': 8.10.50 + '@types/node': 8.10.51 '@types/uuid': 3.4.5 '@types/yargs': 11.1.2 async-lock: 1.2.2 @@ -10885,7 +10711,6 @@ packages: integrity: sha512-rdhMvXi7mvg+wP0vVdqhouZr17v9a3n4KDMSyuUPU9qhOvY6bMfqoeIXrzgWkCXtR9yjL15gwJHKWsBlByGE4A== tarball: 'file:projects/testhub.tgz' version: 0.0.0 -registry: '' specifiers: '@azure/abort-controller': 1.0.0-preview.1 '@azure/amqp-common': 1.0.0-preview.6 From fde7439b97a8c4f6dadfcf71ddeab5095e2c7e31 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 26 Jul 2019 00:03:43 -0700 Subject: [PATCH 58/83] fix browser issue with recorder package --- sdk/test-utils/recorder/src/baseRecorder.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 89143cfe857d..efa64f4f15c6 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -14,8 +14,8 @@ import { isRecording } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; -import nock from "nock"; -import path from "path"; + +let nock: any; let replaceableVariables: { [x: string]: string } = {}; export function setReplaceableVariables(a: { [x: string]: string }): void { @@ -34,6 +34,10 @@ export function setReplacements(maps: any): void { } export function setEnviromentOnLoad() { + if (!isBrowser() && (isRecording || isPlayingBack)) { + nock = require("nock"); + } + if (isBrowser() && isRecording()) { customConsoleLog(); } @@ -132,6 +136,7 @@ export class NockRecorder extends BaseRecorder { } public playback(filePath: string): void { + let path = require("path"); this.uniqueTestInfo = require(path.resolve( filePath, "../../recordings/" + this.filepath From 59380d584018d9c2d3a3b0987058126c527ffcac Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 26 Jul 2019 01:29:33 -0700 Subject: [PATCH 59/83] Updating GuideLines with karma setup --- sdk/test-utils/recorder/GUIDELINES.md | 70 +++++++++++++++++++-------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index dba318061ca1..049b7798aef4 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -229,6 +229,55 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. --- +## Setting up karma.conf.js file in the sdk + +### Karma.conf.js + +- Install and add - `plugins: ["karma-json-to-file-reporter", "karma-json-preprocessor" ]` +- Import recordings for playback mode - `files: ["recordings/browsers/**/*.json"]` +- Preprocessor for converting JSON files into JS variables `preprocessors: {"recordings/browsers/**/*.json": ["json"]}` +- Load `TEST_MODE` along with other variables `envPreprocessor: ["TEST_MODE"]` +- jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs `reporters: [ "json-to-file"]` + + ```javascript + + jsonToFileReporter: { + filter: function(obj) { + if (obj.writeFile) { + const fs = require("fs-extra"); + // Create the directories recursively incase they don't exist + try { + // Stripping away the filename from the file path and retaining the directory structure + fs.ensureDirSync(obj.path.substring(0, obj.path.lastIndexOf("/") + 1)); + } catch (err) { + if (err.code !== "EEXIST") throw err; + } + fs.writeFile(obj.path, JSON.stringify(obj.content, null, " "), (err) => { + if (err) { + throw err; + } + }); + } + return false; + }, + outputPath: "." + }, + + browserConsoleLogOptions: { + terminal: process.env.TEST_MODE !== "record" + }, + + ``` + + In browser, once the content to be recorded is ready, recordings are supposed to be sent to the appropriate karma reporter in order to generate the corresponding recording file. The way of doing this is by printing the recordings to `console.log()` and filter the console.logs with karma plugins. + + Console logs with `.writeFile` property are captured and are written to a file(as test recordings). Any other console statements are captured and printed normally. + + - Example - `console.warn("hello"); -> console.log({ warn: "hello" });` + - Example - `console.log("hello"); -> console.log({ log: "hello" });` + +--- + # More Information ## NOCK [for node tests] @@ -247,27 +296,6 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. - Some Nise functions are being overwritten to enable record and playback. - karma.conf.js is supposed to be updated with the new Karma plugins which are required to access the disk and write/read recording files ([karma-json-to-file-reporter](https://www.npmjs.com/package/karma-json-to-file-reporter) to write and [karma-json-preprocessor](https://www.npmjs.com/package/karma-json-preprocessor) to read). - -------- TO DO ----------- - ---- - -## Note - `console.log()` for browser tests - -- In browser, once the content to be recorded is ready, recordings are supposed to be sent to the appropriate karma reporter in order to generate the corresponding recording file. The way of doing this is by printing the recordings to `console.log()`. As a result, the console gets filled with lots of prints while recording. -- To avert the issue, we came up with the following solution. - - - Convert the content corresponding to any console statement into (JSON.stringify)-ed content in record mode for browser tests. - [Add a custom console.log() which converts all the console statements into console.log() with stringified JSON objects.] - - Filter the console.logs with stringified JSON objects in karma.conf.js as explained below. - - Karma.conf.js - - - jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs. - - Console logs with `.writeFile` property are captured and are written to a file(as test recordings). - - Any other console statements are captured and printed normally. - - Example - `console.warn("hello"); -> console.log({ warn: "hello" });` - - Example - `console.log("hello"); -> console.log({ log: "hello" });` - --- ## References From ccbe7bf873970eda2735ac1d7a358fe2f2ebc920 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Fri, 26 Jul 2019 01:36:43 -0700 Subject: [PATCH 60/83] final version of karma settings --- sdk/test-utils/recorder/GUIDELINES.md | 57 ++++++++++++++++++--------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index 049b7798aef4..ccb63c468eca 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -233,32 +233,51 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. ### Karma.conf.js -- Install and add - `plugins: ["karma-json-to-file-reporter", "karma-json-preprocessor" ]` -- Import recordings for playback mode - `files: ["recordings/browsers/**/*.json"]` -- Preprocessor for converting JSON files into JS variables `preprocessors: {"recordings/browsers/**/*.json": ["json"]}` -- Load `TEST_MODE` along with other variables `envPreprocessor: ["TEST_MODE"]` -- jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs `reporters: [ "json-to-file"]` +- Install and add the plugins `"karma-json-to-file-reporter", "karma-json-preprocessor"` ```javascript + plugins: ["karma-json-to-file-reporter", "karma-json-preprocessor"], + ``` + +- Import recordings for playback mode + ```javascript + files: ["recordings/browsers/**/*.json"], + ``` +- Preprocessor for converting JSON files into JS variables + ```javascript + preprocessors: {"recordings/browsers/**/*.json": ["json"]}; + ``` +- Load `TEST_MODE` along with other variables + ```javascript + envPreprocessor: ["TEST_MODE"], + ``` +- jsonToFileReporter in karma.conf.js filters the JSON strings in console.logs + + ```javascript + reporters: ["json-to-file"], jsonToFileReporter: { filter: function(obj) { - if (obj.writeFile) { - const fs = require("fs-extra"); - // Create the directories recursively incase they don't exist - try { - // Stripping away the filename from the file path and retaining the directory structure - fs.ensureDirSync(obj.path.substring(0, obj.path.lastIndexOf("/") + 1)); - } catch (err) { - if (err.code !== "EEXIST") throw err; - } - fs.writeFile(obj.path, JSON.stringify(obj.content, null, " "), (err) => { - if (err) { - throw err; + if (process.env.TEST_MODE === "record") { + if (obj.writeFile) { + const fs = require("fs-extra"); + // Create the directories recursively incase they don't exist + try { + // Stripping away the filename from the file path and retaining the directory structure + fs.ensureDirSync(obj.path.substring(0, obj.path.lastIndexOf("/") + 1)); + } catch (err) { + if (err.code !== "EEXIST") throw err; } - }); + fs.writeFile(obj.path, JSON.stringify(obj.content, null, " "), (err) => { + if (err) { + throw err; + } + }); + } else { + console.log(obj); + } + return false; } - return false; }, outputPath: "." }, From 8d8b8a4053aec060012bba6de0e93a21a25a15a7 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 30 Jul 2019 14:15:37 -0700 Subject: [PATCH 61/83] if (env.ACCOUNT_NAME) replace acc name only if present --- sdk/test-utils/recorder/src/baseRecorder.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index efa64f4f15c6..fc697e19c454 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -102,7 +102,9 @@ export abstract class BaseRecorder { } // Handling storage environment variables separately - updatedRecording = recording.replace(new RegExp(env.ACCOUNT_NAME, "g"), "fakestorageaccount"); + if (env.ACCOUNT_NAME) { + updatedRecording = recording.replace(new RegExp(env.ACCOUNT_NAME, "g"), "fakestorageaccount"); + } if (env.ACCOUNT_KEY) { updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); } From c46105c7752fcff2ce7abeae5655569da49fd3e2 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 30 Jul 2019 16:12:06 -0700 Subject: [PATCH 62/83] update fs-extra module --- sdk/test-utils/recorder/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index 9852aa5456ac..fc3f21cc5a7a 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -58,12 +58,12 @@ "sideEffects": false, "private": true, "dependencies": { - "@types/fs-extra": "~7.0.0", + "@types/fs-extra": "^8.0.0", "@types/mocha": "^5.2.5", "@types/nise": "^1.4.0", "@types/nock": "^10.0.1", "@types/query-string": "6.2.0", - "fs-extra": "~8.0.1", + "fs-extra": "^8.1.0", "nise": "^1.4.10", "nock": "^10.0.6", "query-string": "^5.0.0", From a5815e4d8866574bfd616f948c3b6dee4005c00b Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 30 Jul 2019 16:12:49 -0700 Subject: [PATCH 63/83] add a no-op placeholder test --- sdk/test-utils/recorder/test/index.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sdk/test-utils/recorder/test/index.ts diff --git a/sdk/test-utils/recorder/test/index.ts b/sdk/test-utils/recorder/test/index.ts new file mode 100644 index 000000000000..e69de29bb2d1 From e35bfd25815da24158bbf53772e190343ed4bf6a Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 31 Jul 2019 11:22:29 -0700 Subject: [PATCH 64/83] rollup entry point fix --- sdk/test-utils/recorder/rollup.base.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/rollup.base.config.js b/sdk/test-utils/recorder/rollup.base.config.js index fbf75c5f780b..9b3d252cc4d2 100644 --- a/sdk/test-utils/recorder/rollup.base.config.js +++ b/sdk/test-utils/recorder/rollup.base.config.js @@ -8,7 +8,7 @@ import viz from "rollup-plugin-visualizer"; const pkg = require("./package.json"); const depNames = Object.keys(pkg.dependencies); -const input = "dist-esm/index.js"; +const input = "dist-esm/src/index.js"; const production = process.env.NODE_ENV === "production"; export function nodeConfig(test = false) { From 754413b5fbec955254dbbc21c111706809b10082 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 31 Jul 2019 11:29:04 -0700 Subject: [PATCH 65/83] update typings path --- sdk/test-utils/recorder/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/package.json b/sdk/test-utils/recorder/package.json index fc3f21cc5a7a..3dadbc61a9ce 100644 --- a/sdk/test-utils/recorder/package.json +++ b/sdk/test-utils/recorder/package.json @@ -7,7 +7,7 @@ "browser": { "dist/index.js": "./browser/azure-test-utils-recorder.js" }, - "types": "./typings/index.d.ts", + "types": "./typings/src/index.d.ts", "scripts": { "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", "build:browser": "tsc -p . && cross-env ONLY_BROWSER=true rollup -c 2>&1", From 8426897d2069fe74d5e9f1688c96ef5bf0a4c258 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 6 Aug 2019 15:02:07 -0700 Subject: [PATCH 66/83] add TODOs --- sdk/test-utils/recorder/src/baseRecorder.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index fc697e19c454..e2a51084e29f 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -42,6 +42,7 @@ export function setEnviromentOnLoad() { customConsoleLog(); } + // TODO - The following will be moved to the storage sdks when @azure/test-utils-recorder is imported if (isPlayingBack()) { // Providing dummy values to avoid the error [ENVs for storage packages] env.ACCOUNT_NAME = "fakestorageaccount"; @@ -53,6 +54,7 @@ export function setEnviromentOnLoad() { } } +// TODO - skip list will be removed - #4336 const skip = [ // Abort "browsers/aborter/recording_should_abort_after_aborter_timeout.json" @@ -101,6 +103,7 @@ export abstract class BaseRecorder { updatedRecording = map(updatedRecording); } + // TODO - The following will be moved to the storage sdks when @azure/test-utils-recorder is imported // Handling storage environment variables separately if (env.ACCOUNT_NAME) { updatedRecording = recording.replace(new RegExp(env.ACCOUNT_NAME, "g"), "fakestorageaccount"); From 4d2237c74f72479786aaa839d1a6cb1f96cf43b4 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 6 Aug 2019 15:04:03 -0700 Subject: [PATCH 67/83] explanation for require("path") instead of import --- sdk/test-utils/recorder/src/baseRecorder.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index e2a51084e29f..d43caf66261f 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -141,6 +141,15 @@ export class NockRecorder extends BaseRecorder { } public playback(filePath: string): void { + /** + * `@azure/test-utils-recorder` package is used for both the browser and node tests + * + * During the playback mode, + * `path` module is leveraged to import the node test recordings and `path` module can't be imported in the browser. + * So, instead of `import`-ing the `path` library, `require` is being used and this code path is never executed in the browser. + * + * [A diiferent strategy is in place to import recordings for browser tests by leveraging `karma` plugins.] + */ let path = require("path"); this.uniqueTestInfo = require(path.resolve( filePath, From 65dcf53071e9d5cd99a9893c3917b4626f8a6fda Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 6 Aug 2019 15:05:05 -0700 Subject: [PATCH 68/83] moved delay() to utils --- sdk/test-utils/recorder/src/delay.ts | 15 --------------- sdk/test-utils/recorder/src/utils.ts | 12 ++++++++++++ 2 files changed, 12 insertions(+), 15 deletions(-) delete mode 100644 sdk/test-utils/recorder/src/delay.ts diff --git a/sdk/test-utils/recorder/src/delay.ts b/sdk/test-utils/recorder/src/delay.ts deleted file mode 100644 index 53e4b5dfcc3f..000000000000 --- a/sdk/test-utils/recorder/src/delay.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -import { isPlayingBack } from "./utils"; -/** - * Usage - `await delay()` - * This `delay` has no effect if the `TEST_MODE` is `"playback"`. - * If the `TEST_MODE` is not `"playback"`, `delay` is a wrapper for setTimeout that resolves a promise after t milliseconds. - * - * @param {number} milliseconds The number of milliseconds to be delayed. - * @returns {Promise} Resolved promise - */ -export function delay(milliseconds: number): Promise | null { - return isPlayingBack() ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); -} diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index bfce4851c58b..7b0ace30bf47 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -76,3 +76,15 @@ export function getUniqueName(prefix: string): string { export function isBrowser(): boolean { return typeof window !== "undefined"; } + +/** + * Usage - `await delay()` + * This `delay` has no effect if the `TEST_MODE` is `"playback"`. + * If the `TEST_MODE` is not `"playback"`, `delay` is a wrapper for setTimeout that resolves a promise after t milliseconds. + * + * @param {number} milliseconds The number of milliseconds to be delayed. + * @returns {Promise} Resolved promise + */ +export function delay(milliseconds: number): Promise | null { + return isPlayingBack() ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); +} From c102b3eee6c475b99dd82ba1374339112e4ecc82 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 6 Aug 2019 15:12:18 -0700 Subject: [PATCH 69/83] delay moved to utils --- sdk/test-utils/recorder/src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts index c45beab01cfc..4985cfcae37b 100644 --- a/sdk/test-utils/recorder/src/index.ts +++ b/sdk/test-utils/recorder/src/index.ts @@ -2,6 +2,5 @@ // Licensed under the MIT License. See License.txt in the project root for license information. export { record, Recorder } from "./recorder"; -export { delay } from "./delay"; -export { env } from "./utils"; +export { env, delay } from "./utils"; export { setReplaceableVariables, setReplacements, setEnviromentOnLoad } from "./baseRecorder"; From 725baa0bfc5e02db0dc4c4efdf56f61807711587 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Tue, 6 Aug 2019 15:13:22 -0700 Subject: [PATCH 70/83] isRecording -> isRecordMode, isPlayingBack -> isPlaybackMode --- sdk/test-utils/recorder/src/baseRecorder.ts | 12 ++++++------ sdk/test-utils/recorder/src/recorder.ts | 18 +++++++++--------- sdk/test-utils/recorder/src/utils.ts | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index d43caf66261f..01cdac334fe7 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -10,8 +10,8 @@ import { escapeRegExp, env, TestInfo, - isPlayingBack, - isRecording + isPlaybackMode, + isRecordMode } from "./utils"; import { customConsoleLog } from "./customConsoleLog"; @@ -20,7 +20,7 @@ let nock: any; let replaceableVariables: { [x: string]: string } = {}; export function setReplaceableVariables(a: { [x: string]: string }): void { replaceableVariables = a; - if (isPlayingBack()) { + if (isPlaybackMode()) { // Providing dummy values to avoid the error Object.keys(a).map((k) => { env[k] = a[k]; @@ -34,16 +34,16 @@ export function setReplacements(maps: any): void { } export function setEnviromentOnLoad() { - if (!isBrowser() && (isRecording || isPlayingBack)) { + if (!isBrowser() && (isRecordMode || isPlaybackMode)) { nock = require("nock"); } - if (isBrowser() && isRecording()) { + if (isBrowser() && isRecordMode()) { customConsoleLog(); } // TODO - The following will be moved to the storage sdks when @azure/test-utils-recorder is imported - if (isPlayingBack()) { + if (isPlaybackMode()) { // Providing dummy values to avoid the error [ENVs for storage packages] env.ACCOUNT_NAME = "fakestorageaccount"; env.ACCOUNT_KEY = "aaaaa"; diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index 7d1b5c7810d5..d6b8f53387ec 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. -import { getUniqueName, isBrowser, isRecording, isPlayingBack } from "./utils"; +import { getUniqueName, isBrowser, isRecordMode, isPlaybackMode } from "./utils"; import { NiseRecorder, NockRecorder, BaseRecorder, setEnviromentOnLoad } from "./baseRecorder"; /** @@ -67,20 +67,20 @@ export function record(testContext: Mocha.Context): Recorder { recorder = new NockRecorder(testHierarchy, testTitle); } - if (recorder.skip() && (isRecording() || isPlayingBack())) { + if (recorder.skip() && (isRecordMode() || isPlaybackMode())) { testContext.skip(); } // If neither recording nor playback is enabled, requests hit the live-service and no recordings are generated - if (isRecording()) { + if (isRecordMode()) { recorder.record(); - } else if (isPlayingBack()) { + } else if (isPlaybackMode()) { recorder.playback(testContext.currentTest!.file!); } return { stop: function() { - if (isRecording()) { + if (isRecordMode()) { recorder.stop(); } }, @@ -89,10 +89,10 @@ export function record(testContext: Mocha.Context): Recorder { if (!label) { label = prefix; } - if (isRecording()) { + if (isRecordMode()) { name = getUniqueName(prefix); recorder.uniqueTestInfo["uniqueName"][label] = name; - } else if (isPlayingBack()) { + } else if (isPlaybackMode()) { name = recorder.uniqueTestInfo["uniqueName"][label]; } else { name = getUniqueName(prefix); @@ -101,10 +101,10 @@ export function record(testContext: Mocha.Context): Recorder { }, newDate: function(label: string): Date { let date: Date; - if (isRecording()) { + if (isRecordMode()) { date = new Date(); recorder.uniqueTestInfo["newDate"][label] = date.toISOString(); - } else if (isPlayingBack()) { + } else if (isPlaybackMode()) { date = new Date(recorder.uniqueTestInfo["newDate"][label]); } else { date = new Date(); diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index 7b0ace30bf47..b3fdfa2f20e8 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -8,11 +8,11 @@ export interface TestInfo { export const env = isBrowser() ? (window as any).__env__ : process.env; -export function isRecording() { +export function isRecordMode() { return env.TEST_MODE === "record"; } -export function isPlayingBack() { +export function isPlaybackMode() { return env.TEST_MODE === "playback"; } @@ -86,5 +86,5 @@ export function isBrowser(): boolean { * @returns {Promise} Resolved promise */ export function delay(milliseconds: number): Promise | null { - return isPlayingBack() ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); + return isPlaybackMode() ? null : new Promise((resolve) => setTimeout(resolve, milliseconds)); } From f121be789ee1e14203bdbbb33a0675fee2e53707 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 21:26:53 -0700 Subject: [PATCH 71/83] runtime: "node" | "browsers" - union type --- sdk/test-utils/recorder/src/baseRecorder.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 01cdac334fe7..bffa9ffece2d 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -64,7 +64,12 @@ export abstract class BaseRecorder { protected readonly filepath: string; public uniqueTestInfo: TestInfo = { uniqueName: {}, newDate: {} }; - constructor(runtime: string, testHierarchy: string, testTitle: string, ext: string) { + constructor(runtime: "node" | "browsers", testHierarchy: string, testTitle: string) { + // File Extension + // nock recordings for node tests - .js extension + // recordings are saved in json format for browser tests - .json extension + const ext = runtime === "node" ? "js" : "json"; + // Filepath - `recordings/{node|browsers}//recording_.{js|json}` this.filepath = runtime + "/" + @@ -131,7 +136,7 @@ export abstract class BaseRecorder { export class NockRecorder extends BaseRecorder { constructor(testHierarchy: string, testTitle: string) { - super("node", testHierarchy, testTitle, "js"); + super("node", testHierarchy, testTitle); } public record(): void { @@ -218,7 +223,7 @@ export class NiseRecorder extends BaseRecorder { private recordings: any[] = []; constructor(testHierarchy: string, testTitle: string) { - super("browsers", testHierarchy, testTitle, "json"); + super("browsers", testHierarchy, testTitle); } // Inserts a request/response pair into the recordings array From bd9793341db85482d39053329426af40b48a1b05 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 21:30:19 -0700 Subject: [PATCH 72/83] testHierarchy -> testSuiteTitle --- sdk/test-utils/recorder/src/baseRecorder.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index bffa9ffece2d..bdb2b9407db3 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -64,7 +64,7 @@ export abstract class BaseRecorder { protected readonly filepath: string; public uniqueTestInfo: TestInfo = { uniqueName: {}, newDate: {} }; - constructor(runtime: "node" | "browsers", testHierarchy: string, testTitle: string) { + constructor(runtime: "node" | "browsers", testSuiteTitle: string, testTitle: string) { // File Extension // nock recordings for node tests - .js extension // recordings are saved in json format for browser tests - .json extension @@ -73,7 +73,7 @@ export abstract class BaseRecorder { this.filepath = runtime + "/" + - this.formatPath(testHierarchy) + + this.formatPath(testSuiteTitle) + "/recording_" + this.formatPath(testTitle) + "." + @@ -135,8 +135,8 @@ export abstract class BaseRecorder { } export class NockRecorder extends BaseRecorder { - constructor(testHierarchy: string, testTitle: string) { - super("node", testHierarchy, testTitle); + constructor(testSuiteTitle: string, testTitle: string) { + super("node", testSuiteTitle, testTitle); } public record(): void { @@ -222,8 +222,8 @@ export class NiseRecorder extends BaseRecorder { private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; private recordings: any[] = []; - constructor(testHierarchy: string, testTitle: string) { - super("browsers", testHierarchy, testTitle); + constructor(testSuiteTitle: string, testTitle: string) { + super("browsers", testSuiteTitle, testTitle); } // Inserts a request/response pair into the recordings array From 5c789aebdad3bd33f66dfd783243d86dcb490351 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 21:31:33 -0700 Subject: [PATCH 73/83] runtime -> platform --- sdk/test-utils/recorder/src/baseRecorder.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index bdb2b9407db3..bd051392c79f 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -64,14 +64,14 @@ export abstract class BaseRecorder { protected readonly filepath: string; public uniqueTestInfo: TestInfo = { uniqueName: {}, newDate: {} }; - constructor(runtime: "node" | "browsers", testSuiteTitle: string, testTitle: string) { + constructor(platform: "node" | "browsers", testSuiteTitle: string, testTitle: string) { // File Extension // nock recordings for node tests - .js extension // recordings are saved in json format for browser tests - .json extension - const ext = runtime === "node" ? "js" : "json"; + const ext = platform === "node" ? "js" : "json"; // Filepath - `recordings/{node|browsers}//recording_.{js|json}` this.filepath = - runtime + + platform + "/" + this.formatPath(testSuiteTitle) + "/recording_" + From 12f0152346050349627660168ed27895382e65a1 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 21:37:58 -0700 Subject: [PATCH 74/83] importNock constant to importNockStatement --- sdk/test-utils/recorder/src/baseRecorder.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index bd051392c79f..73a1ffe7a010 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -163,7 +163,14 @@ export class NockRecorder extends BaseRecorder { } public stop(): void { - const importNock = "let nock = require('nock');\n"; + // Importing "nock" library in the recording and appending the testInfo part in the recording + const importNockStatement = + "let nock = require('nock');\n" + + "\n" + + "module.exports.testInfo = " + + JSON.stringify(this.uniqueTestInfo) + + "\n"; + const fixtures = nock.recorder.play(); // Create the directories recursively incase they don't exist @@ -187,10 +194,9 @@ export class NockRecorder extends BaseRecorder { throw err; }); - file.write( - importNock + "\n" + "module.exports.testInfo = " + JSON.stringify(this.uniqueTestInfo) + "\n" - ); + file.write(importNockStatement); + // Saving the recording to the file for (const fixture of fixtures) { // We're not matching query string parameters because they may contain sensitive information, and Nock does not allow us to customize it easily const updatedFixture = fixture.toString().replace(/\.query\(.*\)/, ".query(true)"); From 809acc7c0bae37bf89e04c4c848a5197422ac2db Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 22:06:24 -0700 Subject: [PATCH 75/83] update the escapeRegExp function --- sdk/test-utils/recorder/src/utils.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/src/utils.ts b/sdk/test-utils/recorder/src/utils.ts index b3fdfa2f20e8..b00d3af7e905 100644 --- a/sdk/test-utils/recorder/src/utils.ts +++ b/sdk/test-utils/recorder/src/utils.ts @@ -17,7 +17,16 @@ export function isPlaybackMode() { } export function escapeRegExp(str: string): string { - return encodeURIComponent(str).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + return encodeURIComponent(str) + .replace( + /[!'()*]/g, + (x) => + `%${x + .charCodeAt(0) + .toString(16) + .toUpperCase()}` + ) // RFC 3986. + .replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); // All the RegExp sensitive characters. } /** From 55c2c538dfef85f68cc0f5d4e1ba9b5cf30065c3 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Mon, 12 Aug 2019 22:35:37 -0700 Subject: [PATCH 76/83] Elaborating beforeeach, aftereach details and minor improvements - Guidelines --- sdk/test-utils/recorder/GUIDELINES.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index ccb63c468eca..1eae3e403371 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -19,6 +19,13 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. - `recorder` package assumes that the tests in the sdk are leveraging [mocha](https://mochajs.org/) and [rollup](https://rollupjs.org/guide/en/) (and [karma](https://karma-runner.github.io/latest/index.html) test runner for browser tests) as suggested by the [template](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/template/template) package in the repo. +- `record` from `@azure/test-utils-recorder` package should be imported in the test files. + +- `recorder = record(this);` initiates recording the HTTP requests and when `recorder.stop();` is called, the recording stops + and all the HTTP requests recorded in between the two calls are saved as part of the recording in the `"record"` mode. + In the same way, existing recordings are leveraged and played back in the `"playback"` mode when `recorder = record(this);` is invoked. + [Has no effect if the `TEST_MODE` is neither `"record"` nor `"playback"`. Tests hit the live-service, we don't record the requests/responses] + - Follow the below template for adding a new test. `before` and `after` sections are optional, `beforeEach` and `afterEach` sections are compulsory. ```typescript @@ -55,12 +62,16 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. }); ``` -- When `recorder.stop();` is called, the recording stops and is saved as explained below. +- Consider the `beforeEach`, `afterEach` and `it` blocks in the above test-suite. -- Recordings corresponding to `before` or `after` sections are saved under `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. + - `recorder = record(this);` is invoked in the `beforeEach` section and `recorder.stop();` in the `afterEach` section. + - All the HTTP requests recorded in between the two calls are saved as part of the test(`it` block) recording in the `"record"` mode. + - Existing test recording is played back when invoked `recorder = record(this);` in the `"playback"` mode. - Recordings corresponding to `beforeEach` or `afterEach` sections are saved along with the test recordings(`recordings/{node|browsers}//recording_.{js|json}`). +- Recordings corresponding to `before` or `after` sections are saved separately under `recordings/{node|browsers}//recording_before_all_hook.{js|json}`. + - `Mocha.Context` is being leveraged to obtain the test title and other required information to save and replay the recordings. - Any function call that affects http requests and is not in the `it`-block and belongs to a `describe`-block must go in one of the `beforeEach`, `afterEach`, `before` or `after` sections. @@ -222,18 +233,18 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. - **UUID:** a UUID is randomly generated within the SDK and used in an HTTP request, resulting in Nock being unable to recognize it - We leverage mocha's `.skip()` functionality to skip the test - `this.skip()` - https://mochajs.org/#inclusive-tests + `this.skip()` - https://mochajs.org/#inclusive-tests. By this, the tests in the skip list will only be executed if the `TEST_MODE` is neither `"record"` nor `"playback"`. - If the new test is supposed to skipped, it must be added in the skip list. Doing this would allow the tests in the skip list to be executed only if the `TEST_MODE` is neither `"record"` nor `"playback"`. --- -## Setting up karma.conf.js file in the sdk +## Setting up karma.conf.js file in the SDK ### Karma.conf.js -- Install and add the plugins `"karma-json-to-file-reporter", "karma-json-preprocessor"` +- Install and add the plugins `"karma-json-to-file-reporter", "karma-json-preprocessor"` as `devDependencies`. ```javascript plugins: ["karma-json-to-file-reporter", "karma-json-preprocessor"], From 19745384bc10f010b50eed008a237a3406e184e2 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Wed, 21 Aug 2019 15:05:14 -0700 Subject: [PATCH 77/83] regenerate pnpm-lock file --- common/config/rush/pnpm-lock.yaml | 1324 +++++++++++------------------ 1 file changed, 519 insertions(+), 805 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index fc1fbfaeb9a5..6b340b6d2050 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -8,7 +8,7 @@ dependencies: '@azure/logger-js': 1.3.2 '@azure/ms-rest-js': 2.0.4 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@rush-temp/abort-controller': 'file:projects/abort-controller.tgz' '@rush-temp/core-amqp': 'file:projects/core-amqp.tgz' '@rush-temp/core-arm': 'file:projects/core-arm.tgz' @@ -32,12 +32,12 @@ dependencies: '@rush-temp/testhub': 'file:projects/testhub.tgz' '@trust/keyto': 0.3.7 '@types/async-lock': 1.1.1 - '@types/chai': 4.1.7 - '@types/chai-as-promised': 7.1.1 - '@types/chai-string': 1.4.1 + '@types/chai': 4.2.0 + '@types/chai-as-promised': 7.1.2 + '@types/chai-string': 1.4.2 '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 - '@types/express': 4.17.0 + '@types/express': 4.17.1 '@types/fetch-mock': 7.3.1 '@types/fs-extra': 8.0.0 '@types/glob': 7.1.1 @@ -49,7 +49,7 @@ dependencies: '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/node-fetch': 2.5.0 '@types/qs': 6.5.3 '@types/query-string': 6.2.0 @@ -58,7 +58,7 @@ dependencies: '@types/tough-cookie': 2.3.5 '@types/tunnel': 0.0.1 '@types/uuid': 3.4.5 - '@types/webpack': 4.32.1 + '@types/webpack': 4.39.0 '@types/webpack-dev-middleware': 2.0.3 '@types/ws': 6.0.2 '@types/xml2js': 0.4.4 @@ -69,7 +69,7 @@ dependencies: async-lock: 1.2.2 azure-storage: 2.10.3 babel-runtime: 6.26.0 - buffer: 5.2.1 + buffer: 5.4.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 chai-string: 1.5.0_chai@4.2.0 @@ -77,10 +77,10 @@ dependencies: death: 1.1.0 debug: 3.2.6 delay: 4.3.0 - dotenv: 8.0.0 + dotenv: 8.1.0 es6-promise: 4.2.8 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -99,11 +99,11 @@ dependencies: jws: 3.2.2 karma: 4.2.0 karma-chai: 0.1.0_chai@4.2.0+karma@4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -111,10 +111,10 @@ dependencies: karma-mocha: 1.3.0 karma-mocha-reporter: 2.2.5_karma@4.2.0 karma-remap-coverage: 0.1.5_karma-coverage@1.1.2 - karma-rollup-preprocessor: 7.0.2_rollup@1.19.3 + karma-rollup-preprocessor: 7.0.2_rollup@1.20.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 - karma-webpack: 4.0.2_webpack@4.39.1 + karma-webpack: 4.0.2_webpack@4.39.2 long: 4.0.0 mocha: 5.2.0 mocha-chrome: 2.0.0 @@ -137,22 +137,22 @@ dependencies: regenerator-runtime: 0.13.3 rhea: 1.0.8 rhea-promise: 0.1.15 - rimraf: 2.6.3 - rollup: 1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 rollup-plugin-alias: 1.5.2 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-uglify: 6.0.2_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 - semver: 5.7.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-uglify: 6.0.2_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 + semver: 5.7.1 shx: 0.3.2 sinon: 7.4.1 source-map-support: 0.5.13 @@ -168,30 +168,24 @@ dependencies: uglify-js: 3.6.0 url: 0.11.0 util: 0.12.1 - uuid: 3.3.2 - webpack: 4.39.1_webpack@4.39.1 - webpack-cli: 3.3.6_webpack@4.39.1 - webpack-dev-middleware: 3.7.0_webpack@4.39.1 - ws: 7.1.1 + uuid: 3.3.3 + webpack: 4.39.2_webpack@4.39.2 + webpack-cli: 3.3.7_webpack@4.39.2 + webpack-dev-middleware: 3.7.0_webpack@4.39.2 + ws: 7.1.2 xhr-mock: 2.5.0 xml2js: 0.4.19 yargs: 13.3.0 yarn: 1.17.3 lockfileVersion: 5.1 packages: - /@azure/abort-controller/1.0.0-preview.1: - dependencies: - tslib: 1.10.0 - dev: false - resolution: - integrity: sha512-NnJqi6oHqt06Q2hz4nO1HO0QlyusBa3E/wezvn9flHEtl0IHYSmzGbtlb+MaAJ5GzxwqSevQ4q1+4B8fvVijOA== /@azure/amqp-common/1.0.0-preview.6_rhea-promise@0.1.15: dependencies: '@azure/ms-rest-nodeauth': 0.9.3 '@types/async-lock': 1.1.1 '@types/is-buffer': 2.0.0 async-lock: 1.2.2 - buffer: 5.2.1 + buffer: 5.4.0 debug: 3.2.6 events: 3.0.0 is-buffer: 2.0.3 @@ -219,13 +213,6 @@ packages: dev: false resolution: integrity: sha512-hMp0y+j/odkAyTa5TYewn4hUlFdEe3sR9uTd2Oq+se61RtuDsqM7UWrNNlyylPyjIENSZHJVWN7jte/jvvMN2Q== - /@azure/core-auth/1.0.0-preview.2: - dependencies: - '@azure/abort-controller': 1.0.0-preview.1 - tslib: 1.10.0 - dev: false - resolution: - integrity: sha512-QATxlKPP2Yld8+eg8Hz8mXmowlG/z9B53HTkjBz0oJIzR+dBm9HJY2bPnT7RB8nyqdnm8JpU2mIp8YVZZO6ubg== /@azure/core-paging/1.0.0-preview.1: dependencies: '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 @@ -248,7 +235,7 @@ packages: jssha: 2.3.1 rhea-promise: 0.1.15 tslib: 1.10.0 - uuid: 3.3.2 + uuid: 3.3.3 dev: false resolution: integrity: sha512-nGnFBPcB/rs+5YWwmHJg+d3Cs7BrjtVfuD1eEv8j+ui2X6uXxB88wom1A2t/7xsSzkunQSrXJ2mCwdHxKI5aHw== @@ -277,7 +264,7 @@ packages: tough-cookie: 2.5.0 tslib: 1.10.0 tunnel: 0.0.6 - uuid: 3.3.2 + uuid: 3.3.3 xml2js: 0.4.19 dev: false resolution: @@ -292,7 +279,7 @@ packages: tough-cookie: 3.0.1 tslib: 1.10.0 tunnel: 0.0.6 - uuid: 3.3.2 + uuid: 3.3.3 xml2js: 0.4.19 dev: false resolution: @@ -386,20 +373,20 @@ packages: dev: false resolution: integrity: sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== - /@microsoft/api-extractor-model/7.3.0: + /@microsoft/api-extractor-model/7.3.2: dependencies: - '@microsoft/node-core-library': 3.13.0 - '@microsoft/tsdoc': 0.12.10 + '@microsoft/node-core-library': 3.14.0 + '@microsoft/tsdoc': 0.12.12 '@types/node': 8.5.8 dev: false resolution: - integrity: sha512-GfRaGz6d8fPhMOG70l2zS1s6Z8rCxcTHnwfVjb+6ln25eB4fN/jeDRlLKot+HOsVcbxvVseoeB0ZQL9nIsfbXw== - /@microsoft/api-extractor/7.3.5: + integrity: sha512-2yNbQsQl5PI36l5WzHQshwjBHPe5IeIcmidWad0E+wjyaAxGMLx5pBp5AgXY2JG9S9VQjFmmGmqJJBXn8tzu+w== + /@microsoft/api-extractor/7.3.8: dependencies: - '@microsoft/api-extractor-model': 7.3.0 - '@microsoft/node-core-library': 3.13.0 - '@microsoft/ts-command-line': 4.2.6 - '@microsoft/tsdoc': 0.12.10 + '@microsoft/api-extractor-model': 7.3.2 + '@microsoft/node-core-library': 3.14.0 + '@microsoft/ts-command-line': 4.2.7 + '@microsoft/tsdoc': 0.12.12 colors: 1.2.5 lodash: 4.17.15 resolve: 1.8.1 @@ -408,8 +395,8 @@ packages: dev: false hasBin: true resolution: - integrity: sha512-g6Cu3mPZnbVB/YindJGLDDFnervDD7VruuC8Ve+48UctXHXcfJC4yJhhuSV79SwE58wNx9wXdLDihdFtnDWcnQ== - /@microsoft/node-core-library/3.13.0: + integrity: sha512-zw3HWmPW9vWWIoI3SPb2tuJ2suXVoF9ty37Mww+00I4gKLPPDooVad1kBiNtdjHXBj0QwYAOsGcfoBN9Qgt2bw== + /@microsoft/node-core-library/3.14.0: dependencies: '@types/fs-extra': 5.0.4 '@types/jju': 1.4.1 @@ -421,8 +408,8 @@ packages: z-schema: 3.18.4 dev: false resolution: - integrity: sha512-mnsL/1ikVWHl8sPNssavaAgtUaIM3hkQ8zeySuApU5dNmsMPzovJPfx9m5JGiMvs1v5QNAIVeiS9jnWwe/7anw== - /@microsoft/ts-command-line/4.2.6: + integrity: sha512-+gbTXTRfvR40hTH+C3Vno/RJ51sU/RZAyHb2bo9af8GCdOgxCxCs+qp2KCXklbpuolmIPFfbCmdTwv90yH5tJw== + /@microsoft/ts-command-line/4.2.7: dependencies: '@types/argparse': 1.0.33 '@types/node': 8.5.8 @@ -430,32 +417,32 @@ packages: colors: 1.2.5 dev: false resolution: - integrity: sha512-GFLPg9Z5yiNca3di/V6Zt3tAvj1de9EK0eL88tE+1eckQSH405UQcm7D+H8LbEhRpqpG+ZqN9LXCAEw4L5uchg== - /@microsoft/tsdoc/0.12.10: + integrity: sha512-PwUMIIDl8oWyl64Y5DW5FAuoRk4KWTBZdk4FEh366KEm5xYFBQhCeatHGURIj8nEYm0Xb2coCrXF77dGDlp/Qw== + /@microsoft/tsdoc/0.12.12: dev: false resolution: - integrity: sha512-tsog/HTdM88/WyR0Jz7XWTI0ghbJkt9soFXnQJrINDyaTGzbCoJjRttaW/IY5eAp4eqDyfg++jq6o+byEDOkIQ== - /@sinonjs/commons/1.4.0: + integrity: sha512-5EzH1gHIonvvgA/xWRmVAJmRkTQj/yayUXyr66hFwNZiFE4j7lP8is9YQeXhwxGZEjO1PVMblAmFF0CyjNtPGw== + /@sinonjs/commons/1.6.0: dependencies: type-detect: 4.0.8 dev: false resolution: - integrity: sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== + integrity: sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg== /@sinonjs/formatio/3.2.1: dependencies: - '@sinonjs/commons': 1.4.0 - '@sinonjs/samsam': 3.3.2 + '@sinonjs/commons': 1.6.0 + '@sinonjs/samsam': 3.3.3 dev: false resolution: integrity: sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== - /@sinonjs/samsam/3.3.2: + /@sinonjs/samsam/3.3.3: dependencies: - '@sinonjs/commons': 1.4.0 + '@sinonjs/commons': 1.6.0 array-from: 2.1.1 lodash: 4.17.15 dev: false resolution: - integrity: sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA== + integrity: sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== /@sinonjs/text-encoding/0.7.1: dev: false resolution: @@ -484,32 +471,32 @@ packages: dev: false resolution: integrity: sha512-6BmYWSBea18+tSjjSC3QIyV93ZKAeNWGM7R6aYt1ryTZXrlHF+QLV0G2yV0viEGVyRkyQsWfMoJ0k/YghBX5sQ== - /@types/body-parser/1.17.0: + /@types/body-parser/1.17.1: dependencies: '@types/connect': 3.4.32 - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: - integrity: sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w== - /@types/chai-as-promised/7.1.1: + integrity: sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w== + /@types/chai-as-promised/7.1.2: dependencies: - '@types/chai': 4.1.7 + '@types/chai': 4.2.0 dev: false resolution: - integrity: sha512-dberBxQW/XWv6BMj0su1lV9/C9AUx5Hqu2pisuS6S4YK/Qt6vurcj/BmcbEsobIWWCQzhesNY8k73kIxx4X7Mg== - /@types/chai-string/1.4.1: + integrity: sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q== + /@types/chai-string/1.4.2: dependencies: - '@types/chai': 4.1.7 + '@types/chai': 4.2.0 dev: false resolution: - integrity: sha512-aRNMs6TKgjgPlCHwDfq/YNy5VtRR2hJ4AUWByddrT0TRVVD8eX4MiHW6/iHvmQHRlVuuPZcwnTUE7b4yFt7bEA== - /@types/chai/4.1.7: + integrity: sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q== + /@types/chai/4.2.0: dev: false resolution: - integrity: sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== + integrity: sha512-zw8UvoBEImn392tLjxoavuonblX/4Yb9ha4KBU10FirCfwgzhKO0dvyJSF9ByxV1xK1r2AgnAi/tvQaLgxQqxA== /@types/connect/3.4.32: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== @@ -519,7 +506,7 @@ packages: integrity: sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A== /@types/dotenv/6.1.1: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-ftQl3DtBvqHl9L16tpqqzA4YzCSXZfi7g8cQceTz5rOlYtk/IZbFjAv3mLOQlNIgOaylCQWQoBdDQHPgEBJPHg== @@ -535,34 +522,34 @@ packages: dev: false resolution: integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - /@types/express-serve-static-core/4.16.7: + /@types/express-serve-static-core/4.16.9: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/range-parser': 1.2.3 dev: false resolution: - integrity: sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg== - /@types/express/4.17.0: + integrity: sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ== + /@types/express/4.17.1: dependencies: - '@types/body-parser': 1.17.0 - '@types/express-serve-static-core': 4.16.7 - '@types/serve-static': 1.13.2 + '@types/body-parser': 1.17.1 + '@types/express-serve-static-core': 4.16.9 + '@types/serve-static': 1.13.3 dev: false resolution: - integrity: sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== + integrity: sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w== /@types/fetch-mock/7.3.1: dev: false resolution: integrity: sha512-2U4vZWHNbsbK7TRmizgr/pbKe0FKopcxu+hNDtIBDiM1wvrKRItybaYj7VQ6w/hZJStU/JxRiNi5ww4YDEvKbA== /@types/fs-extra/5.0.4: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g== /@types/fs-extra/8.0.0: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q== @@ -570,13 +557,13 @@ packages: dependencies: '@types/events': 3.0.0 '@types/minimatch': 3.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== /@types/is-buffer/2.0.0: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-0f7N/e3BAz32qDYvgB4d2cqv1DqUwvGxHkXsrucICn8la1Vb6Yl6Eg8mPScGwUiqHJeE7diXlzaK+QMA9m4Gxw== @@ -606,7 +593,7 @@ packages: /@types/karma/3.0.3: dependencies: '@types/bluebird': 3.5.27 - '@types/node': 8.10.51 + '@types/node': 8.10.52 log4js: 3.0.6 dev: false resolution: @@ -617,7 +604,7 @@ packages: integrity: sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== /@types/memory-fs/0.3.2: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-j5AcZo7dbMxHoOimcHEIh0JZe5e1b8q8AqGSpZJrYc7xOgCIP79cIjTdx5jSDLtySnQDwkDTqwlC7Xw7uXw7qg== @@ -639,24 +626,20 @@ packages: integrity: sha512-DPxmjiDwubsNmguG5X4fEJ+XCyzWM3GXWsqQlvUcjJKa91IOoJUy51meDr0GkzK64qqNcq85ymLlyjoct9tInw== /@types/nock/10.0.3: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-OthuN+2FuzfZO3yONJ/QVjKmLEuRagS9TV9lEId+WHL9KhftYG+/2z+pxlr0UgVVXSpVD8woie/3fzQn8ft/Ow== /@types/node-fetch/2.5.0: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw== - /@types/node/12.6.9: + /@types/node/12.7.2: dev: false resolution: - integrity: sha512-+YB9FtyxXGyD54p8rXwWaN1EWEyar5L58GlGWgtH2I9rGmLGBQcw63+0jw+ujqVavNuO47S1ByAjm9zdHMnskw== - /@types/node/8.10.51: - dev: false - resolution: - integrity: sha512-cArrlJp3Yv6IyFT/DYe+rlO8o3SIHraALbBW/+CcCYW/a9QucpLI+n2p4sRxAvl2O35TiecpX2heSZtJjvEO+Q== + integrity: sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg== /@types/node/8.10.52: dev: false resolution: @@ -679,7 +662,7 @@ packages: integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== /@types/resolve/0.0.8: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== @@ -687,17 +670,21 @@ packages: dev: false resolution: integrity: sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== - /@types/serve-static/1.13.2: + /@types/serve-static/1.13.3: dependencies: - '@types/express-serve-static-core': 4.16.7 + '@types/express-serve-static-core': 4.16.9 '@types/mime': 2.0.1 dev: false resolution: - integrity: sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q== + integrity: sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== /@types/sinon/7.0.13: dev: false resolution: integrity: sha512-d7c/C/+H/knZ3L8/cxhicHUiTDxdgap0b/aNJfsmLwFu/iOP17mdgbQsbHA3SJmrzsjD0l3UEE5SN4xxuz5ung== + /@types/source-list-map/0.1.2: + dev: false + resolution: + integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== /@types/tapable/1.0.4: dev: false resolution: @@ -708,13 +695,13 @@ packages: integrity: sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== /@types/tunnel/0.0.0: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg== /@types/tunnel/0.0.1: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A== @@ -726,7 +713,7 @@ packages: integrity: sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ== /@types/uuid/3.4.5: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-MNL15wC3EKyw1VLF+RoVO4hJJdk9t/Hlv3rt1OL65Qvuadm4BYo6g9ZJQqoq7X8NBFSsQXgAujWciovh2lpVjA== @@ -734,30 +721,39 @@ packages: dependencies: '@types/connect': 3.4.32 '@types/memory-fs': 0.3.2 - '@types/webpack': 4.32.1 + '@types/webpack': 4.39.0 loglevel: 1.6.3 dev: false resolution: integrity: sha512-DzNJJ6ah/6t1n8sfAgQyEbZ/OMmFcF9j9P3aesnm7G6/iBFR/qiGin8K89J0RmaWIBzhTMdDg3I5PmKmSv7N9w== - /@types/webpack/4.32.1: + /@types/webpack-sources/0.1.5: + dependencies: + '@types/node': 8.10.52 + '@types/source-list-map': 0.1.2 + source-map: 0.6.1 + dev: false + resolution: + integrity: sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w== + /@types/webpack/4.39.0: dependencies: '@types/anymatch': 1.3.1 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/tapable': 1.0.4 '@types/uglify-js': 3.0.4 + '@types/webpack-sources': 0.1.5 source-map: 0.6.1 dev: false resolution: - integrity: sha512-9n38CBx9uga1FEAdTipnt0EkbKpsCJFh7xJb1LE65FFb/A6OOLFX022vYsGC1IyVCZ/GroNg9u/RMmlDxGcLIw== + integrity: sha512-8gUiAl6RBI4IoCJVQ9AChp4k2Tcd4ocNei2S83goHKCj8WesBtlqp9/wPd29dArHIGMdHxICwBi8YMm8PD6PEg== /@types/ws/6.0.2: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-22XiR1ox9LftTaAtn/c5JCninwc7moaqbkJfaDUb7PkaUitcf5vbTZHdq9dxSMviCm9C3W85rzB8e6yNR70apQ== /@types/xml2js/0.4.4: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 dev: false resolution: integrity: sha512-O6Xgai01b9PB3IGA0lRIp1Ex3JBcxGDhdO0n3NIIpCyDOAjxcIGQFmkvgJpP8anTrthxOUQjBfLdRRi0Zn/TXA== @@ -981,10 +977,6 @@ packages: node: '>=6.5' resolution: integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - /abortcontroller-polyfill/1.3.0: - dev: false - resolution: - integrity: sha512-lbWQgf+eRvku3va8poBlDBO12FigTQr9Zb7NIjXrePrhxWVKdCP2wbDl1tLDaYa18PWTom3UEWwdH13S46I+yA== /accepts/1.3.7: dependencies: mime-types: 2.1.24 @@ -994,14 +986,6 @@ packages: node: '>= 0.6' resolution: integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - /acorn-jsx/5.0.1_acorn@6.2.1: - dependencies: - acorn: 6.2.1 - dev: false - peerDependencies: - acorn: ^6.0.0 - resolution: - integrity: sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== /acorn-jsx/5.0.2_acorn@7.0.0: dependencies: acorn: 7.0.0 @@ -1023,13 +1007,13 @@ packages: hasBin: true resolution: integrity: sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - /acorn/6.2.1: + /acorn/6.3.0: dev: false engines: node: '>=0.4.0' hasBin: true resolution: - integrity: sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== + integrity: sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== /acorn/7.0.0: dev: false engines: @@ -1039,13 +1023,13 @@ packages: integrity: sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== /adal-node/0.1.28: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 async: 3.1.0 date-utils: 1.2.21 jws: 3.2.2 request: 2.88.0 underscore: 1.9.1 - uuid: 3.3.2 + uuid: 3.3.3 xmldom: 0.1.27 xpath.js: 1.1.0 dev: false @@ -1118,12 +1102,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= - /ansi-escapes/3.2.0: - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== /ansi-escapes/4.2.1: dependencies: type-fest: 0.5.2 @@ -1289,10 +1267,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - /array-filter/0.0.1: - dev: false - resolution: - integrity: sha1-fajPLiZijtcygDWB/SH2fKzS7uw= /array-find-index/1.0.2: dev: false engines: @@ -1324,14 +1298,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - /array-map/0.0.0: - dev: false - resolution: - integrity: sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - /array-reduce/0.0.0: - dev: false - resolution: - integrity: sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= /array-slice/0.2.3: dev: false engines: @@ -1495,15 +1461,6 @@ packages: dev: false resolution: integrity: sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - /axios-mock-adapter/1.17.0_axios@0.19.0: - dependencies: - axios: 0.19.0 - deep-equal: 1.0.1 - dev: false - peerDependencies: - axios: '>= 0.9.0' - resolution: - integrity: sha512-q3efmwJUOO4g+wsLNSk9Ps1UlJoF3fQ3FSEe4uEEhkRtu7SoiAVPj8R3Hc/WP55MBTVFzaDP9QkdJhdVhP8A1Q== /axios/0.19.0: dependencies: follow-redirects: 1.5.10 @@ -1520,7 +1477,7 @@ packages: readable-stream: 2.0.6 request: 2.88.0 underscore: 1.8.3 - uuid: 3.3.2 + uuid: 3.3.3 validator: 9.4.1 xml2js: 0.2.8 xmlbuilder: 9.0.7 @@ -1935,7 +1892,7 @@ packages: babel-plugin-transform-regenerator: 6.26.0 browserslist: 3.2.8 invariant: 2.2.4 - semver: 5.7.0 + semver: 5.7.1 dev: false resolution: integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== @@ -2213,7 +2170,7 @@ packages: /browserslist/3.2.8: dependencies: caniuse-lite: 1.0.30000989 - electron-to-chromium: 1.3.216 + electron-to-chromium: 1.3.237 dev: false hasBin: true resolution: @@ -2267,13 +2224,13 @@ packages: dev: false resolution: integrity: sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - /buffer/5.2.1: + /buffer/5.4.0: dependencies: base64-js: 1.3.1 ieee754: 1.1.13 dev: false resolution: - integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + integrity: sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g== /builtin-modules/3.1.0: dev: false engines: @@ -2290,26 +2247,26 @@ packages: node: '>= 0.8' resolution: integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - /cacache/12.0.2: + /cacache/12.0.3: dependencies: bluebird: 3.5.5 chownr: 1.1.2 figgy-pudding: 3.5.1 glob: 7.1.4 - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 infer-owner: 1.0.4 lru-cache: 5.1.1 mississippi: 3.0.0 mkdirp: 0.5.1 move-concurrently: 1.0.1 promise-inflight: 1.0.1 - rimraf: 2.6.3 + rimraf: 2.7.1 ssri: 6.0.1 unique-filename: 1.1.1 y18n: 4.0.0 dev: false resolution: - integrity: sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== + integrity: sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== /cache-base/1.0.1: dependencies: collection-visit: 1.0.0 @@ -2462,7 +2419,7 @@ packages: dev: false resolution: integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - /chokidar/2.1.6: + /chokidar/2.1.8: dependencies: anymatch: 2.0.0 async-each: 1.0.3 @@ -2479,7 +2436,7 @@ packages: optionalDependencies: fsevents: 1.2.9 resolution: - integrity: sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== /chokidar/3.0.2: dependencies: anymatch: 3.0.3 @@ -2488,7 +2445,7 @@ packages: is-binary-path: 2.1.0 is-glob: 4.0.1 normalize-path: 3.0.0 - readdirp: 3.1.1 + readdirp: 3.1.2 dev: false engines: node: '>= 8' @@ -2502,11 +2459,11 @@ packages: integrity: sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== /chrome-launcher/0.10.7: dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 is-wsl: 1.1.0 lighthouse-logger: 1.2.0 mkdirp: 0.5.1 - rimraf: 2.6.3 + rimraf: 2.7.1 dev: false resolution: integrity: sha512-IoQLp64s2n8OQuvKZwt77CscVj3UlV2Dj7yZtd1EBMld9mSdGcsGy9fN5hd/r4vJuWZR09it78n1+A17gB+AIQ== @@ -2556,14 +2513,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - /cli-cursor/2.1.0: - dependencies: - restore-cursor: 2.0.0 - dev: false - engines: - node: '>=4' - resolution: - integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= /cli-cursor/3.1.0: dependencies: restore-cursor: 3.1.0 @@ -2796,7 +2745,7 @@ packages: fs-write-stream-atomic: 1.0.10 iferr: 0.1.5 mkdirp: 0.5.1 - rimraf: 2.6.3 + rimraf: 2.7.1 run-queue: 1.0.3 dev: false resolution: @@ -2819,18 +2768,18 @@ packages: requiresBuild: true resolution: integrity: sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - /core-js/3.1.4: + /core-js/3.2.1: dev: false requiresBuild: true resolution: - integrity: sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ== + integrity: sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== /core-util-is/1.0.2: dev: false resolution: integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= /cp-file/6.2.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 make-dir: 2.1.0 nested-error-stacks: 2.1.0 pify: 4.0.1 @@ -2889,7 +2838,7 @@ packages: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.0 + semver: 5.7.1 shebang-command: 1.2.0 which: 1.3.1 dev: false @@ -3213,12 +3162,12 @@ packages: npm: '>=1.2' resolution: integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - /dotenv/8.0.0: + /dotenv/8.1.0: dev: false engines: node: '>=8' resolution: - integrity: sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg== + integrity: sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA== /duplexify/3.7.1: dependencies: end-of-stream: 1.4.1 @@ -3256,10 +3205,10 @@ packages: dev: false resolution: integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - /electron-to-chromium/1.3.216: + /electron-to-chromium/1.3.237: dev: false resolution: - integrity: sha512-G2rJKCdDLTaAP56WKMj0mcr7jtr3LBBL2EaF73DamfFpvcl0PzKUIaUocPP8NLu9s/RbbHLMGkbFOkDRK5PQIQ== + integrity: sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg== /elliptic/6.5.0: dependencies: bn.js: 4.11.8 @@ -3337,7 +3286,7 @@ packages: integrity: sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== /enhanced-resolve/4.1.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 memory-fs: 0.4.1 tapable: 1.1.3 dev: false @@ -3465,7 +3414,7 @@ packages: source-map: 0.2.0 resolution: integrity: sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - /eslint-config-prettier/6.0.0_eslint@6.2.1: + /eslint-config-prettier/6.1.0_eslint@6.2.1: dependencies: eslint: 6.2.1 get-stdin: 6.0.0 @@ -3474,16 +3423,7 @@ packages: peerDependencies: eslint: '>=3.14.1' resolution: - integrity: sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== - /eslint-detailed-reporter/0.8.0_eslint@5.16.0: - dependencies: - eslint: 5.16.0 - lodash: 4.17.15 - dev: false - peerDependencies: - eslint: 3.0.0 - 5.9999.9999 - resolution: - integrity: sha512-u/LAPwSQ8udUiWXJ2aYZfvV4gd7uhS77ZctOv8FZ8SDxzEG5aV18dgOTMilT8uEHBJyv3MpGHoQH7A3tXOfm/Q== + integrity: sha512-k9fny9sPjIBQ2ftFTesJV21Rg4R/7a7t7LCtZVrYQiHEp8Nnuk3EGaDmsKSAnsPj0BYcgB2zxzHa2NTkIxcOLg== /eslint-plugin-no-null/1.0.2_eslint@6.2.1: dependencies: eslint: 6.2.1 @@ -3509,7 +3449,7 @@ packages: /eslint-scope/4.0.3: dependencies: esrecurse: 4.2.1 - estraverse: 4.2.0 + estraverse: 4.3.0 dev: false engines: node: '>=4.0.0' @@ -3524,14 +3464,6 @@ packages: node: '>=8.0.0' resolution: integrity: sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - /eslint-utils/1.4.0: - dependencies: - eslint-visitor-keys: 1.0.0 - dev: false - engines: - node: '>=6' - resolution: - integrity: sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== /eslint-utils/1.4.2: dependencies: eslint-visitor-keys: 1.1.0 @@ -3540,62 +3472,12 @@ packages: node: '>=6' resolution: integrity: sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== - /eslint-visitor-keys/1.0.0: - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== /eslint-visitor-keys/1.1.0: dev: false engines: node: '>=4' resolution: integrity: sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - /eslint/5.16.0: - dependencies: - '@babel/code-frame': 7.5.5 - ajv: 6.10.2 - chalk: 2.4.2 - cross-spawn: 6.0.5 - debug: 4.1.1 - doctrine: 3.0.0 - eslint-scope: 4.0.3 - eslint-utils: 1.4.0 - eslint-visitor-keys: 1.0.0 - espree: 5.0.1 - esquery: 1.0.1 - esutils: 2.0.3 - file-entry-cache: 5.0.1 - functional-red-black-tree: 1.0.1 - glob: 7.1.4 - globals: 11.12.0 - ignore: 4.0.6 - import-fresh: 3.1.0 - imurmurhash: 0.1.4 - inquirer: 6.5.0 - js-yaml: 3.13.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.3.0 - lodash: 4.17.15 - minimatch: 3.0.4 - mkdirp: 0.5.1 - natural-compare: 1.4.0 - optionator: 0.8.2 - path-is-inside: 1.0.2 - progress: 2.0.3 - regexpp: 2.0.1 - semver: 5.7.0 - strip-ansi: 4.0.0 - strip-json-comments: 2.0.1 - table: 5.4.5 - text-table: 0.2.0 - dev: false - engines: - node: ^6.14.0 || ^8.10.0 || >=9.10.0 - hasBin: true - resolution: - integrity: sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== /eslint/6.2.1: dependencies: '@babel/code-frame': 7.5.5 @@ -3641,16 +3523,6 @@ packages: hasBin: true resolution: integrity: sha512-ES7BzEzr0Q6m5TK9i+/iTpKjclXitOdDK4vT07OqbkBT2/VcN/gO9EL1C4HlK3TAOXYv2ItcmbVR9jO1MR0fJg== - /espree/5.0.1: - dependencies: - acorn: 6.2.1 - acorn-jsx: 5.0.1_acorn@6.2.1 - eslint-visitor-keys: 1.0.0 - dev: false - engines: - node: '>=6.0.0' - resolution: - integrity: sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== /espree/6.1.0: dependencies: acorn: 7.0.0 @@ -3697,12 +3569,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - /estraverse/4.2.0: - dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= /estraverse/4.3.0: dev: false engines: @@ -3947,14 +3813,6 @@ packages: dev: false resolution: integrity: sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - /figures/2.0.0: - dependencies: - escape-string-regexp: 1.0.5 - dev: false - engines: - node: '>=4' - resolution: - integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= /figures/3.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -4190,7 +4048,7 @@ packages: integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= /fs-extra/7.0.1: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 jsonfile: 4.0.0 universalify: 0.1.2 dev: false @@ -4200,7 +4058,7 @@ packages: integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== /fs-extra/8.1.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 jsonfile: 4.0.0 universalify: 0.1.2 dev: false @@ -4210,7 +4068,7 @@ packages: integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== /fs-mkdirp-stream/1.0.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 through2: 2.0.5 dev: false engines: @@ -4219,7 +4077,7 @@ packages: integrity: sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= /fs-write-stream-atomic/1.0.10: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 iferr: 0.1.5 imurmurhash: 0.1.4 readable-stream: 2.3.6 @@ -4351,7 +4209,7 @@ packages: dependencies: anymatch: 2.0.0 async-done: 1.3.2 - chokidar: 2.1.6 + chokidar: 2.1.8 is-negated-glob: 1.0.0 just-debounce: 1.0.0 object.defaults: 1.1.0 @@ -4459,10 +4317,10 @@ packages: node: '>= 0.10' resolution: integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - /graceful-fs/4.2.1: + /graceful-fs/4.2.2: dev: false resolution: - integrity: sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== + integrity: sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== /growl/1.10.5: dev: false engines: @@ -4699,12 +4557,10 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - /hosted-git-info/2.8.2: - dependencies: - lru-cache: 5.1.1 + /hosted-git-info/2.8.4: dev: false resolution: - integrity: sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w== + integrity: sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== /http-errors/1.7.2: dependencies: depd: 1.1.2 @@ -4855,26 +4711,6 @@ packages: dev: false resolution: integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - /inquirer/6.5.0: - dependencies: - ansi-escapes: 3.2.0 - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-width: 2.2.0 - external-editor: 3.1.0 - figures: 2.0.0 - lodash: 4.17.15 - mute-stream: 0.0.7 - run-async: 2.3.0 - rxjs: 6.5.2 - string-width: 2.1.1 - strip-ansi: 5.2.0 - through: 2.3.8 - dev: false - engines: - node: '>=6.0.0' - resolution: - integrity: sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== /inquirer/6.5.1: dependencies: ansi-escapes: 4.2.1 @@ -5240,6 +5076,12 @@ packages: node: '>=4' resolution: integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + /is-wsl/2.1.0: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-pFTjpv/x5HRj8kbZ/Msxi9VrvtOMRBqaDi3OIcbwPI3OuH+r3lLxVWukLITBaOGJIbA/w2+M1eVmVa4XNQlAmQ== /isarray/0.0.1: dev: false resolution: @@ -5325,7 +5167,7 @@ packages: debug: 4.1.1 istanbul-lib-coverage: 2.0.5 make-dir: 2.1.0 - rimraf: 2.6.3 + rimraf: 2.7.1 source-map: 0.6.1 dev: false engines: @@ -5364,23 +5206,19 @@ packages: hasBin: true resolution: integrity: sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - /jest-worker/24.6.0: + /jest-worker/24.9.0: dependencies: - merge-stream: 1.0.1 + merge-stream: 2.0.0 supports-color: 6.1.0 dev: false engines: node: '>= 6' resolution: - integrity: sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== + integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== /jju/1.4.0: dev: false resolution: integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo= - /js-base64/2.5.1: - dev: false - resolution: - integrity: sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== /js-tokens/3.0.2: dev: false resolution: @@ -5468,13 +5306,9 @@ packages: /jsonfile/4.0.0: dev: false optionalDependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 resolution: integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - /jsonify/0.0.0: - dev: false - resolution: - integrity: sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= /jsonparse/1.2.0: dev: false engines: @@ -5529,12 +5363,12 @@ packages: karma: '>=0.10.9' resolution: integrity: sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o= - /karma-chrome-launcher/3.0.0: + /karma-chrome-launcher/3.1.0: dependencies: which: 1.3.1 dev: false resolution: - integrity: sha512-u/PnVgDOP97AUe/gJeABlC6Wa6aQ83MZsm0JgsJQ5bGQ9XcXON/7b2aRhl59A62Zom+q3PFveBkczc7E1RT7TA== + integrity: sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== /karma-coverage/1.1.2: dependencies: dateformat: 1.0.12 @@ -5560,10 +5394,12 @@ packages: dev: false resolution: integrity: sha1-u+jIfVnADtt2BwvTwxtLOdXcfhU= - /karma-firefox-launcher/1.1.0: + /karma-firefox-launcher/1.2.0: + dependencies: + is-wsl: 2.1.0 dev: false resolution: - integrity: sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA== + integrity: sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ== /karma-ie-launcher/1.0.0_karma@4.2.0: dependencies: karma: 4.2.0 @@ -5625,11 +5461,11 @@ packages: karma-coverage: '>=0.5.4' resolution: integrity: sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw== - /karma-rollup-preprocessor/7.0.2_rollup@1.19.3: + /karma-rollup-preprocessor/7.0.2_rollup@1.20.0: dependencies: chokidar: 3.0.2 debounce: 1.2.0 - rollup: 1.19.3 + rollup: 1.20.0 dev: false engines: node: '>= 8.0.0' @@ -5639,13 +5475,13 @@ packages: integrity: sha512-A+kr5FoiMr/S8dIPij/nuzB9PLhkrh3umFowjumAOKBDVQRhPYs3kKmQ82hP3+2MB6CICqeB4MmiIE4iTwUmDQ== /karma-sourcemap-loader/0.3.7: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 dev: false resolution: integrity: sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg= /karma-typescript-es6-transform/4.1.1: dependencies: - acorn: 6.2.1 + acorn: 6.3.0 acorn-walk: 6.2.0 babel-core: 6.26.3 babel-preset-env: 1.7.0 @@ -5654,15 +5490,15 @@ packages: dev: false resolution: integrity: sha512-WTGGThwufBT73c20q30iTcXq8Jb3Wat/h+JW1lwKgMtymT5rVxLknoaUVNfenaV3+cRMiTEsBT773kz9jWk6IQ== - /karma-webpack/4.0.2_webpack@4.39.1: + /karma-webpack/4.0.2_webpack@4.39.2: dependencies: clone-deep: 4.0.1 loader-utils: 1.2.3 neo-async: 2.6.1 schema-utils: 1.0.0 source-map: 0.7.3 - webpack: 4.39.1_webpack@4.39.1 - webpack-dev-middleware: 3.7.0_webpack@4.39.1 + webpack: 4.39.2_webpack@4.39.2 + webpack-dev-middleware: 3.7.0_webpack@4.39.2 dev: false engines: node: '>= 8.9.0' @@ -5678,12 +5514,12 @@ packages: chokidar: 3.0.2 colors: 1.3.3 connect: 3.7.0 - core-js: 3.1.4 + core-js: 3.2.1 di: 0.0.1 dom-serialize: 2.2.1 flatted: 2.0.1 glob: 7.1.4 - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 http-proxy: 1.17.0 isbinaryfile: 3.0.3 lodash: 4.17.15 @@ -5693,7 +5529,7 @@ packages: optimist: 0.6.1 qjobs: 1.2.0 range-parser: 1.2.1 - rimraf: 2.6.3 + rimraf: 2.7.1 safe-buffer: 5.2.0 socket.io: 2.1.1 source-map: 0.6.1 @@ -5798,7 +5634,7 @@ packages: is-plain-object: 2.0.4 object.map: 1.0.1 rechoir: 0.6.2 - resolve: 1.11.1 + resolve: 1.12.0 dev: false engines: node: '>= 0.8' @@ -5813,7 +5649,7 @@ packages: integrity: sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw== /load-json-file/1.1.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 parse-json: 2.2.0 pify: 2.3.0 pinkie-promise: 2.0.1 @@ -5825,7 +5661,7 @@ packages: integrity: sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= /load-json-file/4.0.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -5986,7 +5822,7 @@ packages: /make-dir/2.1.0: dependencies: pify: 4.0.1 - semver: 5.7.0 + semver: 5.7.1 dev: false engines: node: '>=6' @@ -6050,7 +5886,7 @@ packages: dependencies: findup-sync: 2.0.0 micromatch: 3.1.10 - resolve: 1.11.1 + resolve: 1.12.0 stack-trace: 0.0.10 dev: false engines: @@ -6165,12 +6001,10 @@ packages: dev: false resolution: integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - /merge-stream/1.0.1: - dependencies: - readable-stream: 2.3.6 + /merge-stream/2.0.0: dev: false resolution: - integrity: sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== /methods/1.1.2: dev: false engines: @@ -6242,12 +6076,6 @@ packages: hasBin: true resolution: integrity: sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== - /mimic-fn/1.2.0: - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== /mimic-fn/2.1.0: dev: false engines: @@ -6359,13 +6187,6 @@ packages: mocha: '>=2.2.5' resolution: integrity: sha512-qeDvKlZyAH2YJE1vhryvjUQ06t2hcnwwu4k5Ddwn0GQINhgEYFhlGM0DwYCVUHq5cuo32qAW6HDsTHt7zz99Ng== - /mocha-multi-reporters/1.1.7: - dependencies: - debug: 3.2.6 - lodash: 4.17.15 - dev: false - resolution: - integrity: sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI= /mocha-multi/1.1.0_mocha@5.2.0: dependencies: debug: 3.2.6 @@ -6410,7 +6231,7 @@ packages: copy-concurrently: 1.0.5 fs-write-stream-atomic: 1.0.10 mkdirp: 0.5.1 - rimraf: 2.6.3 + rimraf: 2.7.1 run-queue: 1.0.3 dev: false resolution: @@ -6427,15 +6248,6 @@ packages: dev: false resolution: integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - /msal/1.0.2: - dependencies: - js-base64: 2.5.1 - tslib: 1.10.0 - dev: false - engines: - node: '>=0.8.0' - resolution: - integrity: sha512-jWbuqLg0jFWj/Wy9A9LbJahuDguQI1KI4y06HOG7OFKHWdXJ8DJCgbwlCSoq2nUM0cbGfhsYX6MRDxJ7R3ZrAg== /msal/1.1.3: dependencies: tslib: 1.10.0 @@ -6450,10 +6262,6 @@ packages: node: '>= 0.10' resolution: integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== - /mute-stream/0.0.7: - dev: false - resolution: - integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= /mute-stream/0.0.8: dev: false resolution: @@ -6551,8 +6359,8 @@ packages: lodash: 4.17.15 mkdirp: 0.5.1 propagate: 1.0.0 - qs: 6.7.0 - semver: 5.7.0 + qs: 6.8.0 + semver: 5.7.1 dev: false engines: node: '>= 6.0' @@ -6583,8 +6391,8 @@ packages: readable-stream: 2.3.6 stream-browserify: 2.0.2 stream-http: 2.8.3 - string_decoder: 1.2.0 - timers-browserify: 2.0.10 + string_decoder: 1.3.0 + timers-browserify: 2.0.11 tty-browserify: 0.0.0 url: 0.11.0 util: 0.11.1 @@ -6601,9 +6409,9 @@ packages: integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k= /normalize-package-data/2.5.0: dependencies: - hosted-git-info: 2.8.2 - resolve: 1.11.1 - semver: 5.7.0 + hosted-git-info: 2.8.4 + resolve: 1.12.0 + semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: false resolution: @@ -6639,7 +6447,7 @@ packages: minimatch: 3.0.4 pidtree: 0.3.0 read-pkg: 3.0.0 - shell-quote: 1.6.1 + shell-quote: 1.7.1 string.prototype.padend: 3.0.0 dev: false engines: @@ -6681,11 +6489,11 @@ packages: make-dir: 2.1.0 merge-source-map: 1.1.0 resolve-from: 4.0.0 - rimraf: 2.6.3 + rimraf: 2.7.1 signal-exit: 3.0.2 spawn-wrap: 1.4.2 test-exclude: 5.2.3 - uuid: 3.3.2 + uuid: 3.3.3 yargs: 13.3.0 yargs-parser: 13.1.1 dev: false @@ -6805,14 +6613,6 @@ packages: dev: false resolution: integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - /onetime/2.0.1: - dependencies: - mimic-fn: 1.2.0 - dev: false - engines: - node: '>=4' - resolution: - integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= /onetime/5.1.0: dependencies: mimic-fn: 2.1.0 @@ -6915,14 +6715,14 @@ packages: node: '>=4' resolution: integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - /p-limit/2.2.0: + /p-limit/2.2.1: dependencies: p-try: 2.2.0 dev: false engines: node: '>=6' resolution: - integrity: sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + integrity: sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== /p-locate/2.0.0: dependencies: p-limit: 1.3.0 @@ -6933,7 +6733,7 @@ packages: integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= /p-locate/3.0.0: dependencies: - p-limit: 2.2.0 + p-limit: 2.2.1 dev: false engines: node: '>=6' @@ -6953,7 +6753,7 @@ packages: integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== /package-hash/3.0.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 hasha: 3.0.0 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 @@ -7088,10 +6888,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - /path-is-inside/1.0.2: - dev: false - resolution: - integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= /path-key/2.0.1: dev: false engines: @@ -7132,7 +6928,7 @@ packages: integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w== /path-type/1.1.0: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 pify: 2.3.0 pinkie-promise: 2.0.1 dev: false @@ -7407,7 +7203,7 @@ packages: mime: 2.4.4 progress: 2.0.3 proxy-from-env: 1.0.0 - rimraf: 2.6.3 + rimraf: 2.7.1 ws: 6.2.1 dev: false engines: @@ -7570,7 +7366,7 @@ packages: /readable-stream/3.4.0: dependencies: inherits: 2.0.4 - string_decoder: 1.2.0 + string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: false engines: @@ -7579,7 +7375,7 @@ packages: integrity: sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== /readdirp/2.2.1: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 micromatch: 3.1.10 readable-stream: 2.3.6 dev: false @@ -7587,17 +7383,17 @@ packages: node: '>=0.10' resolution: integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - /readdirp/3.1.1: + /readdirp/3.1.2: dependencies: picomatch: 2.0.7 dev: false engines: node: '>= 8' resolution: - integrity: sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== + integrity: sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw== /rechoir/0.6.2: dependencies: - resolve: 1.11.1 + resolve: 1.12.0 dev: false engines: node: '>= 0.10' @@ -7783,7 +7579,7 @@ packages: safe-buffer: 5.2.0 tough-cookie: 2.4.3 tunnel-agent: 0.6.0 - uuid: 3.3.2 + uuid: 3.3.3 dev: false engines: node: '>= 4' @@ -7852,27 +7648,18 @@ packages: dev: false resolution: integrity: sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - /resolve/1.11.1: + /resolve/1.12.0: dependencies: path-parse: 1.0.6 dev: false resolution: - integrity: sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + integrity: sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== /resolve/1.8.1: dependencies: path-parse: 1.0.6 dev: false resolution: integrity: sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== - /restore-cursor/2.0.0: - dependencies: - onetime: 2.0.1 - signal-exit: 3.0.2 - dev: false - engines: - node: '>=4' - resolution: - integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= /restore-cursor/3.1.0: dependencies: onetime: 5.1.0 @@ -7921,6 +7708,13 @@ packages: hasBin: true resolution: integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + /rimraf/2.7.1: + dependencies: + glob: 7.1.4 + dev: false + hasBin: true + resolution: + integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== /ripemd160/2.0.2: dependencies: hash-base: 3.0.4 @@ -7934,13 +7728,13 @@ packages: dev: false resolution: integrity: sha512-ODeZXhTxpD48sfcYLAFc1BGrsXKDj7o1CSNH3uYbdK3o0NxyMmaQPTNgW+ko+am92DLC8QSTe4kyxTuEkI5S5w== - /rollup-plugin-commonjs/10.0.2_rollup@1.19.3: + /rollup-plugin-commonjs/10.0.2_rollup@1.20.0: dependencies: estree-walker: 0.6.1 is-reference: 1.1.3 magic-string: 0.25.3 - resolve: 1.11.1 - rollup: 1.19.3 + resolve: 1.12.0 + rollup: 1.20.0 rollup-pluginutils: 2.8.1 dev: false peerDependencies: @@ -7978,13 +7772,13 @@ packages: dev: false resolution: integrity: sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== - /rollup-plugin-node-resolve/5.2.0_rollup@1.19.3: + /rollup-plugin-node-resolve/5.2.0_rollup@1.20.0: dependencies: '@types/resolve': 0.0.8 builtin-modules: 3.1.0 is-module: 1.0.0 - resolve: 1.11.1 - rollup: 1.19.3 + resolve: 1.12.0 + rollup: 1.20.0 rollup-pluginutils: 2.8.1 dev: false peerDependencies: @@ -7998,17 +7792,13 @@ packages: dev: false resolution: integrity: sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA== - /rollup-plugin-resolve/0.0.1-predev.1: - dev: false - resolution: - integrity: sha1-y38ZZCoXQZEBxnHhqMLNp696xB0= /rollup-plugin-shim/1.0.0: dev: false resolution: integrity: sha512-rZqFD43y4U9nSqVq3iyWBiDwmBQJY8Txi04yI9jTKD3xcl7CbFjh1qRpQshUB3sONLubDzm7vJiwB+1MEGv67w== - /rollup-plugin-sourcemaps/0.4.2_rollup@1.19.3: + /rollup-plugin-sourcemaps/0.4.2_rollup@1.20.0: dependencies: - rollup: 1.19.3 + rollup: 1.20.0 rollup-pluginutils: 2.8.1 source-map-resolve: 0.5.2 dev: false @@ -8019,37 +7809,37 @@ packages: rollup: '>=0.31.2' resolution: integrity: sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= - /rollup-plugin-terser/5.1.1_rollup@1.19.3: + /rollup-plugin-terser/5.1.1_rollup@1.20.0: dependencies: '@babel/code-frame': 7.5.5 - jest-worker: 24.6.0 - rollup: 1.19.3 + jest-worker: 24.9.0 + rollup: 1.20.0 rollup-pluginutils: 2.8.1 - serialize-javascript: 1.7.0 - terser: 4.1.3 + serialize-javascript: 1.8.0 + terser: 4.2.0 dev: false peerDependencies: rollup: '>=0.66.0 <2' resolution: integrity: sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ== - /rollup-plugin-uglify/6.0.2_rollup@1.19.3: + /rollup-plugin-uglify/6.0.2_rollup@1.20.0: dependencies: '@babel/code-frame': 7.5.5 - jest-worker: 24.6.0 - rollup: 1.19.3 - serialize-javascript: 1.7.0 + jest-worker: 24.9.0 + rollup: 1.20.0 + serialize-javascript: 1.8.0 uglify-js: 3.6.0 dev: false peerDependencies: rollup: '>=0.66.0 <2' resolution: integrity: sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== - /rollup-plugin-visualizer/2.5.4_rollup@1.19.3: + /rollup-plugin-visualizer/2.5.4_rollup@1.20.0: dependencies: mkdirp: 0.5.1 open: 6.4.0 pupa: 2.0.1 - rollup: 1.19.3 + rollup: 1.20.0 source-map: 0.7.3 dev: false engines: @@ -8064,15 +7854,15 @@ packages: dev: false resolution: integrity: sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== - /rollup/1.19.3: + /rollup/1.20.0: dependencies: '@types/estree': 0.0.39 - '@types/node': 12.6.9 - acorn: 6.2.1 + '@types/node': 12.7.2 + acorn: 7.0.0 dev: false hasBin: true resolution: - integrity: sha512-+6VtYadkQEp6OTSa6ms1eAE/CYW+kD9rCd3fq4E2T3VaVqwTcY4vq0zBcB4nhQANnId+SwSpgCn4RFfOUAsWjQ== + integrity: sha512-zW80j9RSJ0VV0VOxP1i7cF279+IlAaD49Ihwqb87PDR0555Fvk10HKmh2yUtXCdBb37bELuhHWZTJc4uoCo8Vw== /run-async/2.3.0: dependencies: is-promise: 2.1.0 @@ -8139,11 +7929,11 @@ packages: node: '>= 0.10' resolution: integrity: sha1-E+jCZYq5aRywzXEJMkAoDTb3els= - /semver/5.7.0: + /semver/5.7.1: dev: false hasBin: true resolution: - integrity: sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== /semver/6.3.0: dev: false hasBin: true @@ -8169,10 +7959,10 @@ packages: node: '>= 0.8.0' resolution: integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - /serialize-javascript/1.7.0: + /serialize-javascript/1.8.0: dev: false resolution: - integrity: sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + integrity: sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg== /serve-static/1.14.1: dependencies: encodeurl: 1.0.2 @@ -8237,15 +8027,10 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - /shell-quote/1.6.1: - dependencies: - array-filter: 0.0.1 - array-map: 0.0.0 - array-reduce: 0.0.0 - jsonify: 0.0.0 + /shell-quote/1.7.1: dev: false resolution: - integrity: sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + integrity: sha512-2kUqeAGnMAu6YrTPX4E3LfxacH9gKljzVjlkUeSqY0soGwK4KLl7TURXCem712tkhBCeeaFP9QK4dKn88s3Icg== /shelljs/0.8.3: dependencies: glob: 7.1.4 @@ -8274,9 +8059,9 @@ packages: integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= /sinon/7.4.1: dependencies: - '@sinonjs/commons': 1.4.0 + '@sinonjs/commons': 1.6.0 '@sinonjs/formatio': 3.2.1 - '@sinonjs/samsam': 3.3.2 + '@sinonjs/samsam': 3.3.3 diff: 3.5.0 lolex: 4.2.0 nise: 1.5.1 @@ -8454,7 +8239,7 @@ packages: foreground-child: 1.5.6 mkdirp: 0.5.1 os-homedir: 1.0.2 - rimraf: 2.6.3 + rimraf: 2.7.1 signal-exit: 3.0.2 which: 1.3.1 dev: false @@ -8607,15 +8392,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - /string-width/2.1.1: - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: false - engines: - node: '>=4' - resolution: - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== /string-width/3.1.0: dependencies: emoji-regex: 7.0.3 @@ -8656,12 +8432,12 @@ packages: dev: false resolution: integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - /string_decoder/1.2.0: + /string_decoder/1.3.0: dependencies: - safe-buffer: 5.1.2 + safe-buffer: 5.2.0 dev: false resolution: - integrity: sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== /strip-ansi/3.0.1: dependencies: ansi-regex: 2.1.1 @@ -8721,12 +8497,6 @@ packages: node: '>=4' resolution: integrity: sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - /strip-json-comments/2.0.1: - dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= /strip-json-comments/3.0.1: dev: false engines: @@ -8778,17 +8548,6 @@ packages: dev: false resolution: integrity: sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= - /table/5.4.5: - dependencies: - ajv: 6.10.2 - lodash: 4.17.15 - slice-ansi: 2.1.0 - string-width: 3.1.0 - dev: false - engines: - node: '>=6.0.0' - resolution: - integrity: sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA== /table/5.4.6: dependencies: ajv: 6.10.2 @@ -8806,16 +8565,16 @@ packages: node: '>=6' resolution: integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - /terser-webpack-plugin/1.4.1_webpack@4.39.1: + /terser-webpack-plugin/1.4.1_webpack@4.39.2: dependencies: - cacache: 12.0.2 + cacache: 12.0.3 find-cache-dir: 2.1.0 is-wsl: 1.1.0 schema-utils: 1.0.0 - serialize-javascript: 1.7.0 + serialize-javascript: 1.8.0 source-map: 0.6.1 - terser: 4.1.3 - webpack: 4.39.1_webpack@4.39.1 + terser: 4.2.0 + webpack: 4.39.2_webpack@4.39.2 webpack-sources: 1.4.3 worker-farm: 1.7.0 dev: false @@ -8825,17 +8584,6 @@ packages: webpack: ^4.0.0 resolution: integrity: sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== - /terser/4.1.3: - dependencies: - commander: 2.20.0 - source-map: 0.6.1 - source-map-support: 0.5.13 - dev: false - engines: - node: '>=6.0.0' - hasBin: true - resolution: - integrity: sha512-on13d+cnpn5bMouZu+J8tPYQecsdRJCJuxFJ+FVoPBoLJgk5bCBkp+Uen2hWyi0KIUm6eDarnlAlH+KgIx/PuQ== /terser/4.2.0: dependencies: commander: 2.20.0 @@ -8899,14 +8647,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - /timers-browserify/2.0.10: + /timers-browserify/2.0.11: dependencies: setimmediate: 1.0.5 dev: false engines: node: '>=0.6.0' resolution: - integrity: sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + integrity: sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== /tmp/0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -9366,11 +9114,11 @@ packages: node: '>= 0.4.0' resolution: integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - /uuid/3.3.2: + /uuid/3.3.3: dev: false hasBin: true resolution: - integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + integrity: sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== /v8-compile-cache/2.0.3: dev: false resolution: @@ -9432,7 +9180,7 @@ packages: dependencies: fs-mkdirp-stream: 1.0.0 glob-stream: 6.1.0 - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 is-valid-glob: 1.0.0 lazystream: 1.0.0 lead: 1.0.0 @@ -9456,7 +9204,7 @@ packages: dependencies: append-buffer: 1.0.2 convert-source-map: 1.6.0 - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 normalize-path: 2.1.1 now-and-later: 2.0.1 remove-bom-buffer: 3.0.0 @@ -9495,8 +9243,8 @@ packages: integrity: sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= /watchpack/1.6.0: dependencies: - chokidar: 2.1.6 - graceful-fs: 4.2.1 + chokidar: 2.1.8 + graceful-fs: 4.2.2 neo-async: 2.6.1 dev: false resolution: @@ -9505,7 +9253,7 @@ packages: dev: false resolution: integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - /webpack-cli/3.3.6_webpack@4.39.1: + /webpack-cli/3.3.7_webpack@4.39.2: dependencies: chalk: 2.4.2 cross-spawn: 6.0.5 @@ -9517,7 +9265,7 @@ packages: loader-utils: 1.2.3 supports-color: 6.1.0 v8-compile-cache: 2.0.3 - webpack: 4.39.1_webpack@4.39.1 + webpack: 4.39.2_webpack@4.39.2 yargs: 13.2.4 dev: false engines: @@ -9526,13 +9274,13 @@ packages: peerDependencies: webpack: 4.x.x resolution: - integrity: sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== - /webpack-dev-middleware/3.7.0_webpack@4.39.1: + integrity: sha512-OhTUCttAsr+IZSMVwGROGRHvT+QAs8H6/mHIl4SvhAwYywjiylYjpwybGx7WQ9Hkb45FhjtsymkwiRRbGJ1SZQ== + /webpack-dev-middleware/3.7.0_webpack@4.39.2: dependencies: memory-fs: 0.4.1 mime: 2.4.4 range-parser: 1.2.1 - webpack: 4.39.1_webpack@4.39.1 + webpack: 4.39.2_webpack@4.39.2 webpack-log: 2.0.0 dev: false engines: @@ -9544,7 +9292,7 @@ packages: /webpack-log/2.0.0: dependencies: ansi-colors: 3.2.4 - uuid: 3.3.2 + uuid: 3.3.3 dev: false engines: node: '>= 6' @@ -9557,13 +9305,13 @@ packages: dev: false resolution: integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - /webpack/4.39.1_webpack@4.39.1: + /webpack/4.39.2_webpack@4.39.2: dependencies: '@webassemblyjs/ast': 1.8.5 '@webassemblyjs/helper-module-context': 1.8.5 '@webassemblyjs/wasm-edit': 1.8.5 '@webassemblyjs/wasm-parser': 1.8.5 - acorn: 6.2.1 + acorn: 6.3.0 ajv: 6.10.2 ajv-keywords: 3.4.1_ajv@6.10.2 chrome-trace-event: 1.0.2 @@ -9579,7 +9327,7 @@ packages: node-libs-browser: 2.2.1 schema-utils: 1.0.0 tapable: 1.1.3 - terser-webpack-plugin: 1.4.1_webpack@4.39.1 + terser-webpack-plugin: 1.4.1_webpack@4.39.2 watchpack: 1.6.0 webpack-sources: 1.4.3 dev: false @@ -9589,7 +9337,7 @@ packages: peerDependencies: webpack: '*' resolution: - integrity: sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ== + integrity: sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA== /whatwg-url/6.5.0: dependencies: lodash.sortby: 4.7.0 @@ -9654,7 +9402,7 @@ packages: integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= /write-file-atomic/2.4.3: dependencies: - graceful-fs: 4.2.1 + graceful-fs: 4.2.2 imurmurhash: 0.1.4 signal-exit: 3.0.2 dev: false @@ -9682,12 +9430,12 @@ packages: dev: false resolution: integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - /ws/7.1.1: + /ws/7.1.2: dependencies: async-limiter: 1.0.1 dev: false resolution: - integrity: sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A== + integrity: sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg== /xhr-mock/2.5.0: dependencies: global: 4.4.0 @@ -9880,26 +9628,25 @@ packages: integrity: sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== 'file:projects/abort-controller.tgz': dependencies: - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 delay: 4.3.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 @@ -9908,17 +9655,16 @@ packages: mocha: 5.2.0 mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 - mocha-multi-reporters: 1.1.7 nyc: 14.1.1 prettier: 1.18.2 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 typescript: 3.5.3 @@ -9930,31 +9676,28 @@ packages: version: 0.0.0 'file:projects/core-amqp.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 - '@azure/core-auth': 1.0.0-preview.2 '@types/async-lock': 1.1.1 - '@types/chai': 4.1.7 - '@types/chai-as-promised': 7.1.1 + '@types/chai': 4.2.0 + '@types/chai-as-promised': 7.1.2 '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/is-buffer': 2.0.0 '@types/jssha': 2.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/sinon': 7.0.13 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 async-lock: 1.2.2 - buffer: 5.2.1 + buffer: 5.4.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 5.2.0 debug: 3.2.6 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -9962,7 +9705,7 @@ packages: is-buffer: 2.0.3 jssha: 2.3.1 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-mocha: 1.3.0 mocha: 5.2.0 mocha-junit-reporter: 1.23.1_mocha@5.2.0 @@ -9973,18 +9716,18 @@ packages: puppeteer: 1.19.0 rhea: 1.0.8 rhea-promise: 1.0.0 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 rollup-plugin-node-globals: 1.4.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 sinon: 7.4.1 stream-browserify: 2.0.2 ts-node: 8.3.0_typescript@3.5.3 @@ -9992,7 +9735,7 @@ packages: typescript: 3.5.3 url: 0.11.0 util: 0.12.1 - ws: 7.1.1 + ws: 7.1.2 dev: false name: '@rush-temp/core-amqp' resolution: @@ -10001,29 +9744,27 @@ packages: version: 0.0.0 'file:projects/core-arm.tgz': dependencies: - '@types/chai': 4.1.7 + '@types/chai': 4.2.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 chai: 4.2.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 mocha: 5.2.0 mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 - mocha-multi-reporters: 1.1.7 npm-run-all: 4.1.5 nyc: 14.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 shx: 0.3.2 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 @@ -10038,12 +9779,11 @@ packages: version: 0.0.0 'file:projects/core-asynciterator-polyfill.tgz': dependencies: - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10057,17 +9797,15 @@ packages: version: 0.0.0 'file:projects/core-auth.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10076,16 +9814,16 @@ packages: mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.12.1 @@ -10097,34 +9835,29 @@ packages: version: 0.0.0 'file:projects/core-http.tgz': dependencies: - '@azure/core-auth': 1.0.0-preview.2 '@azure/logger-js': 1.3.2 - '@types/chai': 4.1.7 - '@types/express': 4.17.0 + '@types/chai': 4.2.0 + '@types/express': 4.17.1 '@types/fetch-mock': 7.3.1 '@types/glob': 7.1.1 '@types/karma': 3.0.3 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/node-fetch': 2.5.0 '@types/semver': 5.5.0 '@types/sinon': 7.0.13 '@types/tough-cookie': 2.3.5 '@types/tunnel': 0.0.1 '@types/uuid': 3.4.5 - '@types/webpack': 4.32.1 + '@types/webpack': 4.39.0 '@types/webpack-dev-middleware': 2.0.3 '@types/xml2js': 0.4.4 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 - abortcontroller-polyfill: 1.3.0 - axios: 0.19.0 - axios-mock-adapter: 1.17.0_axios@0.19.0 babel-runtime: 6.26.0 chai: 4.2.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10134,34 +9867,32 @@ packages: glob: 7.1.4 karma: 4.2.0 karma-chai: 0.1.0_chai@4.2.0+karma@4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-mocha: 1.3.0 - karma-rollup-preprocessor: 7.0.2_rollup@1.19.3 + karma-rollup-preprocessor: 7.0.2_rollup@1.20.0 karma-sourcemap-loader: 0.3.7 karma-typescript-es6-transform: 4.1.1 - karma-webpack: 4.0.2_webpack@4.39.1 + karma-webpack: 4.0.2_webpack@4.39.2 mocha: 5.2.0 mocha-chrome: 2.0.0 mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 - mocha-multi-reporters: 1.1.7 node-fetch: 2.6.0 npm-run-all: 4.1.5 nyc: 14.1.1 process: 0.11.10 puppeteer: 1.19.0 regenerator-runtime: 0.13.3 - rimraf: 2.6.3 - rollup: 1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 rollup-plugin-alias: 1.5.2 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 - rollup-plugin-resolve: 0.0.1-predev.1 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 - semver: 5.7.0 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 + semver: 5.7.1 shx: 0.3.2 sinon: 7.4.1 terser: 4.2.0 @@ -10172,10 +9903,10 @@ packages: tunnel: 0.0.6 typescript: 3.5.3 uglify-js: 3.6.0 - uuid: 3.3.2 - webpack: 4.39.1_webpack@4.39.1 - webpack-cli: 3.3.6_webpack@4.39.1 - webpack-dev-middleware: 3.7.0_webpack@4.39.1 + uuid: 3.3.3 + webpack: 4.39.2_webpack@4.39.2 + webpack-cli: 3.3.7_webpack@4.39.2 + webpack-dev-middleware: 3.7.0_webpack@4.39.2 xhr-mock: 2.5.0 xml2js: 0.4.19 yarn: 1.17.3 @@ -10188,12 +9919,11 @@ packages: 'file:projects/core-paging.tgz': dependencies: '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10207,16 +9937,15 @@ packages: version: 0.0.0 'file:projects/core-tracing.tgz': dependencies: - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10225,16 +9954,16 @@ packages: mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.12.1 @@ -10246,34 +9975,32 @@ packages: version: 0.0.0 'file:projects/event-hubs.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-asynciterator-polyfill': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/async-lock': 1.1.1 - '@types/chai': 4.1.7 - '@types/chai-as-promised': 7.1.1 - '@types/chai-string': 1.4.1 + '@types/chai': 4.2.0 + '@types/chai-as-promised': 7.1.2 + '@types/chai-string': 1.4.2 '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/long': 4.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/uuid': 3.4.5 '@types/ws': 6.0.2 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 async-lock: 1.2.2 - buffer: 5.2.1 + buffer: 5.4.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 chai-string: 1.5.0_chai@4.2.0 cross-env: 5.2.0 debug: 3.2.6 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10281,11 +10008,11 @@ packages: is-buffer: 2.0.3 jssha: 2.3.1 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 @@ -10299,23 +10026,23 @@ packages: process: 0.11.10 puppeteer: 1.19.0 rhea-promise: 1.0.0 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 ts-mocha: 6.0.0_mocha@5.2.0 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 typescript: 3.5.3 - uuid: 3.3.2 - ws: 7.1.1 + uuid: 3.3.3 + ws: 7.1.2 dev: false name: '@rush-temp/event-hubs' resolution: @@ -10326,15 +10053,15 @@ packages: dependencies: '@azure/event-hubs': 2.1.1 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/async-lock': 1.1.1 - '@types/chai': 4.1.7 - '@types/chai-as-promised': 7.1.1 - '@types/chai-string': 1.4.1 + '@types/chai': 4.2.0 + '@types/chai-as-promised': 7.1.2 + '@types/chai-string': 1.4.2 '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/uuid': 3.4.5 '@types/ws': 6.0.2 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff @@ -10346,10 +10073,9 @@ packages: chai-string: 1.5.0_chai@4.2.0 cross-env: 5.2.0 debug: 3.2.6 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10360,20 +10086,20 @@ packages: nyc: 14.1.1 path-browserify: 1.0.0 prettier: 1.18.2 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-uglify: 6.0.2_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-uglify: 6.0.2_rollup@1.20.0 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 typescript: 3.5.3 - uuid: 3.3.2 - ws: 7.1.1 + uuid: 3.3.3 + ws: 7.1.2 dev: false name: '@rush-temp/event-processor-host' resolution: @@ -10382,10 +10108,9 @@ packages: version: 0.0.0 'file:projects/identity.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 '@types/jws': 3.2.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/qs': 6.5.3 '@types/uuid': 3.4.5 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff @@ -10397,7 +10122,7 @@ packages: inherits: 2.0.4 jws: 3.2.2 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-env-preprocessor: 0.1.1 karma-json-preprocessor: 0.3.3_karma@4.2.0 @@ -10409,24 +10134,24 @@ packages: mocha: 5.2.0 mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 - msal: 1.0.2 + msal: 1.1.3 prettier: 1.18.2 puppeteer: 1.19.0 - qs: 6.7.0 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + qs: 6.8.0 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.12.1 - uuid: 3.3.2 + uuid: 3.3.3 dev: false name: '@rush-temp/identity' resolution: @@ -10437,34 +10162,33 @@ packages: dependencies: '@azure/core-paging': 1.0.0-preview.1 '@azure/core-tracing': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.5 - '@types/chai': 4.1.7 + '@microsoft/api-extractor': 7.3.8 + '@types/chai': 4.2.0 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 fs-extra: 8.1.0 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10481,16 +10205,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 tslib: 1.10.0 typescript: 3.5.3 @@ -10504,38 +10228,36 @@ packages: version: 0.0.0 'file:projects/keyvault-keys.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 '@azure/core-tracing': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@trust/keyto': 0.3.7 - '@types/chai': 4.1.7 + '@types/chai': 4.2.0 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 fs-extra: 8.1.0 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10552,16 +10274,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 tslib: 1.10.0 typescript: 3.5.3 @@ -10575,36 +10297,34 @@ packages: version: 0.0.0 'file:projects/keyvault-secrets.tgz': dependencies: - '@azure/abort-controller': 1.0.0-preview.1 '@azure/core-paging': 1.0.0-preview.1 - '@microsoft/api-extractor': 7.3.5 - '@types/chai': 4.1.7 + '@microsoft/api-extractor': 7.3.8 + '@types/chai': 4.2.0 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 chai: 4.2.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 fs-extra: 8.1.0 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10621,16 +10341,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 tslib: 1.10.0 typescript: 3.5.3 @@ -10647,41 +10367,40 @@ packages: '@azure/amqp-common': 1.0.0-preview.6_rhea-promise@0.1.15 '@azure/arm-servicebus': 3.2.0 '@azure/ms-rest-nodeauth': 0.9.3 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/async-lock': 1.1.1 - '@types/chai': 4.1.7 - '@types/chai-as-promised': 7.1.1 + '@types/chai': 4.2.0 + '@types/chai-as-promised': 7.1.2 '@types/debug': 0.0.31 '@types/dotenv': 6.1.1 '@types/is-buffer': 2.0.0 '@types/long': 4.0.0 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/ws': 6.0.2 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 - buffer: 5.2.1 + buffer: 5.4.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 5.2.0 debug: 3.2.6 delay: 4.3.0 - dotenv: 8.0.0 + dotenv: 8.1.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 https-proxy-agent: 2.2.2 is-buffer: 2.0.3 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 @@ -10699,21 +10418,21 @@ packages: puppeteer: 1.19.0 rhea: 1.0.8 rhea-promise: 0.1.15 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-inject: 3.0.1 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 typescript: 3.5.3 - ws: 7.1.1 + ws: 7.1.2 dev: false name: '@rush-temp/service-bus' resolution: @@ -10723,23 +10442,22 @@ packages: 'file:projects/storage-blob.tgz': dependencies: '@azure/ms-rest-js': 2.0.4 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 es6-promise: 4.2.8 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10749,11 +10467,11 @@ packages: gulp-zip: 5.0.0_gulp@4.0.2 inherits: 2.0.4 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10770,16 +10488,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 @@ -10794,23 +10512,22 @@ packages: 'file:projects/storage-file.tgz': dependencies: '@azure/ms-rest-js': 2.0.4 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 es6-promise: 4.2.8 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10820,11 +10537,11 @@ packages: gulp-zip: 5.0.0_gulp@4.0.2 inherits: 2.0.4 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10841,16 +10558,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 @@ -10865,23 +10582,22 @@ packages: 'file:projects/storage-queue.tgz': dependencies: '@azure/ms-rest-js': 2.0.4 - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/dotenv': 6.1.1 '@types/fs-extra': 8.0.0 '@types/mocha': 5.2.7 '@types/nise': 1.4.0 '@types/nock': 10.0.3 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/query-string': 6.2.0 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 - dotenv: 8.0.0 + dotenv: 8.1.0 es6-promise: 4.2.8 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 @@ -10890,11 +10606,11 @@ packages: gulp-zip: 5.0.0_gulp@4.0.2 inherits: 2.0.4 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-json-preprocessor: 0.3.3_karma@4.2.0 karma-json-to-file-reporter: 1.0.1 @@ -10911,16 +10627,16 @@ packages: prettier: 1.18.2 puppeteer: 1.19.0 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 source-map-support: 0.5.13 ts-node: 8.3.0_typescript@3.5.3 tslib: 1.10.0 @@ -10934,27 +10650,26 @@ packages: version: 0.0.0 'file:projects/template.tgz': dependencies: - '@microsoft/api-extractor': 7.3.5 + '@microsoft/api-extractor': 7.3.8 '@types/mocha': 5.2.7 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@typescript-eslint/eslint-plugin': 2.0.0_3cafee28902d96627d4743e014bc28ff '@typescript-eslint/parser': 2.0.0_eslint@6.2.1 assert: 1.5.0 cross-env: 5.2.0 eslint: 6.2.1 - eslint-config-prettier: 6.0.0_eslint@6.2.1 - eslint-detailed-reporter: 0.8.0_eslint@5.16.0 + eslint-config-prettier: 6.1.0_eslint@6.2.1 eslint-plugin-no-null: 1.0.2_eslint@6.2.1 eslint-plugin-no-only-tests: 2.3.1 eslint-plugin-promise: 4.2.1 events: 3.0.0 inherits: 2.0.4 karma: 4.2.0 - karma-chrome-launcher: 3.0.0 + karma-chrome-launcher: 3.1.0 karma-coverage: 1.1.2 karma-edge-launcher: 0.4.2_karma@4.2.0 karma-env-preprocessor: 0.1.1 - karma-firefox-launcher: 1.1.0 + karma-firefox-launcher: 1.2.0 karma-ie-launcher: 1.0.0_karma@4.2.0 karma-junit-reporter: 1.2.0_karma@4.2.0 karma-mocha: 1.3.0 @@ -10964,16 +10679,16 @@ packages: mocha-junit-reporter: 1.23.1_mocha@5.2.0 mocha-multi: 1.1.0_mocha@5.2.0 prettier: 1.18.2 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-json: 4.0.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 tslib: 1.10.0 typescript: 3.5.3 util: 0.12.1 @@ -10994,16 +10709,16 @@ packages: nise: 1.5.1 nock: 10.0.6 query-string: 5.1.1 - rimraf: 2.6.3 - rollup: 1.19.3 - rollup-plugin-commonjs: 10.0.2_rollup@1.19.3 + rimraf: 2.7.1 + rollup: 1.20.0 + rollup-plugin-commonjs: 10.0.2_rollup@1.20.0 rollup-plugin-multi-entry: 2.1.0 - rollup-plugin-node-resolve: 5.2.0_rollup@1.19.3 + rollup-plugin-node-resolve: 5.2.0_rollup@1.20.0 rollup-plugin-replace: 2.2.0 rollup-plugin-shim: 1.0.0 - rollup-plugin-sourcemaps: 0.4.2_rollup@1.19.3 - rollup-plugin-terser: 5.1.1_rollup@1.19.3 - rollup-plugin-visualizer: 2.5.4_rollup@1.19.3 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.20.0 + rollup-plugin-terser: 5.1.1_rollup@1.20.0 + rollup-plugin-visualizer: 2.5.4_rollup@1.20.0 tslib: 1.10.0 dev: false name: '@rush-temp/test-utils-recorder' @@ -11014,17 +10729,17 @@ packages: 'file:projects/testhub.tgz': dependencies: '@azure/event-hubs': 2.1.1 - '@types/node': 8.10.51 + '@types/node': 8.10.52 '@types/uuid': 3.4.5 '@types/yargs': 13.0.2 async-lock: 1.2.2 death: 1.1.0 debug: 3.2.6 rhea: 1.0.8 - rimraf: 2.6.3 + rimraf: 2.7.1 tslib: 1.10.0 typescript: 3.5.3 - uuid: 3.3.2 + uuid: 3.3.3 yargs: 13.3.0 dev: false name: '@rush-temp/testhub' @@ -11032,7 +10747,6 @@ packages: integrity: sha512-VxrbDXfuJ6Nz4rm0DHlJ+0sMk4RMKRflIyu7WxXLZGBpri9KLivFyNA0TWfZBifpdy3T1kVXyLOccskpzczDvA== tarball: 'file:projects/testhub.tgz' version: 0.0.0 -registry: '' specifiers: '@azure/amqp-common': 1.0.0-preview.6 '@azure/arm-servicebus': ^3.2.0 From 82e17a002e4885fd3b7cfb49912ced83852aeca4 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 11:02:04 -0700 Subject: [PATCH 78/83] Aborter -> Some Random Test Suite --- sdk/test-utils/recorder/GUIDELINES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index 1eae3e403371..f5e1f9683ff3 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -152,7 +152,7 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. For example ```typescript - describe("Aborter", () => { + describe("Some Random Test Suite", () => { beforeEach(async function() { recorder = record(this); /*Place your code here*/ @@ -171,7 +171,7 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. ``` (Node Test) Recording corresponding to the above test is placed at - `./recordings/node/aborter/recording_should_abort_when_abort_is_called.js` + `./recordings/node/some_random_test_suite/recording_should_abort_when_abort_is_called.js` [ Following this rule - `./recordings/node//recording_.js` ] From b2073c98247c298143739541d910533285246e6e Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 12:22:01 -0700 Subject: [PATCH 79/83] Addressed Jonathan's comments - removed storage specific code and other minor comments --- sdk/test-utils/recorder/GUIDELINES.md | 2 - sdk/test-utils/recorder/src/baseRecorder.ts | 42 +++++++-------------- sdk/test-utils/recorder/src/index.ts | 7 +++- 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/sdk/test-utils/recorder/GUIDELINES.md b/sdk/test-utils/recorder/GUIDELINES.md index f5e1f9683ff3..9d27c12512d8 100644 --- a/sdk/test-utils/recorder/GUIDELINES.md +++ b/sdk/test-utils/recorder/GUIDELINES.md @@ -215,8 +215,6 @@ Add `@azure/test-utils-recorder` as a devDependency of your sdk. - The above methods can be called from the `before` section so that the tests can leverage the environment variables. -- Currently, the environment variables for storage-packages are managed by the recorder. `ACCOUNT_NAME` is replaced with `"fakestorageaccount"`, secret part of `ACCOUNT_SAS` and `ACCOUNT_KEY` are replaced with `"aaaaa"`. - The same dummy values are used as the environment variables during the playback mode. --- diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 73a1ffe7a010..315f2451057a 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -33,6 +33,16 @@ export function setReplacements(maps: any): void { replacements = maps; } +let queryParameters: string[] = []; +/** + * Query Parameters, for example from the SAS token may contain sensitive information. + * Query Parameters provided by calling this method will be skipped. + * @param {string[]} [params] Query Parameters to be skipped + */ +export function skipQueryParams(params: string[]): void { + queryParameters = params; +} + export function setEnviromentOnLoad() { if (!isBrowser() && (isRecordMode || isPlaybackMode)) { nock = require("nock"); @@ -41,17 +51,6 @@ export function setEnviromentOnLoad() { if (isBrowser() && isRecordMode()) { customConsoleLog(); } - - // TODO - The following will be moved to the storage sdks when @azure/test-utils-recorder is imported - if (isPlaybackMode()) { - // Providing dummy values to avoid the error [ENVs for storage packages] - env.ACCOUNT_NAME = "fakestorageaccount"; - env.ACCOUNT_KEY = "aaaaa"; - env.ACCOUNT_SAS = "aaaaa"; - env.STORAGE_CONNECTION_STRING = `DefaultEndpointsProtocol=https;AccountName=${ - env.ACCOUNT_NAME - };AccountKey=${env.ACCOUNT_KEY};EndpointSuffix=core.windows.net`; - } } // TODO - skip list will be removed - #4336 @@ -108,20 +107,6 @@ export abstract class BaseRecorder { updatedRecording = map(updatedRecording); } - // TODO - The following will be moved to the storage sdks when @azure/test-utils-recorder is imported - // Handling storage environment variables separately - if (env.ACCOUNT_NAME) { - updatedRecording = recording.replace(new RegExp(env.ACCOUNT_NAME, "g"), "fakestorageaccount"); - } - if (env.ACCOUNT_KEY) { - updatedRecording = updatedRecording.replace(new RegExp(env.ACCOUNT_KEY, "g"), "aaaaa"); - } - if (env.ACCOUNT_SAS) { - updatedRecording = updatedRecording.replace( - new RegExp(env.ACCOUNT_SAS.match("(.*)&sig=(.*)")[2], "g"), - "aaaaa" - ); - } return updatedRecording; } @@ -225,7 +210,6 @@ export class NockRecorder extends BaseRecorder { // Nise module does not have a native implementation of record/playback like Nock does // This class overrides requests' 'open', 'send' and 'onreadystatechange' functions, adding our own code to them to deal with requests export class NiseRecorder extends BaseRecorder { - private readonly sasQueryParameters = ["se", "sig", "sp", "spr", "srt", "ss", "st", "sv"]; private recordings: any[] = []; constructor(testSuiteTitle: string, testTitle: string) { @@ -241,13 +225,13 @@ export class NiseRecorder extends BaseRecorder { responseHeaders[key] = value; } - // We're not storing SAS Query Parameters because they may contain sensitive information + // We're not storing Query Parameters because they may contain sensitive information // We're ignoring the "_" parameter as well because it's not being added by our code // More info on "_": https://stackoverflow.com/questions/3687729/who-add-single-underscore-query-parameter const parsedUrl = queryString.parseUrl(request.url); const query: any = {}; for (const param in parsedUrl.query) { - if (!this.sasQueryParameters.includes(param) && param !== "_") { + if (!queryParameters.includes(param) && param !== "_") { query[param] = parsedUrl.query[param]; } } @@ -277,7 +261,7 @@ export class NiseRecorder extends BaseRecorder { for (const param in request.query) { if ( recording.query[param] === undefined && - !this.sasQueryParameters.includes(param) && + !queryParameters.includes(param) && param !== "_" ) { return false; diff --git a/sdk/test-utils/recorder/src/index.ts b/sdk/test-utils/recorder/src/index.ts index 4985cfcae37b..e82e6a3638ba 100644 --- a/sdk/test-utils/recorder/src/index.ts +++ b/sdk/test-utils/recorder/src/index.ts @@ -3,4 +3,9 @@ export { record, Recorder } from "./recorder"; export { env, delay } from "./utils"; -export { setReplaceableVariables, setReplacements, setEnviromentOnLoad } from "./baseRecorder"; +export { + setReplaceableVariables, + setReplacements, + setEnviromentOnLoad, + skipQueryParams +} from "./baseRecorder"; From 89a91881f0131518d1879692d10c8e5a34c83dc2 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 12:26:26 -0700 Subject: [PATCH 80/83] More info on readyState --- sdk/test-utils/recorder/src/baseRecorder.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/test-utils/recorder/src/baseRecorder.ts b/sdk/test-utils/recorder/src/baseRecorder.ts index 315f2451057a..b014d0194e74 100644 --- a/sdk/test-utils/recorder/src/baseRecorder.ts +++ b/sdk/test-utils/recorder/src/baseRecorder.ts @@ -304,8 +304,12 @@ export class NiseRecorder extends BaseRecorder { // Now we can finally override 'onreadystatechange' because 'send' has already been called const reqStateChange = req.onreadystatechange; req.onreadystatechange = function() { - // Record the request once the response is obtained + // .readyState property returns the state an XMLHttpRequest client is in + // readyState = 4 refers to the completion of the operation. + // This could mean that either the data transfer has been completed successfully or failed. + // More info on readyState - https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState if (req.readyState === 4) { + // Record the request once the response is obtained self.recordRequest(req, data); } // Sometimes the client doesn't implement an 'onreadystatechange' function, so we need to make sure it exists before calling the original implementation From 604b420ac35e4bed8b6b25cde4bde9e632f7f500 Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 13:50:32 -0700 Subject: [PATCH 81/83] Copying Mike's fix from #4859 for mocha@6 --- sdk/test-utils/recorder/src/recorder.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sdk/test-utils/recorder/src/recorder.ts b/sdk/test-utils/recorder/src/recorder.ts index d6b8f53387ec..93bccc12cd1f 100644 --- a/sdk/test-utils/recorder/src/recorder.ts +++ b/sdk/test-utils/recorder/src/recorder.ts @@ -51,9 +51,16 @@ export function record(testContext: Mocha.Context): Recorder { let testHierarchy: string; let testTitle: string; - if (testContext.currentTest) { - testHierarchy = testContext.currentTest.parent!.fullTitle(); - testTitle = testContext.currentTest.title; + // In a hook ("before all" or "before each"), testContext.test points to the hook, while testContext.currentTest + // points to the individual test that will be run next. A "before all" hook is run once before all tests, + // so the hook itself should be used to identify recordings. However, a "before each" hook is run once before each + // test, so the individual test should be used instead. + if ( + (testContext as any).test.type == "hook" && + (testContext as any).test.title.includes("each") + ) { + testHierarchy = testContext.currentTest!.parent!.fullTitle(); + testTitle = testContext.currentTest!.title; } else { testHierarchy = testContext.test!.parent!.fullTitle(); testTitle = testContext.test!.title; From 401e1f8d0494f3c96538537670ed5fd3acedb21c Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 15:23:28 -0700 Subject: [PATCH 82/83] new recorder in keyvault-secrets --- sdk/keyvault/keyvault-secrets/package.json | 1 + .../keyvault-secrets/tests/CRUD.test.ts | 7 ++++--- .../keyvault-secrets/tests/list.test.ts | 19 ++++++++++--------- .../tests/recoverBackupRestore.test.ts | 8 +++++--- .../tests/utils/testAuthentication.ts | 3 ++- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/sdk/keyvault/keyvault-secrets/package.json b/sdk/keyvault/keyvault-secrets/package.json index d9c7ef5eff8a..cf1423881da2 100644 --- a/sdk/keyvault/keyvault-secrets/package.json +++ b/sdk/keyvault/keyvault-secrets/package.json @@ -76,6 +76,7 @@ "tslib": "^1.9.3" }, "devDependencies": { + "@azure/test-utils-recorder": "1.0.0", "@microsoft/api-extractor": "^7.1.5", "@types/chai": "^4.1.6", "@types/dotenv": "^6.1.0", diff --git a/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts b/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts index 1145b255d64e..4a3087cbfe4a 100644 --- a/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts +++ b/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts @@ -3,7 +3,8 @@ import * as assert from "assert"; import { SecretsClient } from "../src"; -import { retry, env } from "./utils/recorder"; +import { retry } from "./utils/recorder"; +import { env } from "@azure/test-utils-recorder"; import { authenticate } from "./utils/testAuthentication"; import TestClient from "./utils/testClient"; import { AbortController } from "@azure/abort-controller"; @@ -16,7 +17,7 @@ describe("Secret client - create, read, update and delete operations", () => { let testClient: TestClient; let recorder: any; - before(async function() { + beforeEach(async function() { const authentication = await authenticate(this); secretSuffix = authentication.secretSuffix; client = authentication.client; @@ -24,7 +25,7 @@ describe("Secret client - create, read, update and delete operations", () => { recorder = authentication.recorder; }); - after(async function() { + afterEach(async function() { recorder.stop(); }); diff --git a/sdk/keyvault/keyvault-secrets/tests/list.test.ts b/sdk/keyvault/keyvault-secrets/tests/list.test.ts index 0ea01ae88db9..e6be12ec6068 100644 --- a/sdk/keyvault/keyvault-secrets/tests/list.test.ts +++ b/sdk/keyvault/keyvault-secrets/tests/list.test.ts @@ -4,7 +4,8 @@ import * as assert from "assert"; import chai from "chai"; import { SecretsClient } from "../src"; -import { retry, env } from "./utils/recorder"; +import { retry } from "./utils/recorder"; +import { env } from "@azure/test-utils-recorder"; import { authenticate } from "./utils/testAuthentication"; import TestClient from "./utils/testClient"; const { expect } = chai; @@ -17,7 +18,7 @@ describe("Secret client - list secrets in various ways", () => { let testClient: TestClient; let recorder: any; - before(async function() { + beforeEach(async function() { const authentication = await authenticate(this); secretSuffix = authentication.secretSuffix; client = authentication.client; @@ -25,7 +26,7 @@ describe("Secret client - list secrets in various ways", () => { recorder = authentication.recorder; }); - after(async function() { + afterEach(async function() { recorder.stop(); }); @@ -36,12 +37,12 @@ describe("Secret client - list secrets in various ways", () => { for await (const secret of client.listSecrets()) { try { await testClient.flushSecret(secret.name); - } catch(e) {} + } catch (e) {} } for await (const secret of client.listDeletedSecrets()) { try { await testClient.purgeSecret(secret.name); - } catch(e) {} + } catch (e) {} } }); @@ -146,7 +147,7 @@ describe("Secret client - list secrets in various ways", () => { assert.equal(totalVersions, 0, `Unexpected total versions for secret ${secretName}`); }); - it("can list secrets", async function() { + it("can list secrets - byPage()", async function() { const secretName = testClient.formatName( `${secretPrefix}-${this!.test!.title}-${secretSuffix}` ); @@ -168,7 +169,7 @@ describe("Secret client - list secrets in various ways", () => { } }); - it("can list deleted secrets", async function() { + it("can list deleted secrets - byPage()", async function() { const secretName = testClient.formatName( `${secretPrefix}-${this!.test!.title}-${secretSuffix}` ); @@ -199,7 +200,7 @@ describe("Secret client - list secrets in various ways", () => { } }); - it("can retrieve all versions of a secret", async function() { + it("can retrieve all versions of a secret - byPage()", async function() { const secretName = testClient.formatName( `${secretPrefix}-${this!.test!.title}-${secretSuffix}` ); @@ -232,7 +233,7 @@ describe("Secret client - list secrets in various ways", () => { await testClient.flushSecret(secretName); }); - it("can list secret versions (non existing)", async function() { + it("can list secret versions (non existing) - byPage()", async function() { const secretName = testClient.formatName( `${secretPrefix}-${this!.test!.title}-${secretSuffix}` ); diff --git a/sdk/keyvault/keyvault-secrets/tests/recoverBackupRestore.test.ts b/sdk/keyvault/keyvault-secrets/tests/recoverBackupRestore.test.ts index 3ad0c49ca2af..04746b85127f 100644 --- a/sdk/keyvault/keyvault-secrets/tests/recoverBackupRestore.test.ts +++ b/sdk/keyvault/keyvault-secrets/tests/recoverBackupRestore.test.ts @@ -3,7 +3,9 @@ import * as assert from "assert"; import { SecretsClient } from "../src"; -import { retry, isNode, env } from "./utils/recorder"; +import { retry } from "./utils/recorder"; +import { isNode } from "@azure/core-http"; +import { env } from "@azure/test-utils-recorder"; import { authenticate } from "./utils/testAuthentication"; import TestClient from "./utils/testClient"; @@ -14,7 +16,7 @@ describe("Secret client - restore secrets and recover backups", () => { let testClient: TestClient; let recorder: any; - before(async function() { + beforeEach(async function() { const authentication = await authenticate(this); secretSuffix = authentication.secretSuffix; client = authentication.client; @@ -22,7 +24,7 @@ describe("Secret client - restore secrets and recover backups", () => { recorder = authentication.recorder; }); - after(async function() { + afterEach(async function() { recorder.stop(); }); diff --git a/sdk/keyvault/keyvault-secrets/tests/utils/testAuthentication.ts b/sdk/keyvault/keyvault-secrets/tests/utils/testAuthentication.ts index d64366528b13..c7d0edd89d84 100644 --- a/sdk/keyvault/keyvault-secrets/tests/utils/testAuthentication.ts +++ b/sdk/keyvault/keyvault-secrets/tests/utils/testAuthentication.ts @@ -1,7 +1,8 @@ import { ClientSecretCredential } from "@azure/identity"; import { getKeyvaultName } from "./utils.common"; import { SecretsClient } from "../../src"; -import { env, record, setReplaceableVariables, setReplacements, uniqueString } from "./recorder"; +import { env, record, setReplaceableVariables, setReplacements } from "@azure/test-utils-recorder"; +import { uniqueString } from "./recorder"; import TestClient from "./testClient"; export async function authenticate(that: any): Promise { From 1d008c5318827afbe281daef295e7c3c5d9c033d Mon Sep 17 00:00:00 2001 From: HarshaNalluru <10452642+HarshaNalluru@users.noreply.github.com> Date: Thu, 22 Aug 2019 16:30:26 -0700 Subject: [PATCH 83/83] skip aborter test in browser - since playback fails for that test --- .../keyvault-secrets/tests/CRUD.test.ts | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts b/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts index 4a3087cbfe4a..38b53e5f8d58 100644 --- a/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts +++ b/sdk/keyvault/keyvault-secrets/tests/CRUD.test.ts @@ -4,10 +4,11 @@ import * as assert from "assert"; import { SecretsClient } from "../src"; import { retry } from "./utils/recorder"; -import { env } from "@azure/test-utils-recorder"; +import { env } from "@azure/test-utils-recorder"; import { authenticate } from "./utils/testAuthentication"; import TestClient from "./utils/testClient"; import { AbortController } from "@azure/abort-controller"; +import { isNode } from "@azure/core-http"; describe("Secret client - create, read, update and delete operations", () => { const secretValue = "SECRET_VALUE"; @@ -41,25 +42,28 @@ describe("Secret client - create, read, update and delete operations", () => { await testClient.flushSecret(secretName); }); - it("can abort adding a secret", async function() { - const secretName = testClient.formatName( - `${secretPrefix}-${this!.test!.title}-${secretSuffix}` - ); - const controller = new AbortController(); - const resultPromise = client.setSecret(secretName, secretValue, { - requestOptions: { - abortSignal: controller.signal + if (!isNode && (env.TEST_MODE === "record" || env.TEST_MODE === "playback")) { + } else { + it("can abort adding a secret", async function() { + const secretName = testClient.formatName( + `${secretPrefix}-${this!.test!.title}-${secretSuffix}` + ); + const controller = new AbortController(); + const resultPromise = client.setSecret(secretName, secretValue, { + requestOptions: { + abortSignal: controller.signal + } + }); + controller.abort(); + let error; + try { + await resultPromise; + } catch (e) { + error = e; } + assert.equal(error.message, "The request was aborted"); }); - controller.abort(); - let error; - try { - await resultPromise; - } catch (e) { - error = e; - } - assert.equal(error.message, "The request was aborted"); - }); + } it("cannot create a secret with an empty name", async function() { const secretName = "";