From eb2a79945aeda7431039e63d8fb565d5462671fd Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Tue, 21 Jul 2020 06:58:49 -0500 Subject: [PATCH 01/53] initial commit --- src/core/test-app/runner/config.ts | 2 +- src/core/test-app/tests/index.ts | 2 +- .../tests/rate-shipment-all-services.ts | 231 +++++++++++++++ src/core/test-app/tests/rate-shipment.ts | 231 --------------- .../tests/rate-shipment-all-services.spec.js | 274 ++++++++++++++++++ 5 files changed, 507 insertions(+), 233 deletions(-) create mode 100644 src/core/test-app/tests/rate-shipment-all-services.ts delete mode 100644 src/core/test-app/tests/rate-shipment.ts create mode 100644 test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index cd11fc3..530458e 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -37,7 +37,7 @@ export interface CreateShipmentDomesticOptions extends TestOptions { deliveryConfirmationName?: string; } -export interface RateShipmentOptions extends TestOptions { +export interface RateShipmentAllServicesOptions extends TestOptions { deliveryServiceNames: string | string[]; shipFrom: AddressWithContactInfoPOJO; shipTo: AddressWithContactInfoPOJO; diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index 9e082fa..eb73228 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -2,7 +2,7 @@ // export * from "./cancel-shipments-test-suite"; // export * from "./create-manifest-test-suite"; export * from "./create-shipment-domestic"; -// export * from "./rate-shipment"; +export * from "./rate-shipment-all-services"; // export * from "./create-shipment-domestic"; export * from "./create-shipment-international"; // export * from "./get-sales-order-test-suite"; diff --git a/src/core/test-app/tests/rate-shipment-all-services.ts b/src/core/test-app/tests/rate-shipment-all-services.ts new file mode 100644 index 0000000..704dc1c --- /dev/null +++ b/src/core/test-app/tests/rate-shipment-all-services.ts @@ -0,0 +1,231 @@ +import { + CarrierApp, + Address, + DeliveryService, + RateCriteriaPOJO, + WeightUnit, + Country, + PackageRateCriteriaPOJO, + AddressWithContactInfoPOJO, +} from "@shipengine/integration-platform-sdk"; +import Suite from "../runner/suite"; +import { buildAddressWithContactInfo } from "../factories/address"; +import { RateShipmentAllServicesOptions } from "../runner/config"; +import { initializeTimeStamps } from '../../utils/time-stamps'; +import { getDeliveryServiceByName, findMatchingDeliveryServiceCountries } from './utils'; + +interface TestArgs { + title: string; + methodArgs: RateCriteriaPOJO; + config: any; +} + +export class RateShipmentAllServices extends Suite { + title = "rateShipment_allServices"; + + private deliveryServices?: DeliveryService[] = []; + private shipFrom?: AddressWithContactInfoPOJO; + private shipTo?: AddressWithContactInfoPOJO; + + private setDeliveryServices(config: RateShipmentAllServicesOptions): void { + const carrierApp = this.app as CarrierApp; + + if (Array.isArray(config.deliveryServiceNames)) { + + for (let dsName of config.deliveryServiceNames) { + const ds = getDeliveryServiceByName(dsName, carrierApp); + if (!ds) { + throw new Error( + `deliveryServiceName: ${dsName} does not exist`, + ); + } + this.deliveryServices?.push(ds); + return; + } + } + else if (typeof config.deliveryServiceNames === "string") { + const ds = getDeliveryServiceByName(config.deliveryServiceNames, carrierApp); + if (!ds) { + throw new Error( + `deliveryServiceName: ${config.deliveryServiceNames} does not exist`, + ); + } + this.deliveryServices = [ds]; + } + else if (carrierApp.deliveryServices) { + this.deliveryServices = Object.assign([],carrierApp.deliveryServices); + } + } + + private setAddresses(config: RateShipmentAllServicesOptions, originCountries: Country[], destinationCountries: Country[]) { + if (config.shipFrom) { + this.shipFrom = buildAddressWithContactInfo(`${config.shipFrom.country}-from`); + } + else { + for(let oc of originCountries) { + if(buildAddressWithContactInfo(`${oc}-from`)) { + this.shipFrom = buildAddressWithContactInfo(`${oc}-from`); + } + } + } + + if (config.shipTo) { + this.shipTo = buildAddressWithContactInfo(`${config.shipTo.country}-from`); + } + else { + for(let dc of destinationCountries) { + if(buildAddressWithContactInfo(`${dc}-from`)) { + this.shipTo = buildAddressWithContactInfo(`${dc}-from`); + } + } + } + } + + buildTestArg(config: RateShipmentAllServicesOptions): TestArgs | undefined { + this.setDeliveryServices(config); + + if (!this.deliveryServices) return undefined; + + const results = findMatchingDeliveryServiceCountries(this.deliveryServices); + + this.setAddresses(config, results.originCountries, results.destinationCountries); + + if (!this.shipTo || !this.shipFrom) return undefined; + + const { tomorrow } = initializeTimeStamps(this.shipFrom.timeZone); + + const defaults: RateShipmentAllServicesOptions = { + deliveryServiceNames: this.deliveryServices.map(ds => ds.name), + shipDateTime: tomorrow, + shipFrom: this.shipFrom, + shipTo: this.shipTo, + weight: { + unit: WeightUnit.Pounds, + value: 50.0 + }, + packagingName: this.deliveryServices[0].packaging[0].name + }; + + const whiteListKeys = Object.keys(defaults); + + // This code is filtering any keys in the config that are not white listed + // and merging the values with the defaults above + const testParams = Object.keys(config) + .filter((key) => whiteListKeys.includes(key)) + .reduce((obj, key: string) => { + Reflect.set(obj, key, Reflect.get(config, key)); + return obj; + }, defaults); + + const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { + packaging: [{ + id: this.deliveryServices[0].packaging[0].id, + }], + weight: { + value: testParams.weight.value, + unit: testParams.weight.unit, + } + }; + + let RateCriteriaPOJO: RateCriteriaPOJO = { + deliveryServices: this.deliveryServices.map((ds) => { return {id: ds.id} }), + shipFrom: testParams.shipFrom, + shipTo: testParams.shipTo!, + shipDateTime: testParams.shipDateTime, + packages: [packageRateCriteriaPOJO] + }; + + + const title = config.expectedErrorMessage + ? `it raises an error when retrieving rates with ${Object.keys( + testParams, + ) + .map(function (k: any) { + return parseTitle(testParams, k); + }) + .join(", ")}` + : `it retrieves rates with ${Object.keys(testParams) + .map(function (k: any) { + return parseTitle(testParams, k); + }) + .join(", ")}`; + + return { + title, + methodArgs: RateCriteriaPOJO, + config + }; + } + + buildTestArgs(): Array { + if (Array.isArray(this.config)) { + return this.config.map((config: RateShipmentAllServicesOptions) => { + return this.buildTestArg(config); + }); + } else { + const config = this.config as RateShipmentAllServicesOptions; + + return [this.buildTestArg(config)]; + } + } + + tests() { + const testArgs = this.buildTestArgs().filter(args => args !== undefined); + + if (testArgs.length === 0) { + return []; + } + return testArgs.map((testArg) => { + return this.test( + testArg!.title, + testArg!.methodArgs, + testArg!.config, + async () => { + const carrierApp = this.app as CarrierApp; + + const transaction = await this.transaction(testArg!.config); + + carrierApp.rateShipment! && + (await carrierApp.rateShipment!(transaction, testArg!.methodArgs)); + }, + ); + }); + } +} + +type DomesticDeliveryService = Array<{ deliveryService: DeliveryService, domesticCountries: Country[] }>; + +function findDomesticDeliveryService(deliveryServices: DeliveryService[]): DomesticDeliveryService { + + const domesticDS: DomesticDeliveryService = []; + + for (let ds of deliveryServices) { + const domesticCountries = []; + for (let country of ds.originCountries) { + if (ds.destinationCountries.includes(country)) { + domesticCountries.push(country); + } + } + + if (domesticCountries.length > 0) { + domesticDS.push({ deliveryService: ds, domesticCountries }) + } + } + + return domesticDS; +} + +function parseTitle(testParams: RateShipmentAllServicesOptions, key: any): string { + + if (key === "shipFrom" || key === "shipTo") { + const address = Reflect.get(testParams, key) as Address; + return `${key}: ${address.country}`; + } + + if(key === "weight") { + const weight = Reflect.get(testParams, key) as { unit: WeightUnit, value: number } + return `weightValue: ${weight.value}, weightUnit: ${weight.unit}`; + } + + return `${key}: ${Reflect.get(testParams, key)}` +} \ No newline at end of file diff --git a/src/core/test-app/tests/rate-shipment.ts b/src/core/test-app/tests/rate-shipment.ts deleted file mode 100644 index ed10de8..0000000 --- a/src/core/test-app/tests/rate-shipment.ts +++ /dev/null @@ -1,231 +0,0 @@ -// import { -// CarrierApp, -// Address, -// DeliveryService, -// RateCriteriaPOJO, -// WeightUnit, -// Country, -// PackageRateCriteriaPOJO, -// AddressWithContactInfoPOJO, -// } from "@shipengine/integration-platform-sdk"; -// import Suite from "../runner/suite"; -// import { buildAddressWithContactInfo } from "../factories/address"; -// import { RateShipmentOptions } from "../runner/config"; -// import { initializeTimeStamps } from '../../utils/time-stamps'; -// import { getDeliveryServiceByName, findMatchingDeliveryServiceCountries } from './utils'; - -// interface TestArgs { -// title: string; -// methodArgs: RateCriteriaPOJO; -// config: any; -// } - -// export class RateShipment extends Suite { -// title = "rateShipment"; - -// private deliveryServices?: DeliveryService[] = []; -// private shipFrom?: AddressWithContactInfoPOJO; -// private shipTo?: AddressWithContactInfoPOJO; - -// private setDeliveryServices(config: RateShipmentOptions): void { -// const carrierApp = this.app as CarrierApp; - -// if (Array.isArray(config.deliveryServiceNames)) { - -// for (let dsName of config.deliveryServiceNames) { -// const ds = getDeliveryServiceByName(dsName, carrierApp); -// if (!ds) { -// throw new Error( -// `deliveryServiceName: ${dsName} does not exist`, -// ); -// } -// this.deliveryServices?.push(ds); -// return; -// } -// } -// else if (typeof config.deliveryServiceNames === "string") { -// const ds = getDeliveryServiceByName(config.deliveryServiceNames, carrierApp); -// if (!ds) { -// throw new Error( -// `deliveryServiceName: ${config.deliveryServiceNames} does not exist`, -// ); -// } -// this.deliveryServices = [ds]; -// } -// else if (carrierApp.deliveryServices) { -// this.deliveryServices = Object.assign([],carrierApp.deliveryServices); -// } -// } - -// private setAddresses(config: RateShipmentOptions, originCountries: Country[], destinationCountries: Country[]) { -// if (config.shipFrom) { -// this.shipFrom = buildAddressWithContactInfo(`${config.shipFrom.country}-from`); -// } -// else { -// for(let oc of originCountries) { -// if(buildAddressWithContactInfo(`${oc}-from`)) { -// this.shipFrom = buildAddressWithContactInfo(`${oc}-from`); -// } -// } -// } - -// if (config.shipTo) { -// this.shipTo = buildAddressWithContactInfo(`${config.shipTo.country}-from`); -// } -// else { -// for(let dc of destinationCountries) { -// if(buildAddressWithContactInfo(`${dc}-from`)) { -// this.shipTo = buildAddressWithContactInfo(`${dc}-from`); -// } -// } -// } -// } - -// buildTestArg(config: RateShipmentOptions): TestArgs | undefined { -// this.setDeliveryServices(config); - -// if (!this.deliveryServices) return undefined; - -// const results = findMatchingDeliveryServiceCountries(this.deliveryServices); - -// this.setAddresses(config, results.originCountries, results.destinationCountries); - -// if (!this.shipTo || !this.shipFrom) return undefined; - -// const { tomorrow } = initializeTimeStamps(this.shipFrom.timeZone); - -// const defaults: RateShipmentOptions = { -// deliveryServiceNames: this.deliveryServices.map(ds => ds.name), -// shipDateTime: tomorrow, -// shipFrom: this.shipFrom, -// shipTo: this.shipTo, -// weight: { -// unit: WeightUnit.Pounds, -// value: 50.0 -// }, -// packagingName: this.deliveryServices[0].packaging[0].name -// }; - -// const whiteListKeys = Object.keys(defaults); - -// // This code is filtering any keys in the config that are not white listed -// // and merging the values with the defaults above -// const testParams = Object.keys(config) -// .filter((key) => whiteListKeys.includes(key)) -// .reduce((obj, key: string) => { -// Reflect.set(obj, key, Reflect.get(config, key)); -// return obj; -// }, defaults); - -// const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { -// packaging: [{ -// id: this.deliveryServices[0].packaging[0].id, -// }], -// weight: { -// value: testParams.weight.value, -// unit: testParams.weight.unit, -// } -// }; - -// let RateCriteriaPOJO: RateCriteriaPOJO = { -// deliveryServices: this.deliveryServices.map((ds) => { return {id: ds.id} }), -// shipFrom: testParams.shipFrom, -// shipTo: testParams.shipTo!, -// shipDateTime: testParams.shipDateTime, -// packages: [packageRateCriteriaPOJO] -// }; - - -// const title = config.expectedErrorMessage -// ? `it raises an error when retrieving rates with ${Object.keys( -// testParams, -// ) -// .map(function (k: any) { -// return parseTitle(testParams, k); -// }) -// .join(", ")}` -// : `it retrieves rates with ${Object.keys(testParams) -// .map(function (k: any) { -// return parseTitle(testParams, k); -// }) -// .join(", ")}`; - -// return { -// title, -// methodArgs: RateCriteriaPOJO, -// config -// }; -// } - -// buildTestArgs(): Array { -// if (Array.isArray(this.config)) { -// return this.config.map((config: RateShipmentOptions) => { -// return this.buildTestArg(config); -// }); -// } else { -// const config = this.config as RateShipmentOptions; - -// return [this.buildTestArg(config)]; -// } -// } - -// tests() { -// const testArgs = this.buildTestArgs().filter(args => args !== undefined); - -// if (testArgs.length === 0) { -// return []; -// } -// return testArgs.map((testArg) => { -// return this.test( -// testArg!.title, -// testArg!.methodArgs, -// testArg!.config, -// async () => { -// const carrierApp = this.app as CarrierApp; - -// const transaction = await this.transaction(testArg!.config); - -// carrierApp.rateShipment! && -// (await carrierApp.rateShipment!(transaction, testArg!.methodArgs)); -// }, -// ); -// }); -// } -// } - -// type DomesticDeliveryService = Array<{ deliveryService: DeliveryService, domesticCountries: Country[] }>; - -// function findDomesticDeliveryService(deliveryServices: DeliveryService[]): DomesticDeliveryService { - -// const domesticDS: DomesticDeliveryService = []; - -// for (let ds of deliveryServices) { -// const domesticCountries = []; -// for (let country of ds.originCountries) { -// if (ds.destinationCountries.includes(country)) { -// domesticCountries.push(country); -// } -// } - -// if (domesticCountries.length > 0) { -// domesticDS.push({ deliveryService: ds, domesticCountries }) -// } -// } - -// return domesticDS; -// } - -// function parseTitle(testParams: RateShipmentOptions, key: any): string { - -// if (key === "shipFrom" || key === "shipTo") { -// const address = Reflect.get(testParams, key) as Address; -// return `${key}: ${address.country}`; -// } - -// if(key === "weight") { -// const weight = Reflect.get(testParams, key) as { unit: WeightUnit, value: number } -// return `weightValue: ${weight.value}, weightUnit: ${weight.unit}`; -// } - -// return `${key}: ${Reflect.get(testParams, key)}` -// } \ No newline at end of file diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js new file mode 100644 index 0000000..d5cb6cb --- /dev/null +++ b/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js @@ -0,0 +1,274 @@ +const { RateShipmentAllServices } = require("../../../../../../lib/core/test-app/tests/rate-shipment-all-services"); +const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../../utils/pojo"); +const { expect } = require("chai"); + +describe("The create shipment domestic test suite", () => { + + describe("when there is no delivery service", () => { + + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["MX"] + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + + describe("when there is no address available for a delivery service", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["AQ"] + appDefinition.deliveryServices[0].destinationCountries = ["AQ"] + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }) + + describe("when there is a domestic service with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new RateShipmentAllServices(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("labelFormat: pdf"); + expect(tests[0].title).to.include("labelSize: A4"); + expect(tests[0].title).to.include("weightUnit: lb"); + expect(tests[0].title).to.include("weightValue: 50"); + }); + }); + + describe.skip("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + + staticConfigTests.createShipment_domestic = { + weight: { + value: 200 + }, + labelFormat: "png" + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("labelFormat: png"); + expect(tests[0].title).to.include("labelSize: A4"); + expect(tests[0].title).to.include("weightUnit: lb"); + expect(tests[0].title).to.include("weightValue: 200"); + }); + }); + + describe.skip("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.createShipment_domestic = + [ + { + weight: { + value: 200 + }, + labelFormat: "png" + }, + { + weight: { + value: 22 + }, + labelSize: "A6" + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + expect(tests[0].title).to.include("weightValue: 200"); + expect(tests[0].title).to.include("labelFormat: png"); + + expect(tests[1].title).to.include("weightValue: 22"); + expect(tests[1].title).to.include("labelSize: A6"); + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.createShipment_domestic = { + deliveryServiceName: "asdf" + } + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + + try { + const tests = testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: asdf does not exist"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.createShipment_domestic = { + deliveryServiceName: "Better Delivery Service" + } + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); + expect(tests[0].title).to.include("labelFormat: pdf"); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.createShipment_domestic = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentAllServices(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.createShipment_domestic.shipTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("shipTo: US"); + + }); + }); + + describe("When the input parameters do not match the return shipment", () => { + + it("should throw an error for a shipFrom mismatch"); + it("should throw an error for a shipTo mismatch"); + it("should throw an error for a deliveryService mismatch"); + it("should throw an error for a packaging mismatch"); + it("should throw an error for a weight mismatch"); + it("should throw an error for a dimensions mismatch"); + + }); + + describe("When a deliveryService fulfillment property is set", () => { + + it("should throw an error if the response does not match it") + }); + + describe("When a delivery service 'isTrackable' property is set", () => { + it("") + }) + +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.labelFormats = ["pdf"]; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + appDefinition.deliveryServices = [deliveryService]; + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + createShipment_domestic: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} \ No newline at end of file From f069687d3333c4e25aeae93a0c6940d4a9cb05e6 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 22 Jul 2020 11:00:20 -0500 Subject: [PATCH 02/53] initial refactor --- .../test-app/runner/config/rate-shipment.ts | 6 +- .../tests/rate-shipment-all-services.ts | 66 ++++++++----------- .../create-shipment-international.spec.js | 4 +- .../tests/rate-shipment-all-services.spec.js | 20 +++--- 4 files changed, 46 insertions(+), 50 deletions(-) diff --git a/src/core/test-app/runner/config/rate-shipment.ts b/src/core/test-app/runner/config/rate-shipment.ts index 1955aee..352c734 100644 --- a/src/core/test-app/runner/config/rate-shipment.ts +++ b/src/core/test-app/runner/config/rate-shipment.ts @@ -5,7 +5,7 @@ import { } from "@shipengine/integration-platform-sdk"; import { BaseTestConfigOptions } from "./base-test-config-options"; -export interface RateShipmentOptions extends BaseTestConfigOptions { +export interface RateShipmentAllServicesTestParams { deliveryServiceNames: string | string[]; shipFrom: AddressWithContactInfoPOJO; shipTo: AddressWithContactInfoPOJO; @@ -16,3 +16,7 @@ export interface RateShipmentOptions extends BaseTestConfigOptions { shipDateTime: DateTimeZonePOJO | Date | string; packagingName: string; } + +export interface RateShipmentAllServicesConfigOptions + extends RateShipmentAllServicesTestParams, + BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/tests/rate-shipment-all-services.ts b/src/core/test-app/tests/rate-shipment-all-services.ts index 704dc1c..b8689a2 100644 --- a/src/core/test-app/tests/rate-shipment-all-services.ts +++ b/src/core/test-app/tests/rate-shipment-all-services.ts @@ -10,14 +10,17 @@ import { } from "@shipengine/integration-platform-sdk"; import Suite from "../runner/suite"; import { buildAddressWithContactInfo } from "../factories/address"; -import { RateShipmentAllServicesOptions } from "../runner/config"; import { initializeTimeStamps } from '../../utils/time-stamps'; -import { getDeliveryServiceByName, findMatchingDeliveryServiceCountries } from './utils'; +import { RateShipmentAllServicesTestParams, RateShipmentAllServicesConfigOptions } from '../runner/config/rate-shipment'; +import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; +import objectToTestTitle from '../utils/object-to-test-title'; +import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; interface TestArgs { title: string; methodArgs: RateCriteriaPOJO; config: any; + testParams: RateShipmentAllServicesTestParams; } export class RateShipmentAllServices extends Suite { @@ -27,13 +30,13 @@ export class RateShipmentAllServices extends Suite { private shipFrom?: AddressWithContactInfoPOJO; private shipTo?: AddressWithContactInfoPOJO; - private setDeliveryServices(config: RateShipmentAllServicesOptions): void { + private setDeliveryServices(config: RateShipmentAllServicesConfigOptions): void { const carrierApp = this.app as CarrierApp; if (Array.isArray(config.deliveryServiceNames)) { for (let dsName of config.deliveryServiceNames) { - const ds = getDeliveryServiceByName(dsName, carrierApp); + const ds = findDeliveryServiceByName(dsName, carrierApp); if (!ds) { throw new Error( `deliveryServiceName: ${dsName} does not exist`, @@ -44,7 +47,7 @@ export class RateShipmentAllServices extends Suite { } } else if (typeof config.deliveryServiceNames === "string") { - const ds = getDeliveryServiceByName(config.deliveryServiceNames, carrierApp); + const ds = findDeliveryServiceByName(config.deliveryServiceNames, carrierApp); if (!ds) { throw new Error( `deliveryServiceName: ${config.deliveryServiceNames} does not exist`, @@ -53,17 +56,17 @@ export class RateShipmentAllServices extends Suite { this.deliveryServices = [ds]; } else if (carrierApp.deliveryServices) { - this.deliveryServices = Object.assign([],carrierApp.deliveryServices); + this.deliveryServices = Object.assign([], carrierApp.deliveryServices); } } - private setAddresses(config: RateShipmentAllServicesOptions, originCountries: Country[], destinationCountries: Country[]) { + private setAddresses(config: RateShipmentAllServicesConfigOptions, originCountries: Country[], destinationCountries: Country[]) { if (config.shipFrom) { this.shipFrom = buildAddressWithContactInfo(`${config.shipFrom.country}-from`); } else { - for(let oc of originCountries) { - if(buildAddressWithContactInfo(`${oc}-from`)) { + for (let oc of originCountries) { + if (buildAddressWithContactInfo(`${oc}-from`)) { this.shipFrom = buildAddressWithContactInfo(`${oc}-from`); } } @@ -73,15 +76,15 @@ export class RateShipmentAllServices extends Suite { this.shipTo = buildAddressWithContactInfo(`${config.shipTo.country}-from`); } else { - for(let dc of destinationCountries) { - if(buildAddressWithContactInfo(`${dc}-from`)) { + for (let dc of destinationCountries) { + if (buildAddressWithContactInfo(`${dc}-from`)) { this.shipTo = buildAddressWithContactInfo(`${dc}-from`); } } } } - buildTestArg(config: RateShipmentAllServicesOptions): TestArgs | undefined { + buildTestArg(config: RateShipmentAllServicesConfigOptions): TestArgs | undefined { this.setDeliveryServices(config); if (!this.deliveryServices) return undefined; @@ -94,7 +97,7 @@ export class RateShipmentAllServices extends Suite { const { tomorrow } = initializeTimeStamps(this.shipFrom.timeZone); - const defaults: RateShipmentAllServicesOptions = { + const defaults: RateShipmentAllServicesTestParams = { deliveryServiceNames: this.deliveryServices.map(ds => ds.name), shipDateTime: tomorrow, shipFrom: this.shipFrom, @@ -106,16 +109,9 @@ export class RateShipmentAllServices extends Suite { packagingName: this.deliveryServices[0].packaging[0].name }; - const whiteListKeys = Object.keys(defaults); - - // This code is filtering any keys in the config that are not white listed - // and merging the values with the defaults above - const testParams = Object.keys(config) - .filter((key) => whiteListKeys.includes(key)) - .reduce((obj, key: string) => { - Reflect.set(obj, key, Reflect.get(config, key)); - return obj; - }, defaults); + const testParams = reduceDefaultsWithConfig< + RateShipmentAllServicesTestParams + >(defaults, config); const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { packaging: [{ @@ -128,32 +124,26 @@ export class RateShipmentAllServices extends Suite { }; let RateCriteriaPOJO: RateCriteriaPOJO = { - deliveryServices: this.deliveryServices.map((ds) => { return {id: ds.id} }), + deliveryServices: this.deliveryServices.map((ds) => { return { id: ds.id } }), shipFrom: testParams.shipFrom, shipTo: testParams.shipTo!, shipDateTime: testParams.shipDateTime, packages: [packageRateCriteriaPOJO] }; - const title = config.expectedErrorMessage - ? `it raises an error when retrieving rates with ${Object.keys( + ? `it raises an error when creating a new international shipment with ${objectToTestTitle( + testParams, + )}` + : `it creates a new international shipment with ${objectToTestTitle( testParams, - ) - .map(function (k: any) { - return parseTitle(testParams, k); - }) - .join(", ")}` - : `it retrieves rates with ${Object.keys(testParams) - .map(function (k: any) { - return parseTitle(testParams, k); - }) - .join(", ")}`; + )}`; return { title, methodArgs: RateCriteriaPOJO, - config + config, + testParams }; } @@ -222,7 +212,7 @@ function parseTitle(testParams: RateShipmentAllServicesOptions, key: any): strin return `${key}: ${address.country}`; } - if(key === "weight") { + if (key === "weight") { const weight = Reflect.get(testParams, key) as { unit: WeightUnit, value: number } return `weightValue: ${weight.value}, weightUnit: ${weight.unit}`; } diff --git a/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js b/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js index d7fa41a..45801bc 100644 --- a/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js +++ b/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js @@ -277,7 +277,7 @@ describe("The create shipment international test suite", () => { afterEach(() => { CarrierApp.prototype.createShipment.restore(); - }) + }); }); @@ -305,7 +305,7 @@ describe("The create shipment international test suite", () => { afterEach(() => { CarrierApp.prototype.createShipment.restore(); - }) + }); }); }); diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js index d5cb6cb..d61e914 100644 --- a/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js +++ b/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js @@ -1,3 +1,5 @@ +"use strict"; + const { RateShipmentAllServices } = require("../../../../../../lib/core/test-app/tests/rate-shipment-all-services"); const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); const pojo = require("../../../../utils/pojo"); @@ -34,7 +36,7 @@ describe("The create shipment domestic test suite", () => { const tests = testSuite.tests(); expect(tests.length).to.equal(0); }); - }) + }); describe("when there is a domestic service with an available address", () => { @@ -68,7 +70,7 @@ describe("The create shipment domestic test suite", () => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.createShipment_domestic = { + staticConfigTests.rateShipment_allServices = { weight: { value: 200 }, @@ -92,7 +94,7 @@ describe("The create shipment domestic test suite", () => { beforeEach(() => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.createShipment_domestic = + staticConfigTests.rateShipment_allServices = [ { weight: { @@ -131,7 +133,7 @@ describe("The create shipment domestic test suite", () => { it("should throw an error", () => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.createShipment_domestic = { + staticConfigTests.rateShipment_allServices = { deliveryServiceName: "asdf" } @@ -139,7 +141,7 @@ describe("The create shipment domestic test suite", () => { const testSuite = new RateShipmentAllServices(args); try { - const tests = testSuite.tests(); + testSuite.tests(); expect(true).to.equal(false); } catch (error) { @@ -163,7 +165,7 @@ describe("The create shipment domestic test suite", () => { packaging: [pojo.packaging()] }); - staticConfigTests.createShipment_domestic = { + staticConfigTests.rateShipment_allServices = { deliveryServiceName: "Better Delivery Service" } @@ -183,7 +185,7 @@ describe("The create shipment domestic test suite", () => { const app = new CarrierApp(appDefinition); - staticConfigTests.createShipment_domestic = { + staticConfigTests.rateShipment_allServices = { shipFrom: { company: "Domestic Route #1", addressLines: ["123 New Street"], @@ -211,7 +213,7 @@ describe("The create shipment domestic test suite", () => { expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.createShipment_domestic.shipTo); + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_allServices.shipTo); expect(tests[0].title).to.include("shipFrom: US"); expect(tests[0].title).to.include("shipTo: US"); @@ -265,7 +267,7 @@ function generateBasicAppAndConfigs() { }; const staticConfigTests = { - createShipment_domestic: {} + rateShipment_allServices: {} }; const connectArgs = {}; From f4af6aab7e1ab31ce423c6e6a90e275724d73612 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 22 Jul 2020 11:58:48 -0500 Subject: [PATCH 03/53] initial file checkin --- .../config/rate-shipment-all-services.ts | 21 +++++++++ ...matching-delivery-services-by-countries.ts | 46 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/core/test-app/runner/config/rate-shipment-all-services.ts create mode 100644 src/core/test-app/utils/find-matching-delivery-services-by-countries.ts diff --git a/src/core/test-app/runner/config/rate-shipment-all-services.ts b/src/core/test-app/runner/config/rate-shipment-all-services.ts new file mode 100644 index 0000000..dfc8d0b --- /dev/null +++ b/src/core/test-app/runner/config/rate-shipment-all-services.ts @@ -0,0 +1,21 @@ +import { + DateTimeZonePOJO, + AddressWithContactInfoPOJO, + WeightUnit, +} from "@shipengine/integration-platform-sdk"; +import { BaseTestConfigOptions } from "./base-test-config-options"; + +export interface RateShipmentAllServicesTestParams { + shipFrom: AddressWithContactInfoPOJO; + shipTo: AddressWithContactInfoPOJO; + weight: { + value: number; + unit: WeightUnit; + }; + shipDateTime: DateTimeZonePOJO | Date | string; + packagingName: string; +} + +export interface RateShipmentAllServicesConfigOptions + extends RateShipmentAllServicesTestParams, + BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts new file mode 100644 index 0000000..1290808 --- /dev/null +++ b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts @@ -0,0 +1,46 @@ +import { Country } from "@shipengine/integration-platform-sdk"; +import { CarrierApp } from "@shipengine/integration-platform-sdk"; + +/** + * Find the shared origin and destination countries from an array of delivery services + */ +export function findMatchingDeliveryServicesByCountries(app: CarrierApp) + : { originCountries: Country[]; destinationCountries: Country[] } { + + const deliveryServices = app.deliveryServices; + + const sharedOriginCountries = deliveryServices.reduce((acc, currentDS) => { + + const filteredArray = []; + + for (let country of acc) { + if (currentDS.originCountries.includes(country)) { + filteredArray.push(country); + } + } + + return filteredArray; + + }, deliveryServices[0].originCountries); + + const sharedDestinationCountries = deliveryServices.reduce((acc, currentDS) => { + + const filteredArray = []; + + for (let country of acc) { + if (currentDS.destinationCountries.includes(country)) { + filteredArray.push(country); + } + } + + return filteredArray; + + }, deliveryServices[0].destinationCountries); + + if (sharedOriginCountries.length > 0 && sharedDestinationCountries.length > 0) { + + return { originCountries: Object.assign([], sharedOriginCountries), destinationCountries: Object.assign([], sharedDestinationCountries) }; + } + + throw new Error("Specified delivery services do not share origin and destination countries"); +} From 781c6e9e31898dfeaf307f969c17999523a625f8 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Fri, 24 Jul 2020 14:48:53 -0500 Subject: [PATCH 04/53] initial commit --- src/core/test-app.ts | 10 +- src/core/test-app/runner/config.ts | 4 + ...> rate-shipment-with-multiple-services.ts} | 7 +- .../test-app/runner/config/rate-shipment.ts | 22 -- src/core/test-app/tests/index.ts | 4 +- .../tests/rate-shipment-all-services.ts | 221 ----------- .../rate-shipment-with-multiple-services.ts | 191 ++++++++++ ...matching-delivery-services-by-countries.ts | 9 +- .../test-app/utils/object-to-test-title.ts | 8 + .../create-shipment-international.spec.js | 2 +- .../tests/rate-shipment-all-services.spec.js | 276 -------------- ...te-shipment-with-multiple-services.spec.js | 356 ++++++++++++++++++ ...ing-delivery-services-by-countries.spec.js | 96 +++++ 13 files changed, 675 insertions(+), 531 deletions(-) rename src/core/test-app/runner/config/{rate-shipment-all-services.ts => rate-shipment-with-multiple-services.ts} (66%) delete mode 100644 src/core/test-app/runner/config/rate-shipment.ts delete mode 100644 src/core/test-app/tests/rate-shipment-all-services.ts create mode 100644 src/core/test-app/tests/rate-shipment-with-multiple-services.ts delete mode 100644 test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js create mode 100644 test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js create mode 100644 test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js diff --git a/src/core/test-app.ts b/src/core/test-app.ts index dd939f2..d01d593 100644 --- a/src/core/test-app.ts +++ b/src/core/test-app.ts @@ -1,7 +1,13 @@ import Config from "./test-app/runner/config"; import Runner from "./test-app/runner"; import loadAndValidateApp from "./load-and-validate-app"; -import { CreateShipmentInternational, CreateShipmentDomestic, CreateShipmentMultiPackage, CreateShipmentWithInsurance } from "./test-app/tests"; +import { + CreateShipmentInternational, + CreateShipmentDomestic, + CreateShipmentMultiPackage, + CreateShipmentWithInsurance, + RateShipmentWithMultipleServices +} from "./test-app/tests"; import { SdkApp } from "./types"; import { TestResults, useTestResults } from "./test-app/runner/test-results"; import { loadAndValidateConfig } from "./test-app/runner/load-and-validate-config"; @@ -139,7 +145,7 @@ function registerTestSuiteModules(app: SdkApp): RegisteredTestSuiteModules { CreateShipmentMultiPackage, CreateShipmentWithInsurance ], - // rateShipment: [RateShipmentTestSuite], + rateShipment: [RateShipmentWithMultipleServices], // schedulePickup: [SchedulePickupTestSuite], // trackShipment: [TrackShipmentTestSuite], }; diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index e2326a1..6fa041f 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -2,6 +2,7 @@ import { CreateShipmentInternationalConfigOptions } from "./config/create-shipme import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-domestic"; import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; +import { RateShipmentWithMultipleServicesConfigOptions } from './config/rate-shipment-with-multiple-services'; export interface TestsConfig { // cancelPickups?: (TestOptions & TestOptions) | [TestOptions]; @@ -16,6 +17,9 @@ export interface TestsConfig { createShipment_multi_package?: CreateShipmentMultiPackageConfigOptions | [CreateShipmentMultiPackageConfigOptions]; createShipment_with_insurance?: CreateShipmentWithInsuranceConfigOptions | [CreateShipmentWithInsuranceConfigOptions]; // rateShipment?: RateShipmentOptions | [RateShipmentOptions]; + + // createShipment_multi_package?: TestOptions | [TestOptions]; + rateShipmentWithMultipleServices?: RateShipmentWithMultipleServicesConfigOptions | [RateShipmentWithMultipleServicesConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; // trackShipment?: TestOptions | [TestOptions]; } diff --git a/src/core/test-app/runner/config/rate-shipment-all-services.ts b/src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts similarity index 66% rename from src/core/test-app/runner/config/rate-shipment-all-services.ts rename to src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts index dfc8d0b..29f3260 100644 --- a/src/core/test-app/runner/config/rate-shipment-all-services.ts +++ b/src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts @@ -5,7 +5,8 @@ import { } from "@shipengine/integration-platform-sdk"; import { BaseTestConfigOptions } from "./base-test-config-options"; -export interface RateShipmentAllServicesTestParams { +export interface RateShipmentWithMultipleServicesTestParams { + deliveryServiceNames: string[]; shipFrom: AddressWithContactInfoPOJO; shipTo: AddressWithContactInfoPOJO; weight: { @@ -16,6 +17,6 @@ export interface RateShipmentAllServicesTestParams { packagingName: string; } -export interface RateShipmentAllServicesConfigOptions - extends RateShipmentAllServicesTestParams, +export interface RateShipmentWithMultipleServicesConfigOptions + extends RateShipmentWithMultipleServicesTestParams, BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/runner/config/rate-shipment.ts b/src/core/test-app/runner/config/rate-shipment.ts deleted file mode 100644 index 352c734..0000000 --- a/src/core/test-app/runner/config/rate-shipment.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - DateTimeZonePOJO, - AddressWithContactInfoPOJO, - WeightUnit, -} from "@shipengine/integration-platform-sdk"; -import { BaseTestConfigOptions } from "./base-test-config-options"; - -export interface RateShipmentAllServicesTestParams { - deliveryServiceNames: string | string[]; - shipFrom: AddressWithContactInfoPOJO; - shipTo: AddressWithContactInfoPOJO; - weight: { - value: number; - unit: WeightUnit; - }; - shipDateTime: DateTimeZonePOJO | Date | string; - packagingName: string; -} - -export interface RateShipmentAllServicesConfigOptions - extends RateShipmentAllServicesTestParams, - BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index 0b01059..e7aba6d 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -2,7 +2,7 @@ // export * from "./cancel-shipments-test-suite"; // export * from "./create-manifest-test-suite"; export * from "./create-shipment-domestic"; -export * from "./rate-shipment-all-services"; +export * from "./rate-shipment-with-multiple-services"; // export * from "./create-shipment-domestic"; export * from "./create-shipment-multipackage"; export * from "./create-shipment-with-insurance"; @@ -10,7 +10,7 @@ export * from "./create-shipment-international"; // export * from "./get-sales-order-test-suite"; // export * from "./get-sales-orders-by-date-test-suite"; // export * from "./get-seller-test-suite"; -// export * from "./rate-shipment-test-suite"; +export * from "./rate-shipment-with-multiple-services"; // export * from "./schedule-pickup-test-suite"; // export * from "./shipment-cancelled-test-suite"; // export * from "./shipment-created-test-suite"; diff --git a/src/core/test-app/tests/rate-shipment-all-services.ts b/src/core/test-app/tests/rate-shipment-all-services.ts deleted file mode 100644 index b8689a2..0000000 --- a/src/core/test-app/tests/rate-shipment-all-services.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { - CarrierApp, - Address, - DeliveryService, - RateCriteriaPOJO, - WeightUnit, - Country, - PackageRateCriteriaPOJO, - AddressWithContactInfoPOJO, -} from "@shipengine/integration-platform-sdk"; -import Suite from "../runner/suite"; -import { buildAddressWithContactInfo } from "../factories/address"; -import { initializeTimeStamps } from '../../utils/time-stamps'; -import { RateShipmentAllServicesTestParams, RateShipmentAllServicesConfigOptions } from '../runner/config/rate-shipment'; -import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; -import objectToTestTitle from '../utils/object-to-test-title'; -import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; - -interface TestArgs { - title: string; - methodArgs: RateCriteriaPOJO; - config: any; - testParams: RateShipmentAllServicesTestParams; -} - -export class RateShipmentAllServices extends Suite { - title = "rateShipment_allServices"; - - private deliveryServices?: DeliveryService[] = []; - private shipFrom?: AddressWithContactInfoPOJO; - private shipTo?: AddressWithContactInfoPOJO; - - private setDeliveryServices(config: RateShipmentAllServicesConfigOptions): void { - const carrierApp = this.app as CarrierApp; - - if (Array.isArray(config.deliveryServiceNames)) { - - for (let dsName of config.deliveryServiceNames) { - const ds = findDeliveryServiceByName(dsName, carrierApp); - if (!ds) { - throw new Error( - `deliveryServiceName: ${dsName} does not exist`, - ); - } - this.deliveryServices?.push(ds); - return; - } - } - else if (typeof config.deliveryServiceNames === "string") { - const ds = findDeliveryServiceByName(config.deliveryServiceNames, carrierApp); - if (!ds) { - throw new Error( - `deliveryServiceName: ${config.deliveryServiceNames} does not exist`, - ); - } - this.deliveryServices = [ds]; - } - else if (carrierApp.deliveryServices) { - this.deliveryServices = Object.assign([], carrierApp.deliveryServices); - } - } - - private setAddresses(config: RateShipmentAllServicesConfigOptions, originCountries: Country[], destinationCountries: Country[]) { - if (config.shipFrom) { - this.shipFrom = buildAddressWithContactInfo(`${config.shipFrom.country}-from`); - } - else { - for (let oc of originCountries) { - if (buildAddressWithContactInfo(`${oc}-from`)) { - this.shipFrom = buildAddressWithContactInfo(`${oc}-from`); - } - } - } - - if (config.shipTo) { - this.shipTo = buildAddressWithContactInfo(`${config.shipTo.country}-from`); - } - else { - for (let dc of destinationCountries) { - if (buildAddressWithContactInfo(`${dc}-from`)) { - this.shipTo = buildAddressWithContactInfo(`${dc}-from`); - } - } - } - } - - buildTestArg(config: RateShipmentAllServicesConfigOptions): TestArgs | undefined { - this.setDeliveryServices(config); - - if (!this.deliveryServices) return undefined; - - const results = findMatchingDeliveryServiceCountries(this.deliveryServices); - - this.setAddresses(config, results.originCountries, results.destinationCountries); - - if (!this.shipTo || !this.shipFrom) return undefined; - - const { tomorrow } = initializeTimeStamps(this.shipFrom.timeZone); - - const defaults: RateShipmentAllServicesTestParams = { - deliveryServiceNames: this.deliveryServices.map(ds => ds.name), - shipDateTime: tomorrow, - shipFrom: this.shipFrom, - shipTo: this.shipTo, - weight: { - unit: WeightUnit.Pounds, - value: 50.0 - }, - packagingName: this.deliveryServices[0].packaging[0].name - }; - - const testParams = reduceDefaultsWithConfig< - RateShipmentAllServicesTestParams - >(defaults, config); - - const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { - packaging: [{ - id: this.deliveryServices[0].packaging[0].id, - }], - weight: { - value: testParams.weight.value, - unit: testParams.weight.unit, - } - }; - - let RateCriteriaPOJO: RateCriteriaPOJO = { - deliveryServices: this.deliveryServices.map((ds) => { return { id: ds.id } }), - shipFrom: testParams.shipFrom, - shipTo: testParams.shipTo!, - shipDateTime: testParams.shipDateTime, - packages: [packageRateCriteriaPOJO] - }; - - const title = config.expectedErrorMessage - ? `it raises an error when creating a new international shipment with ${objectToTestTitle( - testParams, - )}` - : `it creates a new international shipment with ${objectToTestTitle( - testParams, - )}`; - - return { - title, - methodArgs: RateCriteriaPOJO, - config, - testParams - }; - } - - buildTestArgs(): Array { - if (Array.isArray(this.config)) { - return this.config.map((config: RateShipmentAllServicesOptions) => { - return this.buildTestArg(config); - }); - } else { - const config = this.config as RateShipmentAllServicesOptions; - - return [this.buildTestArg(config)]; - } - } - - tests() { - const testArgs = this.buildTestArgs().filter(args => args !== undefined); - - if (testArgs.length === 0) { - return []; - } - return testArgs.map((testArg) => { - return this.test( - testArg!.title, - testArg!.methodArgs, - testArg!.config, - async () => { - const carrierApp = this.app as CarrierApp; - - const transaction = await this.transaction(testArg!.config); - - carrierApp.rateShipment! && - (await carrierApp.rateShipment!(transaction, testArg!.methodArgs)); - }, - ); - }); - } -} - -type DomesticDeliveryService = Array<{ deliveryService: DeliveryService, domesticCountries: Country[] }>; - -function findDomesticDeliveryService(deliveryServices: DeliveryService[]): DomesticDeliveryService { - - const domesticDS: DomesticDeliveryService = []; - - for (let ds of deliveryServices) { - const domesticCountries = []; - for (let country of ds.originCountries) { - if (ds.destinationCountries.includes(country)) { - domesticCountries.push(country); - } - } - - if (domesticCountries.length > 0) { - domesticDS.push({ deliveryService: ds, domesticCountries }) - } - } - - return domesticDS; -} - -function parseTitle(testParams: RateShipmentAllServicesOptions, key: any): string { - - if (key === "shipFrom" || key === "shipTo") { - const address = Reflect.get(testParams, key) as Address; - return `${key}: ${address.country}`; - } - - if (key === "weight") { - const weight = Reflect.get(testParams, key) as { unit: WeightUnit, value: number } - return `weightValue: ${weight.value}, weightUnit: ${weight.unit}`; - } - - return `${key}: ${Reflect.get(testParams, key)}` -} \ No newline at end of file diff --git a/src/core/test-app/tests/rate-shipment-with-multiple-services.ts b/src/core/test-app/tests/rate-shipment-with-multiple-services.ts new file mode 100644 index 0000000..48a04fd --- /dev/null +++ b/src/core/test-app/tests/rate-shipment-with-multiple-services.ts @@ -0,0 +1,191 @@ +import { + CarrierApp, + DeliveryService, + RateCriteriaPOJO, + WeightUnit, + PackageRateCriteriaPOJO, +} from "@shipengine/integration-platform-sdk"; +import Suite from "../runner/suite"; +import { initializeTimeStamps } from "../../utils/time-stamps"; +import { RateShipmentWithMultipleServicesTestParams, RateShipmentWithMultipleServicesConfigOptions } from "../runner/config/rate-shipment-with-multiple-services"; +import reduceDefaultsWithConfig from "../utils/reduce-defaults-with-config"; +import objectToTestTitle from "../utils/object-to-test-title"; +import { findMatchingDeliveryServicesByCountries } from "../utils/find-matching-delivery-services-by-countries"; +import useShipmentAddresses from '../utils/use-shipment-addresses'; +import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; + +interface TestArgs { + title: string; + methodArgs: RateCriteriaPOJO; + config: any; + testParams: RateShipmentWithMultipleServicesTestParams; +} + +export class RateShipmentWithMultipleServices extends Suite { + title = "rateShipment_with_multiple_services"; + + private deliveryServices: DeliveryService[] = []; + + private setDeliveryServices(config: RateShipmentWithMultipleServicesConfigOptions): void { + const carrierApp = this.app as CarrierApp; + + if (config.deliveryServiceNames && config.deliveryServiceNames.length > 0) { + if (config.deliveryServiceNames.length === 1) { + throw new Error("You must specify more than one delivery service"); + } + + const deliveryServices = config.deliveryServiceNames.map(name => findDeliveryServiceByName(name, carrierApp)); + try { + findMatchingDeliveryServicesByCountries(deliveryServices); + } + catch { + throw new Error("Configured delivery services must share origin and destination countries for correct rate generation"); + } + + this.deliveryServices = deliveryServices; + } + + else if (carrierApp.deliveryServices) { + // Loop through all delivery services and then subsets until a set of shared countries are found. + // This is a very simple and naive approach that can be expanded upon later if needed. + const dsCopy = Object.assign([], carrierApp.deliveryServices); + let results; + try { + results = findMatchingDeliveryServicesByCountries(dsCopy); + } catch { + results = undefined; + } + + while (!results && dsCopy.length > 1) { + // Remove a delivery service and check if the new array shares a set of countries + dsCopy.pop(); + try { + results = findMatchingDeliveryServicesByCountries(dsCopy); + } catch { + results = undefined; + } + } + + if (results) { + this.deliveryServices = dsCopy; + } + } + } + + buildTestArg(config: RateShipmentWithMultipleServicesConfigOptions): TestArgs | undefined { + const carrierApp = this.app as CarrierApp; + if (carrierApp.deliveryServices.length < 2) return undefined; + this.setDeliveryServices(config); + + if (this.deliveryServices.length === 0) return undefined; + const [shipFrom, shipTo] = useShipmentAddresses(this.deliveryServices[0]); + + if (!shipTo || !shipFrom) return undefined; + + const { tomorrow } = initializeTimeStamps(shipFrom.timeZone); + + const defaults: RateShipmentWithMultipleServicesTestParams = { + deliveryServiceNames: this.deliveryServices.map(ds => ds.name), + shipDateTime: tomorrow, + shipFrom: shipFrom, + shipTo: shipTo, + weight: { + unit: WeightUnit.Pounds, + value: 50.0 + }, + packagingName: this.deliveryServices[0].packaging[0].name + }; + + const testParams = reduceDefaultsWithConfig< + RateShipmentWithMultipleServicesTestParams + >(defaults, config); + + const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { + packaging: [{ + id: this.deliveryServices[0].packaging[0].id, + }], + weight: { + value: testParams.weight.value, + unit: testParams.weight.unit, + } + }; + + let RateCriteriaPOJO: RateCriteriaPOJO = { + deliveryServices: testParams.deliveryServiceNames.map(name => findDeliveryServiceByName(name, carrierApp)), + shipFrom: testParams.shipFrom, + shipTo: testParams.shipTo!, + shipDateTime: testParams.shipDateTime, + packages: [packageRateCriteriaPOJO] + }; + + const title = config.expectedErrorMessage + ? `it raises an error when creating a new shipment rate with multiple services with ${objectToTestTitle( + testParams, + )}` + : `it creates a new shipment rate with multiple services with ${objectToTestTitle( + testParams, + )}`; + + return { + title, + methodArgs: RateCriteriaPOJO, + config, + testParams + }; + } + + buildTestArgs(): Array { + if (Array.isArray(this.config)) { + return this.config.map((config: RateShipmentWithMultipleServicesConfigOptions) => { + return this.buildTestArg(config); + }); + } else { + const config = this.config as RateShipmentWithMultipleServicesConfigOptions; + + return [this.buildTestArg(config)]; + } + } + + tests() { + const testArgs = this.buildTestArgs().filter(args => args !== undefined) as TestArgs[]; + + if (testArgs.length === 0) { + return []; + } + return testArgs.map((testArg) => { + return this.test( + testArg.title, + testArg.methodArgs, + testArg.config, + async () => { + const carrierApp = this.app as CarrierApp; + + const transaction = await this.transaction(testArg.config); + + // This should never actually throw because we handle this case up stream. + if (!carrierApp.rateShipment) { + throw new Error("rateShipment is not implemented"); + } + + const rates = await carrierApp.rateShipment!(transaction, testArg!.methodArgs); + + //Check that all delivery services that were passed in are included in the response + for (let ds of testArg.methodArgs.deliveryServices!) { + if(!rates.find(rate=> rate.deliveryService.id === ds.id)) { + const missingDS = carrierApp.deliveryServices.find(service => service.id === ds.id); + + throw new Error(`Rate for delivery service '${missingDS!.name}' is missing from the response`); + } + } + + for(let rate of rates) { + //Check is fullfillment service should be set + if(rate.deliveryService.fulfillmentService && !rate.fulfillmentService) { + throw new Error(`Fulfillment Service is not set for '${rate.deliveryService.name}' rate`); + } + } + }, + ); + }); + } +} diff --git a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts index 1290808..47ffaab 100644 --- a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts +++ b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts @@ -1,13 +1,14 @@ -import { Country } from "@shipengine/integration-platform-sdk"; -import { CarrierApp } from "@shipengine/integration-platform-sdk"; +import { Country, DeliveryService } from "@shipengine/integration-platform-sdk"; /** * Find the shared origin and destination countries from an array of delivery services */ -export function findMatchingDeliveryServicesByCountries(app: CarrierApp) +export function findMatchingDeliveryServicesByCountries(deliveryServices: DeliveryService[]) : { originCountries: Country[]; destinationCountries: Country[] } { - const deliveryServices = app.deliveryServices; + if(deliveryServices.length < 2) { + throw new Error("Multiple Delivery Services must be specified"); + } const sharedOriginCountries = deliveryServices.reduce((acc, currentDS) => { diff --git a/src/core/test-app/utils/object-to-test-title.ts b/src/core/test-app/utils/object-to-test-title.ts index 671b429..89e8d8e 100644 --- a/src/core/test-app/utils/object-to-test-title.ts +++ b/src/core/test-app/utils/object-to-test-title.ts @@ -10,6 +10,14 @@ function formatTitleParameter(key: string, value: any) { return value.country; case "packages": return `${value.length}`; + + case "deliveryServiceNames": + if (Array.isArray(value)) { + return `${value.join(", ")}`; + } + + return `${value}`; + case "packageInsuredValue": return `${value.value} ${value.currency}`; default: diff --git a/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js b/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js index 45801bc..abea7f2 100644 --- a/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js +++ b/test/specs/core/test-app/runner/tests/create-shipment-international.spec.js @@ -250,7 +250,7 @@ describe("The create shipment international test suite", () => { afterEach(() => { CarrierApp.prototype.createShipment.restore(); - }) + }); }); describe("When a deliveryService fulfillment property is set", () => { diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js deleted file mode 100644 index d61e914..0000000 --- a/test/specs/core/test-app/runner/tests/rate-shipment-all-services.spec.js +++ /dev/null @@ -1,276 +0,0 @@ -"use strict"; - -const { RateShipmentAllServices } = require("../../../../../../lib/core/test-app/tests/rate-shipment-all-services"); -const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); -const pojo = require("../../../../utils/pojo"); -const { expect } = require("chai"); - -describe("The create shipment domestic test suite", () => { - - describe("when there is no delivery service", () => { - - it("should not generate tests", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[0].originCountries = ["MX"] - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - - const tests = testSuite.tests(); - expect(tests.length).to.equal(0); - }); - }); - - - describe("when there is no address available for a delivery service", () => { - it("should not generate tests", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[0].originCountries = ["AQ"] - appDefinition.deliveryServices[0].destinationCountries = ["AQ"] - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - - const tests = testSuite.tests(); - expect(tests.length).to.equal(0); - }); - }); - - describe("when there is a domestic service with an available address", () => { - - let testSuite; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - - testSuite = new RateShipmentAllServices(args); - }); - - it("should generate a test", () => { - const tests = testSuite.tests(); - expect(tests.length).to.equal(1); - }); - - it("the test params should be reflected in the title", () => { - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("labelFormat: pdf"); - expect(tests[0].title).to.include("labelSize: A4"); - expect(tests[0].title).to.include("weightUnit: lb"); - expect(tests[0].title).to.include("weightValue: 50"); - }); - }); - - describe.skip("when there is a config override object of test suite parameters", () => { - - it("should update the test title", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment_allServices = { - weight: { - value: 200 - }, - labelFormat: "png" - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("labelFormat: png"); - expect(tests[0].title).to.include("labelSize: A4"); - expect(tests[0].title).to.include("weightUnit: lb"); - expect(tests[0].title).to.include("weightValue: 200"); - }); - }); - - describe.skip("when there is a config override array of test suite parameters", () => { - - let tests; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_allServices = - [ - { - weight: { - value: 200 - }, - labelFormat: "png" - }, - { - weight: { - value: 22 - }, - labelSize: "A6" - } - ]; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - tests = testSuite.tests(); - }); - - - it("should generate additional tests", () => { - expect(tests.length).to.equal(2); - }); - - it("should update the test titles", () => { - expect(tests[0].title).to.include("weightValue: 200"); - expect(tests[0].title).to.include("labelFormat: png"); - - expect(tests[1].title).to.include("weightValue: 22"); - expect(tests[1].title).to.include("labelSize: A6"); - }); - }); - - describe("When a user configs a delivery service that does not exist", () => { - it("should throw an error", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_allServices = { - deliveryServiceName: "asdf" - } - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - - try { - testSuite.tests(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).to.include("deliveryServiceName: asdf does not exist"); - } - }); - }); - - describe("When a user configs a new delivery service", () => { - it("should update the title params to reflect the new properties", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices.push({ - id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", - name: "Better Delivery Service", - class: "ground", - grade: "standard", - originCountries: ["MX"], - destinationCountries: ["MX"], - labelFormats: ["pdf"], - labelSizes: ["A4"], - packaging: [pojo.packaging()] - }); - - staticConfigTests.rateShipment_allServices = { - deliveryServiceName: "Better Delivery Service" - } - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); - expect(tests[0].title).to.include("labelFormat: pdf"); - }); - }); - - describe("When a user configures a Ship To and Ship From address", () => { - it("should update the test arguments and titles", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment_allServices = { - shipFrom: { - company: "Domestic Route #1", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - }, - shipTo: { - company: "Domestic Route #2", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - } - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentAllServices(args); - const tests = testSuite.tests(); - - expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); - expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - - expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_allServices.shipTo); - - expect(tests[0].title).to.include("shipFrom: US"); - expect(tests[0].title).to.include("shipTo: US"); - - }); - }); - - describe("When the input parameters do not match the return shipment", () => { - - it("should throw an error for a shipFrom mismatch"); - it("should throw an error for a shipTo mismatch"); - it("should throw an error for a deliveryService mismatch"); - it("should throw an error for a packaging mismatch"); - it("should throw an error for a weight mismatch"); - it("should throw an error for a dimensions mismatch"); - - }); - - describe("When a deliveryService fulfillment property is set", () => { - - it("should throw an error if the response does not match it") - }); - - describe("When a delivery service 'isTrackable' property is set", () => { - it("") - }) - -}); - -function generateBasicAppAndConfigs() { - const appDefinition = pojo.carrierApp(); - const deliveryService = pojo.deliveryService(); - deliveryService.labelFormats = ["pdf"]; - deliveryService.labelSizes = ["A4"]; - deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; - appDefinition.deliveryServices = [deliveryService]; - - const options = { - cli: { - debug: false, - }, - staticRootConfig: { - debug: false - }, - defaults: { - debug: false - }, - failFast: false, - retries: undefined, - timeout: undefined - }; - - const staticConfigTests = { - rateShipment_allServices: {} - }; - - const connectArgs = {}; - - return { appDefinition, connectArgs, staticConfigTests, options }; -} \ No newline at end of file diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js new file mode 100644 index 0000000..42d2589 --- /dev/null +++ b/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js @@ -0,0 +1,356 @@ +"use strict"; + +const { RateShipmentWithMultipleServices } = require("../../../../../../lib/core/test-app/tests/rate-shipment-with-multiple-services"); +const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../../utils/pojo"); +const { expect } = require("chai"); +const sinon = require("sinon"); + +describe("The rate shipment with multiple services test suite", () => { + + describe("when there are less than 2 delivery service definitions", () => { + + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.pop(); + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + + describe("when there is no shared address between the delivery services", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["MX"]; + appDefinition.deliveryServices[0].destinationCountries = ["MX"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + describe("when there are multiple delivery services with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new RateShipmentWithMultipleServices(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 50lb"); + expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); + + }); + }); + + describe("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment_with_multiple_services = { + weight: { + value: 200, + unit: "lb" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); + }); + }); + + describe("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment_with_multiple_services = + [ + { + weight: { + value: 200, + unit: "lb" + } + }, + { + weight: { + value: 22, + unit: "lb" + } + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); + + expect(tests[1].title).to.include("weight: 22lb"); + expect(tests[1].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); + + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment_with_multiple_services = { + deliveryServiceNames: ["asdf", "iewojasdf"] + } + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); + } + }); + }); + + describe("When a user configures delivery services that do no share an origin and destination country", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Another Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["CA"], + destinationCountries: ["CA"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment_with_multiple_services = { + deliveryServiceNames: ["Dummy Delivery Service", "Another Delivery Service"] + } + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("Configured delivery services must share origin and destination countries for correct rate generation"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.rateShipment_with_multiple_services = { + deliveryServiceNames: ["Better Delivery Service", "Dummy Delivery Service"] + } + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceNames: Better Delivery Service, Dummy Delivery Service"); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment_with_multiple_services = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_with_multiple_services.shipTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("shipTo: US"); + + }); + }); + + describe("When delivery services in the request are missing in the response", () => { + it("should throw an error", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const rate1 = pojo.rate(); + const rateResponse = [rate1]; + sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); + const app = new CarrierApp(appDefinition); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("Rate for delivery service 'Better Delivery Service' is missing from the response"); + } + }); + + afterEach(() => { + CarrierApp.prototype.rateShipment.restore(); + }); + }); + + describe("When a deliveryService fulfillment property is set", () => { + it("should throw an error if the response does not match it", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[1].fulfillmentService = "dhl_economy_select"; + + const rate1 = pojo.rate(); + const rate2 = pojo.rate(); + rate1.deliveryService = appDefinition.deliveryServices[0]; + + rate2.deliveryService = appDefinition.deliveryServices[1]; + + const app = new CarrierApp(appDefinition); + const rateResponse = [rate1, rate2]; + sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithMultipleServices(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("Fulfillment Service is not set for 'Better Delivery Service' rate"); + } + }); + }); + +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.labelFormats = ["pdf"]; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + appDefinition.deliveryServices = [deliveryService]; + appDefinition.rateShipment = () => { }; + + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["US"], + destinationCountries: ["US"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + rateShipment_with_multiple_services: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} \ No newline at end of file diff --git a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js new file mode 100644 index 0000000..ee97ba2 --- /dev/null +++ b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js @@ -0,0 +1,96 @@ +"use strict"; + +const { expect } = require("chai"); +const pojo = require("../../../utils/pojo"); +const { findMatchingDeliveryServicesByCountries } = require("../../../../../lib/core/test-app/utils/find-matching-delivery-services-by-countries"); +const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); + +describe("findMatchingDeliveryServicesByCountries", () => { + it("returns a set of origin and destination countries that all given delivery services share", () => { + + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + appDefinition.deliveryServices = [deliveryService]; + + appDefinition.deliveryServices[0].originCountries = ["US", "MX", "CA"]; + appDefinition.deliveryServices[0].destinationCountries = ["US", "MX", "CA"]; + + appDefinition.deliveryServices.push({ + id: "9df1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Another Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["US", "MX", "CA"], + destinationCountries: ["US", "MX", "CA"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["US", "MX"], + destinationCountries: ["US", "MX"], + packaging: [pojo.packaging()] + }); + + const app = new CarrierApp(appDefinition); + + const results = findMatchingDeliveryServicesByCountries(app.deliveryServices); + expect(results.originCountries).to.be.eql(["US", "MX"]); + expect(results.destinationCountries).to.be.eql(["US", "MX"]); + }); + + it("throw an error if only 0 or 1 delivery services are sent into the function", () => { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + appDefinition.deliveryServices = [deliveryService]; + + const app = new CarrierApp(appDefinition); + + expect(() => findMatchingDeliveryServicesByCountries(app.deliveryServices)).to.throw( + Error, + /Multiple Delivery Services must be specified/, + ); + }); + + it("throws an error when a matching set of countries are unable to be found for the given delivery services", () => { + + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + appDefinition.deliveryServices = [deliveryService]; + + appDefinition.deliveryServices[0].originCountries = ["US", "MX", "CA"]; + appDefinition.deliveryServices[0].destinationCountries = ["US", "MX", "CA"]; + + appDefinition.deliveryServices.push({ + id: "9df1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Another Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["CA"], + destinationCountries: ["CA"], + packaging: [pojo.packaging()] + }); + + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["US", "MX"], + destinationCountries: ["US", "MX"], + packaging: [pojo.packaging()] + }); + + const app = new CarrierApp(appDefinition); + + expect(() => findMatchingDeliveryServicesByCountries(app.deliveryServices)).to.throw( + Error, + /Specified delivery services do not share origin and destination countries/, + ); + }); +}); From ed7c44ab80f17746ac7a6b312c9d2b2e309dc1a9 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Fri, 24 Jul 2020 15:04:43 -0500 Subject: [PATCH 05/53] add missing testKey --- src/core/test-app/runner/load-and-validate-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 1ada434..80f7281 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -47,7 +47,7 @@ function validate(config: Config): void { "createShipment_multi_package", "createShipment_regional", "createShipment_with_insurance", - "rateShipment", + "rateShipment_with_multiple_services", "schedulePickup", "trackShipment", ]; From ffdbe94e9dac708a8b6ede14afd4430d6dc119e9 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Fri, 24 Jul 2020 20:24:28 -0500 Subject: [PATCH 06/53] initial commit --- src/core/test-app.ts | 8 +- src/core/test-app/runner/config.ts | 2 + .../config/rate-shipment-with-one-service.ts | 22 ++ .../runner/load-and-validate-config.ts | 1 + src/core/test-app/tests/index.ts | 1 + .../tests/rate-shipment-with-one-service.ts | 162 ++++++++++ ...te-shipment-with-multiple-services.spec.js | 4 + .../rate-shipment-with-one-service.spec.js | 292 ++++++++++++++++++ 8 files changed, 490 insertions(+), 2 deletions(-) create mode 100644 src/core/test-app/runner/config/rate-shipment-with-one-service.ts create mode 100644 src/core/test-app/tests/rate-shipment-with-one-service.ts create mode 100644 test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js diff --git a/src/core/test-app.ts b/src/core/test-app.ts index d01d593..749a2b1 100644 --- a/src/core/test-app.ts +++ b/src/core/test-app.ts @@ -6,7 +6,8 @@ import { CreateShipmentDomestic, CreateShipmentMultiPackage, CreateShipmentWithInsurance, - RateShipmentWithMultipleServices + RateShipmentWithMultipleServices, + RateShipmentWithOneService } from "./test-app/tests"; import { SdkApp } from "./types"; import { TestResults, useTestResults } from "./test-app/runner/test-results"; @@ -145,7 +146,10 @@ function registerTestSuiteModules(app: SdkApp): RegisteredTestSuiteModules { CreateShipmentMultiPackage, CreateShipmentWithInsurance ], - rateShipment: [RateShipmentWithMultipleServices], + rateShipment: [ + RateShipmentWithMultipleServices, + RateShipmentWithOneService + ], // schedulePickup: [SchedulePickupTestSuite], // trackShipment: [TrackShipmentTestSuite], }; diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index 6fa041f..4d12d54 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -3,6 +3,7 @@ import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-do import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; import { RateShipmentWithMultipleServicesConfigOptions } from './config/rate-shipment-with-multiple-services'; +import { RateShipmentWithOneServiceConfigOptions } from './config/rate-shipment-with-one-service'; export interface TestsConfig { // cancelPickups?: (TestOptions & TestOptions) | [TestOptions]; @@ -19,6 +20,7 @@ export interface TestsConfig { // rateShipment?: RateShipmentOptions | [RateShipmentOptions]; // createShipment_multi_package?: TestOptions | [TestOptions]; + rateShipmentWithOneService?: RateShipmentWithOneServiceConfigOptions | [RateShipmentWithOneServiceConfigOptions]; rateShipmentWithMultipleServices?: RateShipmentWithMultipleServicesConfigOptions | [RateShipmentWithMultipleServicesConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; // trackShipment?: TestOptions | [TestOptions]; diff --git a/src/core/test-app/runner/config/rate-shipment-with-one-service.ts b/src/core/test-app/runner/config/rate-shipment-with-one-service.ts new file mode 100644 index 0000000..9541381 --- /dev/null +++ b/src/core/test-app/runner/config/rate-shipment-with-one-service.ts @@ -0,0 +1,22 @@ +import { + DateTimeZonePOJO, + AddressWithContactInfoPOJO, + WeightUnit, +} from "@shipengine/integration-platform-sdk"; +import { BaseTestConfigOptions } from "./base-test-config-options"; + +export interface RateShipmentWithOneServiceTestParams { + deliveryServiceName: string; + shipFrom: AddressWithContactInfoPOJO; + shipTo: AddressWithContactInfoPOJO; + weight: { + value: number; + unit: WeightUnit; + }; + shipDateTime: DateTimeZonePOJO | Date | string; + packagingName: string; +} + +export interface RateShipmentWithOneServiceConfigOptions + extends RateShipmentWithOneServiceTestParams, + BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 80f7281..3a2e79d 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -48,6 +48,7 @@ function validate(config: Config): void { "createShipment_regional", "createShipment_with_insurance", "rateShipment_with_multiple_services", + "rateShipment_with_one_service", "schedulePickup", "trackShipment", ]; diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index e7aba6d..80c2157 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -10,6 +10,7 @@ export * from "./create-shipment-international"; // export * from "./get-sales-order-test-suite"; // export * from "./get-sales-orders-by-date-test-suite"; // export * from "./get-seller-test-suite"; +export * from "./rate-shipment-with-one-service"; export * from "./rate-shipment-with-multiple-services"; // export * from "./schedule-pickup-test-suite"; // export * from "./shipment-cancelled-test-suite"; diff --git a/src/core/test-app/tests/rate-shipment-with-one-service.ts b/src/core/test-app/tests/rate-shipment-with-one-service.ts new file mode 100644 index 0000000..160bed4 --- /dev/null +++ b/src/core/test-app/tests/rate-shipment-with-one-service.ts @@ -0,0 +1,162 @@ +import { + CarrierApp, + DeliveryService, + RateCriteriaPOJO, + WeightUnit, + PackageRateCriteriaPOJO, +} from "@shipengine/integration-platform-sdk"; +import Suite from "../runner/suite"; +import { initializeTimeStamps } from "../../utils/time-stamps"; +import { RateShipmentWithOneServiceTestParams, RateShipmentWithOneServiceConfigOptions } from "../runner/config/rate-shipment-with-one-service"; +import reduceDefaultsWithConfig from "../utils/reduce-defaults-with-config"; +import objectToTestTitle from "../utils/object-to-test-title"; +import useShipmentAddresses from '../utils/use-shipment-addresses'; +import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; + +interface TestArgs { + title: string; + methodArgs: RateCriteriaPOJO; + config: any; + testParams: RateShipmentWithOneServiceTestParams; +} + +export class RateShipmentWithOneService extends Suite { + title = "rateShipment_with_one_service"; + + private deliveryService: DeliveryService | undefined; + + private setDeliveryServices(config: RateShipmentWithOneServiceConfigOptions): void { + const carrierApp = this.app as CarrierApp; + + if (config.deliveryServiceName) { + this.deliveryService = findDeliveryServiceByName(config.deliveryServiceName, carrierApp); + } + + else if (carrierApp.deliveryServices) { + + for (let ds of carrierApp.deliveryServices) { + let [shipFrom, shipTo] = useShipmentAddresses(ds); + if (shipFrom && shipTo) { + this.deliveryService = ds; + } + } + + } + } + + buildTestArg(config: RateShipmentWithOneServiceConfigOptions): TestArgs | undefined { + const carrierApp = this.app as CarrierApp; + this.setDeliveryServices(config); + + if (!this.deliveryService) return undefined; + const [shipFrom, shipTo] = useShipmentAddresses(this.deliveryService); + + if (!shipTo || !shipFrom) return undefined; + + const { tomorrow } = initializeTimeStamps(shipFrom.timeZone); + + const defaults: RateShipmentWithOneServiceTestParams = { + deliveryServiceName: this.deliveryService.name, + shipDateTime: tomorrow, + shipFrom: shipFrom, + shipTo: shipTo, + weight: { + unit: WeightUnit.Pounds, + value: 50.0 + }, + packagingName: this.deliveryService.packaging[0].name + }; + + const testParams = reduceDefaultsWithConfig< + RateShipmentWithOneServiceTestParams + >(defaults, config); + + const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { + packaging: [{ + id: this.deliveryService.packaging[0].id, + }], + weight: { + value: testParams.weight.value, + unit: testParams.weight.unit, + } + }; + + let RateCriteriaPOJO: RateCriteriaPOJO = { + deliveryServices: [findDeliveryServiceByName(this.deliveryService.name, carrierApp)], + shipFrom: testParams.shipFrom, + shipTo: testParams.shipTo!, + shipDateTime: testParams.shipDateTime, + packages: [packageRateCriteriaPOJO] + }; + + const title = config.expectedErrorMessage + ? `it raises an error when creating a new shipment rate with one service with ${objectToTestTitle( + testParams, + )}` + : `it creates a new shipment rate with one service with ${objectToTestTitle( + testParams, + )}`; + + return { + title, + methodArgs: RateCriteriaPOJO, + config, + testParams + }; + } + + buildTestArgs(): Array { + if (Array.isArray(this.config)) { + return this.config.map((config: RateShipmentWithOneServiceConfigOptions) => { + return this.buildTestArg(config); + }); + } else { + const config = this.config as RateShipmentWithOneServiceConfigOptions; + + return [this.buildTestArg(config)]; + } + } + + tests() { + const testArgs = this.buildTestArgs().filter(args => args !== undefined) as TestArgs[]; + + if (testArgs.length === 0) { + return []; + } + return testArgs.map((testArg) => { + return this.test( + testArg.title, + testArg.methodArgs, + testArg.config, + async () => { + const carrierApp = this.app as CarrierApp; + + const transaction = await this.transaction(testArg.config); + + // This should never actually throw because we handle this case up stream. + if (!carrierApp.rateShipment) { + throw new Error("rateShipment is not implemented"); + } + + const rates = await carrierApp.rateShipment!(transaction, testArg!.methodArgs); + + //Check that all delivery services that were passed in are included in the response + for (let ds of testArg.methodArgs.deliveryServices!) { + if (!rates.find(rate => rate.deliveryService.id === ds.id)) { + const missingDS = carrierApp.deliveryServices.find(service => service.id === ds.id); + + throw new Error(`Rate for delivery service '${missingDS!.name}' is missing from the response`); + } + } + + for (let rate of rates) { + //Check is fullfillment service should be set + if (rate.deliveryService.fulfillmentService && !rate.fulfillmentService) { + throw new Error(`Fulfillment Service is not set for '${rate.deliveryService.name}' rate`); + } + } + }, + ); + }); + } +} diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js index 42d2589..d40e512 100644 --- a/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js +++ b/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js @@ -306,6 +306,10 @@ describe("The rate shipment with multiple services test suite", () => { expect(error.message).includes("Fulfillment Service is not set for 'Better Delivery Service' rate"); } }); + + afterEach(() => { + CarrierApp.prototype.rateShipment.restore(); + }); }); }); diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js new file mode 100644 index 0000000..2cc9256 --- /dev/null +++ b/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js @@ -0,0 +1,292 @@ +"use strict"; + +const { RateShipmentWithOneService } = require("../../../../../../lib/core/test-app/tests/rate-shipment-with-one-service"); +const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../../utils/pojo"); +const { expect } = require("chai"); +const sinon = require("sinon"); + +describe("The rate shipment with one service test suite", () => { + + describe("when there is no address available for the delivery service", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["AQ"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + describe("when there is a delivery service with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new RateShipmentWithOneService(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 50lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + }); + }); + + describe("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment_with_one_service = { + weight: { + value: 200, + unit: "lb" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + }); + }); + + describe("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment_with_one_service = + [ + { + weight: { + value: 200, + unit: "lb" + } + }, + { + weight: { + value: 22, + unit: "lb" + } + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + expect(tests[1].title).to.include("weight: 22lb"); + expect(tests[1].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment_with_one_service = { + deliveryServiceName: "asdf" + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.rateShipment_with_one_service = { + deliveryServiceName: "Better Delivery Service" + } + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment_with_one_service = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_with_one_service.shipTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("shipTo: US"); + }); + }); + + describe("When the delivery service in the request is missing in the response", () => { + it("should throw an error", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const rateResponse = []; + sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); + const app = new CarrierApp(appDefinition); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("Rate for delivery service 'Dummy Delivery Service' is missing from the response"); + } + }); + + afterEach(() => { + CarrierApp.prototype.rateShipment.restore(); + }); + }); + + describe("When a deliveryService fulfillment property is set", () => { + it("should throw an error if the response does not match it", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].fulfillmentService = "dhl_economy_select"; + + const rate1 = pojo.rate(); + rate1.deliveryService = appDefinition.deliveryServices[0]; + + const app = new CarrierApp(appDefinition); + const rateResponse = [rate1]; + sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipmentWithOneService(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("Fulfillment Service is not set for 'Dummy Delivery Service' rate"); + } + }); + + afterEach(() => { + CarrierApp.prototype.rateShipment.restore(); + }); + }); +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.labelFormats = ["pdf"]; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + appDefinition.deliveryServices = [deliveryService]; + appDefinition.rateShipment = () => { }; + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + rateShipment_with_one_service: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} \ No newline at end of file From 3e63acc6c64b2b67d92d4c42372bd11def95dabc Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Fri, 24 Jul 2020 20:25:27 -0500 Subject: [PATCH 07/53] code cleanup --- src/core/test-app/tests/rate-shipment-with-one-service.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core/test-app/tests/rate-shipment-with-one-service.ts b/src/core/test-app/tests/rate-shipment-with-one-service.ts index 160bed4..95dfbd2 100644 --- a/src/core/test-app/tests/rate-shipment-with-one-service.ts +++ b/src/core/test-app/tests/rate-shipment-with-one-service.ts @@ -33,14 +33,12 @@ export class RateShipmentWithOneService extends Suite { } else if (carrierApp.deliveryServices) { - for (let ds of carrierApp.deliveryServices) { let [shipFrom, shipTo] = useShipmentAddresses(ds); if (shipFrom && shipTo) { this.deliveryService = ds; } } - } } From da428fb782840bebf228c853e1311482de43ed68 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 30 Jul 2020 13:52:58 -0500 Subject: [PATCH 08/53] update to reflect the latest sdk --- src/core/test-app/runner/config.ts | 2 - .../rate-shipment-with-multiple-services.ts | 22 -- src/core/test-app/tests/index.ts | 3 - .../rate-shipment-with-multiple-services.ts | 191 ------------------ .../tests/rate-shipment-with-one-service.ts | 23 +-- .../rate-shipment-with-one-service.spec.js | 29 --- 6 files changed, 7 insertions(+), 263 deletions(-) delete mode 100644 src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts delete mode 100644 src/core/test-app/tests/rate-shipment-with-multiple-services.ts diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index 4d12d54..0455d14 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -2,7 +2,6 @@ import { CreateShipmentInternationalConfigOptions } from "./config/create-shipme import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-domestic"; import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; -import { RateShipmentWithMultipleServicesConfigOptions } from './config/rate-shipment-with-multiple-services'; import { RateShipmentWithOneServiceConfigOptions } from './config/rate-shipment-with-one-service'; export interface TestsConfig { @@ -21,7 +20,6 @@ export interface TestsConfig { // createShipment_multi_package?: TestOptions | [TestOptions]; rateShipmentWithOneService?: RateShipmentWithOneServiceConfigOptions | [RateShipmentWithOneServiceConfigOptions]; - rateShipmentWithMultipleServices?: RateShipmentWithMultipleServicesConfigOptions | [RateShipmentWithMultipleServicesConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; // trackShipment?: TestOptions | [TestOptions]; } diff --git a/src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts b/src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts deleted file mode 100644 index 29f3260..0000000 --- a/src/core/test-app/runner/config/rate-shipment-with-multiple-services.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - DateTimeZonePOJO, - AddressWithContactInfoPOJO, - WeightUnit, -} from "@shipengine/integration-platform-sdk"; -import { BaseTestConfigOptions } from "./base-test-config-options"; - -export interface RateShipmentWithMultipleServicesTestParams { - deliveryServiceNames: string[]; - shipFrom: AddressWithContactInfoPOJO; - shipTo: AddressWithContactInfoPOJO; - weight: { - value: number; - unit: WeightUnit; - }; - shipDateTime: DateTimeZonePOJO | Date | string; - packagingName: string; -} - -export interface RateShipmentWithMultipleServicesConfigOptions - extends RateShipmentWithMultipleServicesTestParams, - BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index 80c2157..d300da0 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -2,8 +2,6 @@ // export * from "./cancel-shipments-test-suite"; // export * from "./create-manifest-test-suite"; export * from "./create-shipment-domestic"; -export * from "./rate-shipment-with-multiple-services"; -// export * from "./create-shipment-domestic"; export * from "./create-shipment-multipackage"; export * from "./create-shipment-with-insurance"; export * from "./create-shipment-international"; @@ -11,7 +9,6 @@ export * from "./create-shipment-international"; // export * from "./get-sales-orders-by-date-test-suite"; // export * from "./get-seller-test-suite"; export * from "./rate-shipment-with-one-service"; -export * from "./rate-shipment-with-multiple-services"; // export * from "./schedule-pickup-test-suite"; // export * from "./shipment-cancelled-test-suite"; // export * from "./shipment-created-test-suite"; diff --git a/src/core/test-app/tests/rate-shipment-with-multiple-services.ts b/src/core/test-app/tests/rate-shipment-with-multiple-services.ts deleted file mode 100644 index 48a04fd..0000000 --- a/src/core/test-app/tests/rate-shipment-with-multiple-services.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { - CarrierApp, - DeliveryService, - RateCriteriaPOJO, - WeightUnit, - PackageRateCriteriaPOJO, -} from "@shipengine/integration-platform-sdk"; -import Suite from "../runner/suite"; -import { initializeTimeStamps } from "../../utils/time-stamps"; -import { RateShipmentWithMultipleServicesTestParams, RateShipmentWithMultipleServicesConfigOptions } from "../runner/config/rate-shipment-with-multiple-services"; -import reduceDefaultsWithConfig from "../utils/reduce-defaults-with-config"; -import objectToTestTitle from "../utils/object-to-test-title"; -import { findMatchingDeliveryServicesByCountries } from "../utils/find-matching-delivery-services-by-countries"; -import useShipmentAddresses from '../utils/use-shipment-addresses'; -import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; - -interface TestArgs { - title: string; - methodArgs: RateCriteriaPOJO; - config: any; - testParams: RateShipmentWithMultipleServicesTestParams; -} - -export class RateShipmentWithMultipleServices extends Suite { - title = "rateShipment_with_multiple_services"; - - private deliveryServices: DeliveryService[] = []; - - private setDeliveryServices(config: RateShipmentWithMultipleServicesConfigOptions): void { - const carrierApp = this.app as CarrierApp; - - if (config.deliveryServiceNames && config.deliveryServiceNames.length > 0) { - if (config.deliveryServiceNames.length === 1) { - throw new Error("You must specify more than one delivery service"); - } - - const deliveryServices = config.deliveryServiceNames.map(name => findDeliveryServiceByName(name, carrierApp)); - try { - findMatchingDeliveryServicesByCountries(deliveryServices); - } - catch { - throw new Error("Configured delivery services must share origin and destination countries for correct rate generation"); - } - - this.deliveryServices = deliveryServices; - } - - else if (carrierApp.deliveryServices) { - // Loop through all delivery services and then subsets until a set of shared countries are found. - // This is a very simple and naive approach that can be expanded upon later if needed. - const dsCopy = Object.assign([], carrierApp.deliveryServices); - let results; - try { - results = findMatchingDeliveryServicesByCountries(dsCopy); - } catch { - results = undefined; - } - - while (!results && dsCopy.length > 1) { - // Remove a delivery service and check if the new array shares a set of countries - dsCopy.pop(); - try { - results = findMatchingDeliveryServicesByCountries(dsCopy); - } catch { - results = undefined; - } - } - - if (results) { - this.deliveryServices = dsCopy; - } - } - } - - buildTestArg(config: RateShipmentWithMultipleServicesConfigOptions): TestArgs | undefined { - const carrierApp = this.app as CarrierApp; - if (carrierApp.deliveryServices.length < 2) return undefined; - this.setDeliveryServices(config); - - if (this.deliveryServices.length === 0) return undefined; - const [shipFrom, shipTo] = useShipmentAddresses(this.deliveryServices[0]); - - if (!shipTo || !shipFrom) return undefined; - - const { tomorrow } = initializeTimeStamps(shipFrom.timeZone); - - const defaults: RateShipmentWithMultipleServicesTestParams = { - deliveryServiceNames: this.deliveryServices.map(ds => ds.name), - shipDateTime: tomorrow, - shipFrom: shipFrom, - shipTo: shipTo, - weight: { - unit: WeightUnit.Pounds, - value: 50.0 - }, - packagingName: this.deliveryServices[0].packaging[0].name - }; - - const testParams = reduceDefaultsWithConfig< - RateShipmentWithMultipleServicesTestParams - >(defaults, config); - - const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { - packaging: [{ - id: this.deliveryServices[0].packaging[0].id, - }], - weight: { - value: testParams.weight.value, - unit: testParams.weight.unit, - } - }; - - let RateCriteriaPOJO: RateCriteriaPOJO = { - deliveryServices: testParams.deliveryServiceNames.map(name => findDeliveryServiceByName(name, carrierApp)), - shipFrom: testParams.shipFrom, - shipTo: testParams.shipTo!, - shipDateTime: testParams.shipDateTime, - packages: [packageRateCriteriaPOJO] - }; - - const title = config.expectedErrorMessage - ? `it raises an error when creating a new shipment rate with multiple services with ${objectToTestTitle( - testParams, - )}` - : `it creates a new shipment rate with multiple services with ${objectToTestTitle( - testParams, - )}`; - - return { - title, - methodArgs: RateCriteriaPOJO, - config, - testParams - }; - } - - buildTestArgs(): Array { - if (Array.isArray(this.config)) { - return this.config.map((config: RateShipmentWithMultipleServicesConfigOptions) => { - return this.buildTestArg(config); - }); - } else { - const config = this.config as RateShipmentWithMultipleServicesConfigOptions; - - return [this.buildTestArg(config)]; - } - } - - tests() { - const testArgs = this.buildTestArgs().filter(args => args !== undefined) as TestArgs[]; - - if (testArgs.length === 0) { - return []; - } - return testArgs.map((testArg) => { - return this.test( - testArg.title, - testArg.methodArgs, - testArg.config, - async () => { - const carrierApp = this.app as CarrierApp; - - const transaction = await this.transaction(testArg.config); - - // This should never actually throw because we handle this case up stream. - if (!carrierApp.rateShipment) { - throw new Error("rateShipment is not implemented"); - } - - const rates = await carrierApp.rateShipment!(transaction, testArg!.methodArgs); - - //Check that all delivery services that were passed in are included in the response - for (let ds of testArg.methodArgs.deliveryServices!) { - if(!rates.find(rate=> rate.deliveryService.id === ds.id)) { - const missingDS = carrierApp.deliveryServices.find(service => service.id === ds.id); - - throw new Error(`Rate for delivery service '${missingDS!.name}' is missing from the response`); - } - } - - for(let rate of rates) { - //Check is fullfillment service should be set - if(rate.deliveryService.fulfillmentService && !rate.fulfillmentService) { - throw new Error(`Fulfillment Service is not set for '${rate.deliveryService.name}' rate`); - } - } - }, - ); - }); - } -} diff --git a/src/core/test-app/tests/rate-shipment-with-one-service.ts b/src/core/test-app/tests/rate-shipment-with-one-service.ts index 95dfbd2..4682da7 100644 --- a/src/core/test-app/tests/rate-shipment-with-one-service.ts +++ b/src/core/test-app/tests/rate-shipment-with-one-service.ts @@ -51,7 +51,7 @@ export class RateShipmentWithOneService extends Suite { if (!shipTo || !shipFrom) return undefined; - const { tomorrow } = initializeTimeStamps(shipFrom.timeZone); + const { tomorrow } = initializeTimeStamps(); const defaults: RateShipmentWithOneServiceTestParams = { deliveryServiceName: this.deliveryService.name, @@ -80,7 +80,7 @@ export class RateShipmentWithOneService extends Suite { }; let RateCriteriaPOJO: RateCriteriaPOJO = { - deliveryServices: [findDeliveryServiceByName(this.deliveryService.name, carrierApp)], + deliveryService: findDeliveryServiceByName(this.deliveryService.name, carrierApp), shipFrom: testParams.shipFrom, shipTo: testParams.shipTo!, shipDateTime: testParams.shipDateTime, @@ -138,22 +138,13 @@ export class RateShipmentWithOneService extends Suite { const rates = await carrierApp.rateShipment!(transaction, testArg!.methodArgs); - //Check that all delivery services that were passed in are included in the response - for (let ds of testArg.methodArgs.deliveryServices!) { - if (!rates.find(rate => rate.deliveryService.id === ds.id)) { - const missingDS = carrierApp.deliveryServices.find(service => service.id === ds.id); + //Check that the delivery service that was passed in is included in the response + if (!rates.find(rate => rate.deliveryService.id === testArg.methodArgs!.deliveryService!.id)) { + const missingDS = carrierApp.deliveryServices.find(service => service.id === testArg.methodArgs!.deliveryService!.id); - throw new Error(`Rate for delivery service '${missingDS!.name}' is missing from the response`); - } + throw new Error(`Rate for delivery service '${missingDS!.name}' is missing from the response`); } - - for (let rate of rates) { - //Check is fullfillment service should be set - if (rate.deliveryService.fulfillmentService && !rate.fulfillmentService) { - throw new Error(`Fulfillment Service is not set for '${rate.deliveryService.name}' rate`); - } - } - }, + } ); }); } diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js index 2cc9256..3a81130 100644 --- a/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js +++ b/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js @@ -227,35 +227,6 @@ describe("The rate shipment with one service test suite", () => { CarrierApp.prototype.rateShipment.restore(); }); }); - - describe("When a deliveryService fulfillment property is set", () => { - it("should throw an error if the response does not match it", async () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[0].fulfillmentService = "dhl_economy_select"; - - const rate1 = pojo.rate(); - rate1.deliveryService = appDefinition.deliveryServices[0]; - - const app = new CarrierApp(appDefinition); - const rateResponse = [rate1]; - sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); - const tests = testSuite.tests(); - try { - await tests[0].fn(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).includes("Fulfillment Service is not set for 'Dummy Delivery Service' rate"); - } - }); - - afterEach(() => { - CarrierApp.prototype.rateShipment.restore(); - }); - }); }); function generateBasicAppAndConfigs() { From eb8389fa085ec752a5b99e60d800d31aec295157 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 30 Jul 2020 16:17:40 -0500 Subject: [PATCH 09/53] test suite rename --- src/core/test-app.ts | 4 +- src/core/test-app/runner/config.ts | 4 +- ...t-with-one-service.ts => rate-shipment.ts} | 6 +- .../runner/load-and-validate-config.ts | 2 +- src/core/test-app/tests/index.ts | 2 +- ...t-with-one-service.ts => rate-shipment.ts} | 26 +- ...te-shipment-with-multiple-services.spec.js | 360 ------------------ ...-service.spec.js => rate-shipment.spec.js} | 34 +- 8 files changed, 39 insertions(+), 399 deletions(-) rename src/core/test-app/runner/config/{rate-shipment-with-one-service.ts => rate-shipment.ts} (74%) rename src/core/test-app/tests/{rate-shipment-with-one-service.ts => rate-shipment.ts} (81%) delete mode 100644 test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js rename test/specs/core/test-app/runner/tests/{rate-shipment-with-one-service.spec.js => rate-shipment.spec.js} (88%) diff --git a/src/core/test-app.ts b/src/core/test-app.ts index a5aa429..12645bd 100644 --- a/src/core/test-app.ts +++ b/src/core/test-app.ts @@ -6,7 +6,7 @@ import { CreateShipmentDomestic, CreateShipmentWithInsurance, CreateShipmentMultiPackage, - RateShipmentWithOneService + RateShipment } from "./test-app/tests"; import { SdkApp } from "./types"; import { TestResults, useTestResults } from "./test-app/runner/test-results"; @@ -146,7 +146,7 @@ function registerTestSuiteModules(app: SdkApp): RegisteredTestSuiteModules { CreateShipmentWithInsurance ], rateShipment: [ - RateShipmentWithOneService + RateShipment ], // schedulePickup: [SchedulePickupTestSuite], // trackShipment: [TrackShipmentTestSuite], diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index 0455d14..ed487d8 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -2,7 +2,7 @@ import { CreateShipmentInternationalConfigOptions } from "./config/create-shipme import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-domestic"; import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; -import { RateShipmentWithOneServiceConfigOptions } from './config/rate-shipment-with-one-service'; +import { RateShipmentConfigOptions } from './config/rate-shipment'; export interface TestsConfig { // cancelPickups?: (TestOptions & TestOptions) | [TestOptions]; @@ -19,7 +19,7 @@ export interface TestsConfig { // rateShipment?: RateShipmentOptions | [RateShipmentOptions]; // createShipment_multi_package?: TestOptions | [TestOptions]; - rateShipmentWithOneService?: RateShipmentWithOneServiceConfigOptions | [RateShipmentWithOneServiceConfigOptions]; + rateShipmentWithOneService?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; // trackShipment?: TestOptions | [TestOptions]; } diff --git a/src/core/test-app/runner/config/rate-shipment-with-one-service.ts b/src/core/test-app/runner/config/rate-shipment.ts similarity index 74% rename from src/core/test-app/runner/config/rate-shipment-with-one-service.ts rename to src/core/test-app/runner/config/rate-shipment.ts index 9541381..9a6aa18 100644 --- a/src/core/test-app/runner/config/rate-shipment-with-one-service.ts +++ b/src/core/test-app/runner/config/rate-shipment.ts @@ -5,7 +5,7 @@ import { } from "@shipengine/integration-platform-sdk"; import { BaseTestConfigOptions } from "./base-test-config-options"; -export interface RateShipmentWithOneServiceTestParams { +export interface RateShipmentTestParams { deliveryServiceName: string; shipFrom: AddressWithContactInfoPOJO; shipTo: AddressWithContactInfoPOJO; @@ -17,6 +17,6 @@ export interface RateShipmentWithOneServiceTestParams { packagingName: string; } -export interface RateShipmentWithOneServiceConfigOptions - extends RateShipmentWithOneServiceTestParams, +export interface RateShipmentConfigOptions + extends RateShipmentTestParams, BaseTestConfigOptions {} \ No newline at end of file diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 3a2e79d..288b01f 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -48,7 +48,7 @@ function validate(config: Config): void { "createShipment_regional", "createShipment_with_insurance", "rateShipment_with_multiple_services", - "rateShipment_with_one_service", + "rateShipment", "schedulePickup", "trackShipment", ]; diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index d300da0..140a74d 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -8,7 +8,7 @@ export * from "./create-shipment-international"; // export * from "./get-sales-order-test-suite"; // export * from "./get-sales-orders-by-date-test-suite"; // export * from "./get-seller-test-suite"; -export * from "./rate-shipment-with-one-service"; +export * from "./rate-shipment"; // export * from "./schedule-pickup-test-suite"; // export * from "./shipment-cancelled-test-suite"; // export * from "./shipment-created-test-suite"; diff --git a/src/core/test-app/tests/rate-shipment-with-one-service.ts b/src/core/test-app/tests/rate-shipment.ts similarity index 81% rename from src/core/test-app/tests/rate-shipment-with-one-service.ts rename to src/core/test-app/tests/rate-shipment.ts index 4682da7..5f8893b 100644 --- a/src/core/test-app/tests/rate-shipment-with-one-service.ts +++ b/src/core/test-app/tests/rate-shipment.ts @@ -7,7 +7,7 @@ import { } from "@shipengine/integration-platform-sdk"; import Suite from "../runner/suite"; import { initializeTimeStamps } from "../../utils/time-stamps"; -import { RateShipmentWithOneServiceTestParams, RateShipmentWithOneServiceConfigOptions } from "../runner/config/rate-shipment-with-one-service"; +import { RateShipmentTestParams, RateShipmentConfigOptions } from "../runner/config/rate-shipment"; import reduceDefaultsWithConfig from "../utils/reduce-defaults-with-config"; import objectToTestTitle from "../utils/object-to-test-title"; import useShipmentAddresses from '../utils/use-shipment-addresses'; @@ -17,15 +17,15 @@ interface TestArgs { title: string; methodArgs: RateCriteriaPOJO; config: any; - testParams: RateShipmentWithOneServiceTestParams; + testParams: RateShipmentTestParams; } -export class RateShipmentWithOneService extends Suite { - title = "rateShipment_with_one_service"; +export class RateShipment extends Suite { + title = "rateShipment"; private deliveryService: DeliveryService | undefined; - private setDeliveryServices(config: RateShipmentWithOneServiceConfigOptions): void { + private setDeliveryService(config: RateShipmentConfigOptions): void { const carrierApp = this.app as CarrierApp; if (config.deliveryServiceName) { @@ -42,9 +42,9 @@ export class RateShipmentWithOneService extends Suite { } } - buildTestArg(config: RateShipmentWithOneServiceConfigOptions): TestArgs | undefined { + buildTestArg(config: RateShipmentConfigOptions): TestArgs | undefined { const carrierApp = this.app as CarrierApp; - this.setDeliveryServices(config); + this.setDeliveryService(config); if (!this.deliveryService) return undefined; const [shipFrom, shipTo] = useShipmentAddresses(this.deliveryService); @@ -53,7 +53,7 @@ export class RateShipmentWithOneService extends Suite { const { tomorrow } = initializeTimeStamps(); - const defaults: RateShipmentWithOneServiceTestParams = { + const defaults: RateShipmentTestParams = { deliveryServiceName: this.deliveryService.name, shipDateTime: tomorrow, shipFrom: shipFrom, @@ -66,7 +66,7 @@ export class RateShipmentWithOneService extends Suite { }; const testParams = reduceDefaultsWithConfig< - RateShipmentWithOneServiceTestParams + RateShipmentTestParams >(defaults, config); const packageRateCriteriaPOJO: PackageRateCriteriaPOJO = { @@ -88,10 +88,10 @@ export class RateShipmentWithOneService extends Suite { }; const title = config.expectedErrorMessage - ? `it raises an error when creating a new shipment rate with one service with ${objectToTestTitle( + ? `it raises an error when creating a new shipment rate with ${objectToTestTitle( testParams, )}` - : `it creates a new shipment rate with one service with ${objectToTestTitle( + : `it creates a new shipment rate with ${objectToTestTitle( testParams, )}`; @@ -105,11 +105,11 @@ export class RateShipmentWithOneService extends Suite { buildTestArgs(): Array { if (Array.isArray(this.config)) { - return this.config.map((config: RateShipmentWithOneServiceConfigOptions) => { + return this.config.map((config: RateShipmentConfigOptions) => { return this.buildTestArg(config); }); } else { - const config = this.config as RateShipmentWithOneServiceConfigOptions; + const config = this.config as RateShipmentConfigOptions; return [this.buildTestArg(config)]; } diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js deleted file mode 100644 index d40e512..0000000 --- a/test/specs/core/test-app/runner/tests/rate-shipment-with-multiple-services.spec.js +++ /dev/null @@ -1,360 +0,0 @@ -"use strict"; - -const { RateShipmentWithMultipleServices } = require("../../../../../../lib/core/test-app/tests/rate-shipment-with-multiple-services"); -const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); -const pojo = require("../../../../utils/pojo"); -const { expect } = require("chai"); -const sinon = require("sinon"); - -describe("The rate shipment with multiple services test suite", () => { - - describe("when there are less than 2 delivery service definitions", () => { - - it("should not generate tests", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices.pop(); - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - - const tests = testSuite.tests(); - expect(tests.length).to.equal(0); - }); - }); - - - describe("when there is no shared address between the delivery services", () => { - it("should not generate tests", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[0].originCountries = ["MX"]; - appDefinition.deliveryServices[0].destinationCountries = ["MX"]; - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - - const tests = testSuite.tests(); - expect(tests.length).to.equal(0); - }); - }); - - describe("when there are multiple delivery services with an available address", () => { - - let testSuite; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - - testSuite = new RateShipmentWithMultipleServices(args); - }); - - it("should generate a test", () => { - const tests = testSuite.tests(); - expect(tests.length).to.equal(1); - }); - - it("the test params should be reflected in the title", () => { - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("weight: 50lb"); - expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); - - }); - }); - - describe("when there is a config override object of test suite parameters", () => { - - it("should update the test title", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment_with_multiple_services = { - weight: { - value: 200, - unit: "lb" - } - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("weight: 200lb"); - expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); - }); - }); - - describe("when there is a config override array of test suite parameters", () => { - - let tests; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_multiple_services = - [ - { - weight: { - value: 200, - unit: "lb" - } - }, - { - weight: { - value: 22, - unit: "lb" - } - } - ]; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - tests = testSuite.tests(); - }); - - - it("should generate additional tests", () => { - expect(tests.length).to.equal(2); - }); - - it("should update the test titles", () => { - - expect(tests[0].title).to.include("weight: 200lb"); - expect(tests[0].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); - - expect(tests[1].title).to.include("weight: 22lb"); - expect(tests[1].title).to.include("deliveryServiceNames: Dummy Delivery Service, Better Delivery Service"); - - }); - }); - - describe("When a user configs a delivery service that does not exist", () => { - it("should throw an error", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_multiple_services = { - deliveryServiceNames: ["asdf", "iewojasdf"] - } - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - - try { - testSuite.tests(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); - } - }); - }); - - describe("When a user configures delivery services that do no share an origin and destination country", () => { - it("should throw an error", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - appDefinition.deliveryServices.push({ - id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", - name: "Another Delivery Service", - class: "ground", - grade: "standard", - originCountries: ["CA"], - destinationCountries: ["CA"], - labelFormats: ["pdf"], - labelSizes: ["A4"], - packaging: [pojo.packaging()] - }); - - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_multiple_services = { - deliveryServiceNames: ["Dummy Delivery Service", "Another Delivery Service"] - } - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - - try { - testSuite.tests(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).to.include("Configured delivery services must share origin and destination countries for correct rate generation"); - } - }); - }); - - describe("When a user configs a new delivery service", () => { - it("should update the title params to reflect the new properties", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices.push({ - id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", - name: "Better Delivery Service", - class: "ground", - grade: "standard", - originCountries: ["MX"], - destinationCountries: ["MX"], - labelFormats: ["pdf"], - labelSizes: ["A4"], - packaging: [pojo.packaging()] - }); - - staticConfigTests.rateShipment_with_multiple_services = { - deliveryServiceNames: ["Better Delivery Service", "Dummy Delivery Service"] - } - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("deliveryServiceNames: Better Delivery Service, Dummy Delivery Service"); - }); - }); - - describe("When a user configures a Ship To and Ship From address", () => { - it("should update the test arguments and titles", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment_with_multiple_services = { - shipFrom: { - company: "Domestic Route #1", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - }, - shipTo: { - company: "Domestic Route #2", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - } - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - const tests = testSuite.tests(); - - expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); - expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - - expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_with_multiple_services.shipTo); - - expect(tests[0].title).to.include("shipFrom: US"); - expect(tests[0].title).to.include("shipTo: US"); - - }); - }); - - describe("When delivery services in the request are missing in the response", () => { - it("should throw an error", async () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - const rate1 = pojo.rate(); - const rateResponse = [rate1]; - sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); - const app = new CarrierApp(appDefinition); - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - const tests = testSuite.tests(); - try { - await tests[0].fn(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).includes("Rate for delivery service 'Better Delivery Service' is missing from the response"); - } - }); - - afterEach(() => { - CarrierApp.prototype.rateShipment.restore(); - }); - }); - - describe("When a deliveryService fulfillment property is set", () => { - it("should throw an error if the response does not match it", async () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[1].fulfillmentService = "dhl_economy_select"; - - const rate1 = pojo.rate(); - const rate2 = pojo.rate(); - rate1.deliveryService = appDefinition.deliveryServices[0]; - - rate2.deliveryService = appDefinition.deliveryServices[1]; - - const app = new CarrierApp(appDefinition); - const rateResponse = [rate1, rate2]; - sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithMultipleServices(args); - const tests = testSuite.tests(); - try { - await tests[0].fn(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).includes("Fulfillment Service is not set for 'Better Delivery Service' rate"); - } - }); - - afterEach(() => { - CarrierApp.prototype.rateShipment.restore(); - }); - }); - -}); - -function generateBasicAppAndConfigs() { - const appDefinition = pojo.carrierApp(); - const deliveryService = pojo.deliveryService(); - deliveryService.labelFormats = ["pdf"]; - deliveryService.labelSizes = ["A4"]; - deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; - appDefinition.deliveryServices = [deliveryService]; - appDefinition.rateShipment = () => { }; - - appDefinition.deliveryServices.push({ - id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", - name: "Better Delivery Service", - class: "ground", - grade: "standard", - originCountries: ["US"], - destinationCountries: ["US"], - labelFormats: ["pdf"], - labelSizes: ["A4"], - packaging: [pojo.packaging()] - }); - - const options = { - cli: { - debug: false, - }, - staticRootConfig: { - debug: false - }, - defaults: { - debug: false - }, - failFast: false, - retries: undefined, - timeout: undefined - }; - - const staticConfigTests = { - rateShipment_with_multiple_services: {} - }; - - const connectArgs = {}; - - return { appDefinition, connectArgs, staticConfigTests, options }; -} \ No newline at end of file diff --git a/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment.spec.js similarity index 88% rename from test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js rename to test/specs/core/test-app/runner/tests/rate-shipment.spec.js index 3a81130..6fbf077 100644 --- a/test/specs/core/test-app/runner/tests/rate-shipment-with-one-service.spec.js +++ b/test/specs/core/test-app/runner/tests/rate-shipment.spec.js @@ -1,12 +1,12 @@ "use strict"; -const { RateShipmentWithOneService } = require("../../../../../../lib/core/test-app/tests/rate-shipment-with-one-service"); +const { RateShipment } = require("../../../../../../lib/core/test-app/tests/rate-shipment"); const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); const pojo = require("../../../../utils/pojo"); const { expect } = require("chai"); const sinon = require("sinon"); -describe("The rate shipment with one service test suite", () => { +describe("The rate shipment test suite", () => { describe("when there is no address available for the delivery service", () => { it("should not generate tests", () => { @@ -16,7 +16,7 @@ describe("The rate shipment with one service test suite", () => { const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); const tests = testSuite.tests(); expect(tests.length).to.equal(0); @@ -31,7 +31,7 @@ describe("The rate shipment with one service test suite", () => { const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; - testSuite = new RateShipmentWithOneService(args); + testSuite = new RateShipment(args); }); it("should generate a test", () => { @@ -54,7 +54,7 @@ describe("The rate shipment with one service test suite", () => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_one_service = { + staticConfigTests.rateShipment = { weight: { value: 200, unit: "lb" @@ -62,7 +62,7 @@ describe("The rate shipment with one service test suite", () => { }; const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); const tests = testSuite.tests(); expect(tests[0].title).to.include("weight: 200lb"); @@ -76,7 +76,7 @@ describe("The rate shipment with one service test suite", () => { beforeEach(() => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_one_service = + staticConfigTests.rateShipment = [ { weight: { @@ -93,7 +93,7 @@ describe("The rate shipment with one service test suite", () => { ]; const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); tests = testSuite.tests(); }); @@ -117,12 +117,12 @@ describe("The rate shipment with one service test suite", () => { it("should throw an error", () => { const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_one_service = { + staticConfigTests.rateShipment = { deliveryServiceName: "asdf" }; const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); try { testSuite.tests(); @@ -149,13 +149,13 @@ describe("The rate shipment with one service test suite", () => { packaging: [pojo.packaging()] }); - staticConfigTests.rateShipment_with_one_service = { + staticConfigTests.rateShipment = { deliveryServiceName: "Better Delivery Service" } const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); const tests = testSuite.tests(); expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); @@ -168,7 +168,7 @@ describe("The rate shipment with one service test suite", () => { const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment_with_one_service = { + staticConfigTests.rateShipment = { shipFrom: { company: "Domestic Route #1", addressLines: ["123 New Street"], @@ -190,13 +190,13 @@ describe("The rate shipment with one service test suite", () => { }; const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); const tests = testSuite.tests(); expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment_with_one_service.shipTo); + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment.shipTo); expect(tests[0].title).to.include("shipFrom: US"); expect(tests[0].title).to.include("shipTo: US"); @@ -212,7 +212,7 @@ describe("The rate shipment with one service test suite", () => { const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipmentWithOneService(args); + const testSuite = new RateShipment(args); const tests = testSuite.tests(); try { await tests[0].fn(); @@ -254,7 +254,7 @@ function generateBasicAppAndConfigs() { }; const staticConfigTests = { - rateShipment_with_one_service: {} + rateShipment: {} }; const connectArgs = {}; From 0a4aac9f82747d333397105be5d3adca626a41b5 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 30 Jul 2020 16:30:56 -0500 Subject: [PATCH 10/53] touch up --- .../runner/load-and-validate-config.ts | 1 - .../runner/tests/rate-shipment.spec.js | 263 --------- .../core/test-app/tests/rate-shipment.spec.js | 516 +++++++++--------- 3 files changed, 263 insertions(+), 517 deletions(-) delete mode 100644 test/specs/core/test-app/runner/tests/rate-shipment.spec.js diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 288b01f..1ada434 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -47,7 +47,6 @@ function validate(config: Config): void { "createShipment_multi_package", "createShipment_regional", "createShipment_with_insurance", - "rateShipment_with_multiple_services", "rateShipment", "schedulePickup", "trackShipment", diff --git a/test/specs/core/test-app/runner/tests/rate-shipment.spec.js b/test/specs/core/test-app/runner/tests/rate-shipment.spec.js deleted file mode 100644 index 6fbf077..0000000 --- a/test/specs/core/test-app/runner/tests/rate-shipment.spec.js +++ /dev/null @@ -1,263 +0,0 @@ -"use strict"; - -const { RateShipment } = require("../../../../../../lib/core/test-app/tests/rate-shipment"); -const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); -const pojo = require("../../../../utils/pojo"); -const { expect } = require("chai"); -const sinon = require("sinon"); - -describe("The rate shipment test suite", () => { - - describe("when there is no address available for the delivery service", () => { - it("should not generate tests", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices[0].originCountries = ["AQ"]; - appDefinition.deliveryServices[0].destinationCountries = ["AQ"]; - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - - const tests = testSuite.tests(); - expect(tests.length).to.equal(0); - }); - }); - - describe("when there is a delivery service with an available address", () => { - - let testSuite; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - - testSuite = new RateShipment(args); - }); - - it("should generate a test", () => { - const tests = testSuite.tests(); - expect(tests.length).to.equal(1); - }); - - it("the test params should be reflected in the title", () => { - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("weight: 50lb"); - expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); - - }); - }); - - describe("when there is a config override object of test suite parameters", () => { - - it("should update the test title", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment = { - weight: { - value: 200, - unit: "lb" - } - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("weight: 200lb"); - expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); - }); - }); - - describe("when there is a config override array of test suite parameters", () => { - - let tests; - beforeEach(() => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment = - [ - { - weight: { - value: 200, - unit: "lb" - } - }, - { - weight: { - value: 22, - unit: "lb" - } - } - ]; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - tests = testSuite.tests(); - }); - - - it("should generate additional tests", () => { - expect(tests.length).to.equal(2); - }); - - it("should update the test titles", () => { - - expect(tests[0].title).to.include("weight: 200lb"); - expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); - - expect(tests[1].title).to.include("weight: 22lb"); - expect(tests[1].title).to.include("deliveryServiceName: Dummy Delivery Service"); - - }); - }); - - describe("When a user configs a delivery service that does not exist", () => { - it("should throw an error", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - const app = new CarrierApp(appDefinition); - staticConfigTests.rateShipment = { - deliveryServiceName: "asdf" - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - - try { - testSuite.tests(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); - } - }); - }); - - describe("When a user configs a new delivery service", () => { - it("should update the title params to reflect the new properties", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - appDefinition.deliveryServices.push({ - id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", - name: "Better Delivery Service", - class: "ground", - grade: "standard", - originCountries: ["MX"], - destinationCountries: ["MX"], - labelFormats: ["pdf"], - labelSizes: ["A4"], - packaging: [pojo.packaging()] - }); - - staticConfigTests.rateShipment = { - deliveryServiceName: "Better Delivery Service" - } - - const app = new CarrierApp(appDefinition); - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - const tests = testSuite.tests(); - - expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); - }); - }); - - describe("When a user configures a Ship To and Ship From address", () => { - it("should update the test arguments and titles", () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - const app = new CarrierApp(appDefinition); - - staticConfigTests.rateShipment = { - shipFrom: { - company: "Domestic Route #1", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - }, - shipTo: { - company: "Domestic Route #2", - addressLines: ["123 New Street"], - cityLocality: "Houston", - stateProvince: "TX", - country: "US", - postalCode: "77422", - timeZone: "America/Chicago" - } - }; - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - const tests = testSuite.tests(); - - expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); - expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - - expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment.shipTo); - - expect(tests[0].title).to.include("shipFrom: US"); - expect(tests[0].title).to.include("shipTo: US"); - }); - }); - - describe("When the delivery service in the request is missing in the response", () => { - it("should throw an error", async () => { - const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - - const rateResponse = []; - sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); - const app = new CarrierApp(appDefinition); - - const args = { app, connectArgs, staticConfigTests, options }; - const testSuite = new RateShipment(args); - const tests = testSuite.tests(); - try { - await tests[0].fn(); - expect(true).to.equal(false); - } - catch (error) { - expect(error.message).includes("Rate for delivery service 'Dummy Delivery Service' is missing from the response"); - } - }); - - afterEach(() => { - CarrierApp.prototype.rateShipment.restore(); - }); - }); -}); - -function generateBasicAppAndConfigs() { - const appDefinition = pojo.carrierApp(); - const deliveryService = pojo.deliveryService(); - deliveryService.labelFormats = ["pdf"]; - deliveryService.labelSizes = ["A4"]; - deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; - appDefinition.deliveryServices = [deliveryService]; - appDefinition.rateShipment = () => { }; - - const options = { - cli: { - debug: false, - }, - staticRootConfig: { - debug: false - }, - defaults: { - debug: false - }, - failFast: false, - retries: undefined, - timeout: undefined - }; - - const staticConfigTests = { - rateShipment: {} - }; - - const connectArgs = {}; - - return { appDefinition, connectArgs, staticConfigTests, options }; -} \ No newline at end of file diff --git a/test/specs/core/test-app/tests/rate-shipment.spec.js b/test/specs/core/test-app/tests/rate-shipment.spec.js index 7f21bfe..df36875 100644 --- a/test/specs/core/test-app/tests/rate-shipment.spec.js +++ b/test/specs/core/test-app/tests/rate-shipment.spec.js @@ -1,253 +1,263 @@ -// const { RateShipment } = require("../../../../../../lib/core/test-app/tests/rate-shipment"); -// const pojo = require("../../../../utils/pojo"); -// const { expect } = require("chai"); - -// describe("The rate shipment test suite", () => { - -// describe("when the delivery services do not share origin or desination countries", () => { -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// app.deliveryServices[0].originCountries = ["AQ"] -// app.deliveryServices[0].destinationCountries = ["AQ"] - -// app.deliveryServices.push(pojo.deliveryService()); - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); - -// it("should display an error message to the user", () => { -// try { -// testSuite.tests() -// expect(true).to.equal(false); -// } -// catch(error) { -// expect(error.message).to.include("Specified delivery services do not share origin and destination countries"); -// } -// }); -// }) - -// describe("when there is one delivery service", () => { - -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); - -// const tests = testSuite.tests(); - -// it("should generate a test", () => { -// expect(tests.length).to.equal(1); -// }); - -// it("the test params should be reflected in the title", () => { -// expect(tests[0].title).to.include("weightUnit: lb"); -// expect(tests[0].title).to.include("weightValue: 50"); -// }); -// }); - -// describe.skip("when there are multiple valid delivery services", () => { -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// staticConfigTests.rateShipment = { -// weight: { -// value: 200 -// } -// }; - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); -// const tests = testSuite.tests(); - -// it("should generate tests and reflect that in the title", () => { -// expect(tests.length).to.equal(1); - -// expect(tests[0].title).to.include("weightUnit: lb"); -// expect(tests[0].title).to.include("weightValue: 200"); -// }); -// }); - -// describe.skip("when there is a config override array of test suite parameters", () => { - -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// staticConfigTests.rateShipment = -// [ -// { -// weightValue: 200, -// }, -// { -// weightValue: 22, -// } -// ]; - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); -// const tests = testSuite.tests(); - -// it("should generate additional tests", () => { -// expect(tests.length).to.equal(2); -// }); - -// it("should update the test titles", () => { -// expect(tests[0].title).to.include("weightValue: 200"); -// expect(tests[1].title).to.include("weightValue: 22"); -// }); -// }); - -// describe("When a user configs a delivery service that does not exist", () => { - -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// staticConfigTests.rateShipment = { -// deliveryServiceNames: "asdf" -// } - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); - -// it("should throw an error", () => { -// try { -// testSuite.tests(); -// expect(true).to.equal(false); -// } -// catch(error) { -// expect(error.message).to.include("deliveryServiceName: asdf does not exist"); -// } -// }); -// }); - -// describe("When a user configs a new delivery service", () => { -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// app.deliveryServices.push({ -// id: "123455", -// name: "Better Delivery Service", -// class: "ground", -// grade: "standard", -// originCountries: ["MX"], -// destinationCountries: ["MX"], -// labelFormats: ["pdf"], -// labelSizes: ["A4"], -// packaging: [pojo.packaging()] -// }); - -// staticConfigTests.rateShipment = { -// deliveryServiceNames: ["Better Delivery Service"] -// } - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); -// const tests = testSuite.tests(); - -// it("should update the title params to reflect the new properties", () => { -// expect(tests[0].title).to.include("deliveryServiceNames: Better Delivery Service"); -// }); -// }); - -// describe("When a user configs multiple new delivery services", () => { -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); -// app.deliveryServices.push({ -// id: "123455", -// name: "Better Delivery Service", -// class: "ground", -// grade: "standard", -// originCountries: ["MX"], -// destinationCountries: ["MX"], -// labelFormats: ["pdf"], -// labelSizes: ["A4"], -// packaging: [pojo.packaging()] -// }); - -// app.deliveryServices.push({ -// id: "123455", -// name: "New Delivery Service", -// class: "ground", -// grade: "standard", -// originCountries: ["MX"], -// destinationCountries: ["MX"], -// labelFormats: ["pdf"], -// labelSizes: ["A4"], -// packaging: [pojo.packaging()] -// }); - -// staticConfigTests.rateShipment = { -// deliveryServiceNames: ["Better Delivery Service", "New Delivery Service"] -// } - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); -// const tests = testSuite.tests(); - -// it("should update the title params to reflect the new properties", () => { -// expect(tests[0].title).to.include("deliveryServiceNames: Better Delivery Service"); -// expect(tests[0].title).to.include("New Delivery Service"); - -// }); -// }); - -// describe("When a user configures a Ship To and Ship From address", () => { -// const { app, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); - -// staticConfigTests.rateShipment = { -// shipFrom: { -// company: "Domestic Route #1", -// addressLines: ["123 New Street"], -// cityLocality: "Houston", -// stateProvince: "TX", -// country: "US", -// postalCode: "77422", -// timeZone: "America/Chicago" -// }, -// shipTo: { -// company: "Domestic Route #2", -// addressLines: ["123 New Street"], -// cityLocality: "Houston", -// stateProvince: "TX", -// country: "US", -// postalCode: "77422", -// timeZone: "America/Chicago" -// } -// }; - -// const args = { app, connectArgs, staticConfigTests, options }; -// const testSuite = new RateShipment(args); -// const tests = testSuite.tests(); - -// it("should update the test arguments and titles", () => { -// expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); -// expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); - -// expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment.shipTo); - -// expect(tests[0].title).to.include("shipFrom: US"); -// expect(tests[0].title).to.include("shipTo: US"); - -// }); -// }); -// }); - -// function generateBasicAppAndConfigs() { -// const app = pojo.carrierApp(); -// const deliveryService = pojo.deliveryService(); -// deliveryService.labelFormats = ["pdf"]; -// deliveryService.labelSizes = ["A4"]; -// deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; -// app.deliveryServices = [deliveryService]; - -// const options = { -// cli: { -// debug: false, -// }, -// staticRootConfig: { -// debug: false -// }, -// defaults: { -// debug: false -// }, -// failFast: false, -// retries: undefined, -// timeout: undefined -// }; - -// const staticConfigTests = { -// createShipment_domestic: {} -// }; - -// const connectArgs = {}; - -// return { app, connectArgs, staticConfigTests, options }; -// } \ No newline at end of file +"use strict"; + +const { RateShipment } = require("../../../../../lib/core/test-app/tests/rate-shipment"); +const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../utils/pojo"); +const { expect } = require("chai"); +const sinon = require("sinon"); + +describe("The rate shipment test suite", () => { + + describe("when there is no address available for the delivery service", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["AQ"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + describe("when there is a delivery service with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new RateShipment(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 50lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + }); + }); + + describe("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment = { + weight: { + value: 200, + unit: "lb" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + }); + }); + + describe("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment = + [ + { + weight: { + value: 200, + unit: "lb" + } + }, + { + weight: { + value: 22, + unit: "lb" + } + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + expect(tests[1].title).to.include("weight: 22lb"); + expect(tests[1].title).to.include("deliveryServiceName: Dummy Delivery Service"); + + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.rateShipment = { + deliveryServiceName: "asdf" + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + grade: "standard", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.rateShipment = { + deliveryServiceName: "Better Delivery Service" + } + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.rateShipment = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.rateShipment.shipTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("shipTo: US"); + }); + }); + + describe("When the delivery service in the request is missing in the response", () => { + it("should throw an error", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const rateResponse = []; + sinon.stub(CarrierApp.prototype, "rateShipment").resolves(rateResponse); + const app = new CarrierApp(appDefinition); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new RateShipment(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("Rate for delivery service 'Dummy Delivery Service' is missing from the response"); + } + }); + + afterEach(() => { + CarrierApp.prototype.rateShipment.restore(); + }); + }); +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.labelFormats = ["pdf"]; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + appDefinition.deliveryServices = [deliveryService]; + appDefinition.rateShipment = () => { }; + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + rateShipment: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} \ No newline at end of file From f7bae86be193e94120c75d11661d956c05ec0c55 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 14:55:12 -0500 Subject: [PATCH 11/53] remove code coverage --- .github/workflows/CI-CD.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/CI-CD.yaml b/.github/workflows/CI-CD.yaml index d67d81a..f1f9294 100644 --- a/.github/workflows/CI-CD.yaml +++ b/.github/workflows/CI-CD.yaml @@ -52,23 +52,23 @@ jobs: - name: Run tests run: npm run coverage - - name: Send code coverage results to Coveralls - uses: coverallsapp/github-action@v1.1.0 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - parallel: true - - coverage: - name: Code Coverage - runs-on: ubuntu-latest - timeout-minutes: 10 - needs: test - steps: - - name: Let Coveralls know that all tests have finished - uses: coverallsapp/github-action@v1.1.0 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - parallel-finished: true + # - name: Send code coverage results to Coveralls + # uses: coverallsapp/github-action@v1.1.0 + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + # parallel: true + + # coverage: + # name: Code Coverage + # runs-on: ubuntu-latest + # timeout-minutes: 10 + # needs: test + # steps: + # - name: Let Coveralls know that all tests have finished + # uses: coverallsapp/github-action@v1.1.0 + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + # parallel-finished: true deploy: name: Publish to NPM From 6259e52db0d3ce43a2efe2bce34cb4be29c08c3a Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 14:56:01 -0500 Subject: [PATCH 12/53] release v1.0.2 --- README.md | 18 +++++++++--------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f35f9a1..6fd7831 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ shipengine COMMAND running command... $ shipengine (-v|--version|version) -@shipengine/connect-cli/1.0.1 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.2 linux-x64 node-v12.18.1 $ shipengine --help [COMMAND] USAGE $ shipengine COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/info.ts)_ ## `shipengine login` @@ -91,7 +91,7 @@ ALIASES $ shipengine login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/login.ts)_ ## `shipengine logout` @@ -108,7 +108,7 @@ ALIASES $ shipengine logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/logout.ts)_ ## `shipengine new [PATH]` @@ -133,7 +133,7 @@ EXAMPLE $ shipengine new ``` -_See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/new.ts)_ ## `shipengine publish` @@ -152,7 +152,7 @@ EXAMPLE $ shipengine publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/publish.ts)_ ## `shipengine start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/start.ts)_ ## `shipengine test` @@ -190,7 +190,7 @@ EXAMPLES $ shipengine test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/test.ts)_ ## `shipengine whoami` @@ -207,5 +207,5 @@ ALIASES $ shipengine whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.1/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 274a462..5325020 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7e5884d..346813a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.1", + "version": "1.0.2", "author": { "name": "ShipEngine", "email": "support@shipengine.com", From 39229aaa6bf1c5b3c5cffb9a620dba64892752cd Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 15:13:33 -0500 Subject: [PATCH 13/53] update a few more references --- README.md | 80 ++++++++++----------- package.json | 2 +- src/commands/new.ts | 2 +- src/commands/publish.ts | 2 +- src/commands/test.ts | 4 +- src/core/generators/apps-new.ts | 4 +- src/core/start-app/server.js | 2 +- test/specs/core/generators/apps-new.spec.js | 48 ++++++------- 8 files changed, 72 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 6fd7831..dabb142 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,13 @@ ```sh-session $ npm install -g @shipengine/connect-cli -$ shipengine COMMAND +$ connect COMMAND running command... -$ shipengine (-v|--version|version) +$ connect (-v|--version|version) @shipengine/connect-cli/1.0.2 linux-x64 node-v12.18.1 -$ shipengine --help [COMMAND] +$ connect --help [COMMAND] USAGE - $ shipengine COMMAND + $ connect COMMAND ... ``` @@ -35,23 +35,23 @@ USAGE # Commands -* [`shipengine help [COMMAND]`](#shipengine-help-command) -* [`shipengine info`](#shipengine-info) -* [`shipengine login`](#shipengine-login) -* [`shipengine logout`](#shipengine-logout) -* [`shipengine new [PATH]`](#shipengine-new-path) -* [`shipengine publish`](#shipengine-publish) -* [`shipengine start`](#shipengine-start) -* [`shipengine test`](#shipengine-test) -* [`shipengine whoami`](#shipengine-whoami) +* [`connect help [COMMAND]`](#connect-help-command) +* [`connect info`](#connect-info) +* [`connect login`](#connect-login) +* [`connect logout`](#connect-logout) +* [`connect new [PATH]`](#connect-new-path) +* [`connect publish`](#connect-publish) +* [`connect start`](#connect-start) +* [`connect test`](#connect-test) +* [`connect whoami`](#connect-whoami) -## `shipengine help [COMMAND]` +## `connect help [COMMAND]` -display help for shipengine +display help for connect ``` USAGE - $ shipengine help [COMMAND] + $ connect help [COMMAND] ARGUMENTS COMMAND command to show help for @@ -62,13 +62,13 @@ OPTIONS _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.0/src/commands/help.ts)_ -## `shipengine info` +## `connect info` list info for an app ``` USAGE - $ shipengine info + $ connect info OPTIONS -h, --help show help for the info command @@ -76,47 +76,47 @@ OPTIONS _See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/info.ts)_ -## `shipengine login` +## `connect login` login with your connect API key ``` USAGE - $ shipengine login + $ connect login OPTIONS -h, --help show help for the auth:login command ALIASES - $ shipengine login + $ connect login ``` _See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/login.ts)_ -## `shipengine logout` +## `connect logout` clears the local connect API key ``` USAGE - $ shipengine logout + $ connect logout OPTIONS -h, --help show help for the auth:logout command ALIASES - $ shipengine logout + $ connect logout ``` _See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/logout.ts)_ -## `shipengine new [PATH]` +## `connect new [PATH]` create a new package to develop a custom ShipEngine app ``` USAGE - $ shipengine new [PATH] + $ connect new [PATH] ARGUMENTS PATH path to new package (defaults to current directory) @@ -127,21 +127,21 @@ OPTIONS -y, --yes skips the questions and uses the defaults (carrier|Javascript|yaml) ALIASES - $ shipengine init + $ connect init EXAMPLE - $ shipengine new + $ connect new ``` _See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/new.ts)_ -## `shipengine publish` +## `connect publish` publish your app ``` USAGE - $ shipengine publish + $ connect publish OPTIONS -h, --help show help for the publish command @@ -149,18 +149,18 @@ OPTIONS -w, --watch check the status of the deployment until complete EXAMPLE - $ shipengine publish + $ connect publish ``` _See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/publish.ts)_ -## `shipengine start` +## `connect start` start a local web server to develop your app interactively ``` USAGE - $ shipengine start + $ connect start OPTIONS -h, --help show help for the apps:start commands @@ -169,13 +169,13 @@ OPTIONS _See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/start.ts)_ -## `shipengine test` +## `connect test` test your app ``` USAGE - $ shipengine test + $ connect test OPTIONS -d, --debug logs additional debug information @@ -186,25 +186,25 @@ OPTIONS -t, --timeout=timeout specify the timeout for all the test EXAMPLES - $ shipengine test - $ shipengine test --grep rateShipment + $ connect test + $ connect test --grep rateShipment ``` _See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/test.ts)_ -## `shipengine whoami` +## `connect whoami` display the current logged in user ``` USAGE - $ shipengine whoami + $ connect whoami OPTIONS -h, --help show help for the auth:whoami command ALIASES - $ shipengine whoami + $ connect whoami ``` _See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/whoami.ts)_ diff --git a/package.json b/package.json index 346813a..4f57351 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "main": "lib/index.js", "oclif": { "commands": "./lib/commands", - "bin": "shipengine", + "bin": "connect", "plugins": [ "@oclif/plugin-help", "@oclif/plugin-not-found" diff --git a/src/commands/new.ts b/src/commands/new.ts index 167cd4b..20952cb 100644 --- a/src/commands/new.ts +++ b/src/commands/new.ts @@ -33,7 +33,7 @@ export default class New extends BaseCommand { }, ]; - static examples = ["$ shipengine new"]; + static examples = ["$ connect new"]; async run() { const { flags, args } = this.parse(New); diff --git a/src/commands/publish.ts b/src/commands/publish.ts index e29e68d..8774535 100644 --- a/src/commands/publish.ts +++ b/src/commands/publish.ts @@ -7,7 +7,7 @@ import { checkAppLoginStatus } from "../core/utils/users"; export default class Publish extends BaseCommand { static description = "publish your app"; - static examples = ["$ shipengine publish"]; + static examples = ["$ connect publish"]; // TODO: come up with a convention for turning off spinners if the user desires // TODO: implement a quiet command? diff --git a/src/commands/test.ts b/src/commands/test.ts index f78dde4..9432fd3 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -5,8 +5,8 @@ export default class Test extends BaseCommand { static description = "test your app"; static examples = [ - "$ shipengine test", - "$ shipengine test --grep rateShipment", + "$ connect test", + "$ connect test --grep rateShipment", ]; static flags = { diff --git a/src/core/generators/apps-new.ts b/src/core/generators/apps-new.ts index 8331e7e..faae74c 100644 --- a/src/core/generators/apps-new.ts +++ b/src/core/generators/apps-new.ts @@ -236,8 +236,8 @@ class AppsNew extends Generator { this.pjson.main = this.pJsonMain(); this.pjson.scripts = { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" } if (this.ts) { diff --git a/src/core/start-app/server.js b/src/core/start-app/server.js index 8677438..6a9614a 100644 --- a/src/core/start-app/server.js +++ b/src/core/start-app/server.js @@ -5,7 +5,7 @@ "use strict"; // eslint-disable-next-line node/no-missing-require -const server = require("@shipengine/shipengine-integration-platform-local-dev-api") +const server = require("@shipengine/connect-local-dev-api") .default; const pathToApp = process.argv[2]; diff --git a/test/specs/core/generators/apps-new.spec.js b/test/specs/core/generators/apps-new.spec.js index b4b4a10..7360952 100644 --- a/test/specs/core/generators/apps-new.spec.js +++ b/test/specs/core/generators/apps-new.spec.js @@ -61,8 +61,8 @@ describe("new generator", () => { main: "src/index.yaml", description: "test description", scripts: { - test: "shipengine test", - start: "shipengine start" + test: "connect test", + start: "connect start" }, }); }); @@ -115,8 +115,8 @@ describe("new generator", () => { build: "tsc", watch: "tsc --watch", postbuild: "copyfiles -u 1 src/**/!\\(*.ts\\) lib; copyfiles -u 1 src/!\\(*.ts\\) lib", - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "lib/index.js", }); @@ -169,8 +169,8 @@ describe("new generator", () => { build: "tsc", watch: "tsc --watch", postbuild: "copyfiles -u 1 src/**/!\\(*.ts\\) lib; copyfiles -u 1 src/!\\(*.ts\\) lib", - start: "shipengine start", - test: "shipengine test", + start: "connect start", + test: "connect test", } }); }); @@ -222,8 +222,8 @@ describe("new generator", () => { build: "tsc", watch: "tsc --watch", postbuild: "copyfiles -u 1 src/**/!\\(*.ts\\) lib; copyfiles -u 1 src/!\\(*.ts\\) lib", - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, }); }); @@ -270,8 +270,8 @@ describe("new generator", () => { name: "@shipengine/testname", description: "test description", scripts: { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "src/index.json" }); @@ -319,8 +319,8 @@ describe("new generator", () => { name: "@shipengine/testname", description: "test description", scripts: { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "src/index.yaml" }); @@ -363,8 +363,8 @@ describe("new generator", () => { name: "@shipengine/testname", description: "test description", scripts: { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "src/index.yaml" }); @@ -412,8 +412,8 @@ describe("new generator", () => { scripts: { build: "tsc", watch: "tsc --watch", - start: "shipengine start", - test: "shipengine test", + start: "connect start", + test: "connect test", }, }); }); @@ -457,8 +457,8 @@ describe("new generator", () => { scripts: { build: "tsc", watch: "tsc --watch", - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "lib/index.json" }); @@ -503,8 +503,8 @@ describe("new generator", () => { scripts: { build: "tsc", watch: "tsc --watch", - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "lib/index.yaml", }); @@ -547,8 +547,8 @@ describe("new generator", () => { name: "@shipengine/testname", description: "test description", scripts: { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "src/index.json", }); @@ -591,8 +591,8 @@ describe("new generator", () => { name: "@shipengine/testname", description: "test description", scripts: { - start: "shipengine start", - test: "shipengine test" + start: "connect start", + test: "connect test" }, main: "src/index.yaml" }); From e7fa62b272bb16154cabf864f8135165364c9ef0 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 15:14:31 -0500 Subject: [PATCH 14/53] release v1.0.3 --- README.md | 18 +++++++++--------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index dabb142..c6b0eb1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.2 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.3 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/info.ts)_ ## `connect login` @@ -91,7 +91,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/login.ts)_ ## `connect logout` @@ -108,7 +108,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/logout.ts)_ ## `connect new [PATH]` @@ -133,7 +133,7 @@ EXAMPLE $ connect new ``` -_See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/new.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.2/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 5325020..96c4b24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4f57351..df31188 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.2", + "version": "1.0.3", "author": { "name": "ShipEngine", "email": "support@shipengine.com", From ae3f2548d909f1e0923e17d36d83cc51a417325e Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 15:49:47 -0500 Subject: [PATCH 15/53] update references, change "new" command to "init" --- src/commands/{new.ts => init.ts} | 2 +- templates/carrier/methods/cancel-pickups.js | 2 +- templates/carrier/methods/cancel-pickups.ts | 4 ++-- templates/carrier/methods/cancel-shipments.js | 2 +- templates/carrier/methods/cancel-shipments.ts | 2 +- templates/carrier/methods/connect.js | 2 +- templates/carrier/methods/connect.ts | 2 +- templates/carrier/methods/create-manifest.js | 2 +- templates/carrier/methods/create-manifest.ts | 2 +- templates/carrier/methods/create-shipment.js | 2 +- templates/carrier/methods/create-shipment.ts | 2 +- templates/carrier/methods/rate-shipment.js | 2 +- templates/carrier/methods/rate-shipment.ts | 2 +- templates/carrier/methods/schedule-pickup.js | 2 +- templates/carrier/methods/schedule-pickup.ts | 2 +- templates/carrier/methods/track-shipment.js | 2 +- templates/carrier/methods/track-shipment.ts | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) rename src/commands/{new.ts => init.ts} (98%) diff --git a/src/commands/new.ts b/src/commands/init.ts similarity index 98% rename from src/commands/new.ts rename to src/commands/init.ts index 20952cb..7bfc68b 100644 --- a/src/commands/new.ts +++ b/src/commands/init.ts @@ -7,7 +7,7 @@ export default class New extends BaseCommand { static description = "create a new package to develop a custom ShipEngine app"; - static aliases = ["init"]; + static aliases = ["new"]; static flags = { force: flags.boolean({ diff --git a/templates/carrier/methods/cancel-pickups.js b/templates/carrier/methods/cancel-pickups.js index f56619e..3561ca5 100644 --- a/templates/carrier/methods/cancel-pickups.js +++ b/templates/carrier/methods/cancel-pickups.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/cancel-pickups * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/freightco/cancel-pickups.js + * https://github.com/ShipEngine/connect-samples/blob/master/freightco/cancel-pickups.js */ async function cancelPickups(transaction, pickups) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/cancel-pickups.ts b/templates/carrier/methods/cancel-pickups.ts index ef124ae..a6f18fe 100644 --- a/templates/carrier/methods/cancel-pickups.ts +++ b/templates/carrier/methods/cancel-pickups.ts @@ -9,10 +9,10 @@ import { Session } from "./session"; * Cancels one or more previously-scheduled pickups * * See an example implementation below - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/carrier/src/methods/cancel-pickups.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/carrier/src/methods/cancel-pickups.ts * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/src/methods/cancel-pickups.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/src/methods/cancel-pickups.ts */ export default async function cancelPickups( diff --git a/templates/carrier/methods/cancel-shipments.js b/templates/carrier/methods/cancel-shipments.js index d9510fd..fbd0db8 100644 --- a/templates/carrier/methods/cancel-shipments.js +++ b/templates/carrier/methods/cancel-shipments.js @@ -8,7 +8,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/cancel-shipments * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/cargo-inc/src/cancel-shipments.js + * https://github.com/ShipEngine/connect-samples/blob/master/cargo-inc/src/cancel-shipments.js */ async function cancelShipments(transaction, shipments) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/cancel-shipments.ts b/templates/carrier/methods/cancel-shipments.ts index 54ece38..a7b2069 100644 --- a/templates/carrier/methods/cancel-shipments.ts +++ b/templates/carrier/methods/cancel-shipments.ts @@ -13,7 +13,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/cancel-shipments * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/src/methods/cancel-shipments.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/src/methods/cancel-shipments.ts */ export default async function cancelShipments( transaction: Transaction, diff --git a/templates/carrier/methods/connect.js b/templates/carrier/methods/connect.js index dcb2d44..e729b01 100644 --- a/templates/carrier/methods/connect.js +++ b/templates/carrier/methods/connect.js @@ -6,7 +6,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/connect * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/freightco/connect.js + * https://github.com/ShipEngine/connect-samples/blob/master/freightco/connect.js */ async function connect(transaction, connectionFormData) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/connect.ts b/templates/carrier/methods/connect.ts index ed9966e..257a0a2 100644 --- a/templates/carrier/methods/connect.ts +++ b/templates/carrier/methods/connect.ts @@ -10,7 +10,7 @@ interface ConnectionFormData {} * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/connect * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/src/methods/connect.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/src/methods/connect.ts */ export default async function connect( transaction: Transaction, diff --git a/templates/carrier/methods/create-manifest.js b/templates/carrier/methods/create-manifest.js index 33b3903..99b2b42 100644 --- a/templates/carrier/methods/create-manifest.js +++ b/templates/carrier/methods/create-manifest.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/create-manifest * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/cargo-inc/src/create-manifest.js + * https://github.com/ShipEngine/connect-samples/blob/master/cargo-inc/src/create-manifest.js */ async function createManifest(transaction, manifest) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/create-manifest.ts b/templates/carrier/methods/create-manifest.ts index 73a01c8..9a111b7 100644 --- a/templates/carrier/methods/create-manifest.ts +++ b/templates/carrier/methods/create-manifest.ts @@ -12,7 +12,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/create-manifest * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/src/methods/create-manifest.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/src/methods/create-manifest.ts */ export default async function createManifest( transaction: Transaction, diff --git a/templates/carrier/methods/create-shipment.js b/templates/carrier/methods/create-shipment.js index 1c735b8..c84eaf9 100644 --- a/templates/carrier/methods/create-shipment.js +++ b/templates/carrier/methods/create-shipment.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/create-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/freightco/carrier/create-shipment.js + * https://github.com/ShipEngine/connect-samples/blob/master/freightco/carrier/create-shipment.js */ async function createShipment(transaction, shipment) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/create-shipment.ts b/templates/carrier/methods/create-shipment.ts index d25bdd3..49064bb 100644 --- a/templates/carrier/methods/create-shipment.ts +++ b/templates/carrier/methods/create-shipment.ts @@ -12,7 +12,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/create-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/carrier/src/methods/create-shipment.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/carrier/src/methods/create-shipment.ts */ export default async function createShipment( transaction: Transaction, diff --git a/templates/carrier/methods/rate-shipment.js b/templates/carrier/methods/rate-shipment.js index fbc9390..71f6c6c 100644 --- a/templates/carrier/methods/rate-shipment.js +++ b/templates/carrier/methods/rate-shipment.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/rate-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/freightco/carrier/rate-shipment.js + * https://github.com/ShipEngine/connect-samples/blob/master/freightco/carrier/rate-shipment.js */ async function rateShipment(transaction, shipment) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/rate-shipment.ts b/templates/carrier/methods/rate-shipment.ts index 4d4d7d8..84e51b8 100644 --- a/templates/carrier/methods/rate-shipment.ts +++ b/templates/carrier/methods/rate-shipment.ts @@ -11,7 +11,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/rate-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/carrier/src/methods/rate-shipment.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/carrier/src/methods/rate-shipment.ts */ export default async function rateShipment( transaction: Transaction, diff --git a/templates/carrier/methods/schedule-pickup.js b/templates/carrier/methods/schedule-pickup.js index 8d74c05..3a61f98 100644 --- a/templates/carrier/methods/schedule-pickup.js +++ b/templates/carrier/methods/schedule-pickup.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/schedule-pickup * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/freightco/schedule-pickup.js + * https://github.com/ShipEngine/connect-samples/blob/master/freightco/schedule-pickup.js */ async function schedulePickup(transaction, pickup) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/schedule-pickup.ts b/templates/carrier/methods/schedule-pickup.ts index ca81e6f..04a6b9b 100644 --- a/templates/carrier/methods/schedule-pickup.ts +++ b/templates/carrier/methods/schedule-pickup.ts @@ -12,7 +12,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/schedule-pickup * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/carrier/src/methods/schedule-pickup.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/carrier/src/methods/schedule-pickup.ts */ export default async function schedulePickup( transaction: Transaction, diff --git a/templates/carrier/methods/track-shipment.js b/templates/carrier/methods/track-shipment.js index e00e362..fcf033a 100644 --- a/templates/carrier/methods/track-shipment.js +++ b/templates/carrier/methods/track-shipment.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/track-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/d89b926db889a6d1051f0d8fb3934b79b1f2b757/cargo-inc/src/track-shipment.js + * https://github.com/ShipEngine/connect-samples/blob/d89b926db889a6d1051f0d8fb3934b79b1f2b757/cargo-inc/src/track-shipment.js */ async function trackShipment(transaction, shipment) { throw new Error("NotImplementedError"); diff --git a/templates/carrier/methods/track-shipment.ts b/templates/carrier/methods/track-shipment.ts index 6d3875c..53e1f3c 100644 --- a/templates/carrier/methods/track-shipment.ts +++ b/templates/carrier/methods/track-shipment.ts @@ -12,7 +12,7 @@ import { Session } from "./session"; * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/track-shipment * * View sample implementation here: - * https://github.com/ShipEngine/shipengine-integration-platform-sample-apps/blob/master/parcel-post/src/methods/track-shipment.ts + * https://github.com/ShipEngine/connect-samples/blob/master/parcel-post/src/methods/track-shipment.ts */ export default async function trackShipment( transaction: Transaction, From 9ebef483d9d8c604bad6acce1b65293b84926ccf Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 16:07:52 -0500 Subject: [PATCH 16/53] typos --- src/commands/init.ts | 2 +- templates/carrier/index.js | 2 +- templates/carrier/methods/track-shipment.js | 2 +- templates/shipengine.config.js | 11 ----------- 4 files changed, 3 insertions(+), 14 deletions(-) delete mode 100644 templates/shipengine.config.js diff --git a/src/commands/init.ts b/src/commands/init.ts index 7bfc68b..9354157 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -33,7 +33,7 @@ export default class New extends BaseCommand { }, ]; - static examples = ["$ connect new"]; + static examples = ["$ connect init"]; async run() { const { flags, args } = this.parse(New); diff --git a/templates/carrier/index.js b/templates/carrier/index.js index 587373f..56f00ff 100644 --- a/templates/carrier/index.js +++ b/templates/carrier/index.js @@ -6,7 +6,7 @@ module.exports = { description: "<%- pjson.description %>", logo: "./logo.svg", icon: "./logo.svg", - websiteURL: "http://www.carier-site.com", + websiteURL: "http://www.carrier-site.com", manifestType: "digital", manifestLocations: "single_location", manifestShipments: "explicit_shipments", diff --git a/templates/carrier/methods/track-shipment.js b/templates/carrier/methods/track-shipment.js index fcf033a..66ccb6d 100644 --- a/templates/carrier/methods/track-shipment.js +++ b/templates/carrier/methods/track-shipment.js @@ -7,7 +7,7 @@ * https://shipenginestag:439bd542@shipenginestag.wpengine.com/docs/integration-platform/reference/methods/track-shipment * * View sample implementation here: - * https://github.com/ShipEngine/connect-samples/blob/d89b926db889a6d1051f0d8fb3934b79b1f2b757/cargo-inc/src/track-shipment.js + * https://github.com/ShipEngine/connect-samples/blob/cargo-inc/src/track-shipment.js */ async function trackShipment(transaction, shipment) { throw new Error("NotImplementedError"); diff --git a/templates/shipengine.config.js b/templates/shipengine.config.js deleted file mode 100644 index a2b81d7..0000000 --- a/templates/shipengine.config.js +++ /dev/null @@ -1,11 +0,0 @@ -require("dotenv-flow").config(); - -module.exports = { - methods: { - connectionFormDataProps: { - email: process.env.EMAIL, - password: process.env.PASSWORD, - }, - }, - negateTests: [], -}; From 764c878549f4478b87a7bb96888fefc4aaecb449 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 12 Aug 2020 16:11:44 -0500 Subject: [PATCH 17/53] release v1.0.4 --- README.md | 66 ++++++++++++++++----------------- package-lock.json | 2 +- package.json | 2 +- src/core/generators/apps-new.ts | 20 +++++----- 4 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index c6b0eb1..9b744fd 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.3 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.4 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -37,9 +37,9 @@ USAGE * [`connect help [COMMAND]`](#connect-help-command) * [`connect info`](#connect-info) +* [`connect init [PATH]`](#connect-init-path) * [`connect login`](#connect-login) * [`connect logout`](#connect-logout) -* [`connect new [PATH]`](#connect-new-path) * [`connect publish`](#connect-publish) * [`connect start`](#connect-start) * [`connect test`](#connect-test) @@ -74,66 +74,66 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/info.ts)_ -## `connect login` +## `connect init [PATH]` -login with your connect API key +create a new package to develop a custom ShipEngine app ``` USAGE - $ connect login + $ connect init [PATH] + +ARGUMENTS + PATH path to new package (defaults to current directory) OPTIONS - -h, --help show help for the auth:login command + -f, --force overwrite existing files + -h, --help show help for the new command + -y, --yes skips the questions and uses the defaults (carrier|Javascript|yaml) ALIASES - $ connect login + $ connect new + +EXAMPLE + $ connect init ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/login.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/init.ts)_ -## `connect logout` +## `connect login` -clears the local connect API key +login with your connect API key ``` USAGE - $ connect logout + $ connect login OPTIONS - -h, --help show help for the auth:logout command + -h, --help show help for the auth:login command ALIASES - $ connect logout + $ connect login ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/logout.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/login.ts)_ -## `connect new [PATH]` +## `connect logout` -create a new package to develop a custom ShipEngine app +clears the local connect API key ``` USAGE - $ connect new [PATH] - -ARGUMENTS - PATH path to new package (defaults to current directory) + $ connect logout OPTIONS - -f, --force overwrite existing files - -h, --help show help for the new command - -y, --yes skips the questions and uses the defaults (carrier|Javascript|yaml) + -h, --help show help for the auth:logout command ALIASES - $ connect init - -EXAMPLE - $ connect new + $ connect logout ``` -_See code: [src/commands/new.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/new.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/logout.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.3/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 96c4b24..4263735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index df31188..7d3ba01 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.3", + "version": "1.0.4", "author": { "name": "ShipEngine", "email": "support@shipengine.com", diff --git a/src/core/generators/apps-new.ts b/src/core/generators/apps-new.ts index faae74c..824f0d4 100644 --- a/src/core/generators/apps-new.ts +++ b/src/core/generators/apps-new.ts @@ -265,11 +265,11 @@ class AppsNew extends Generator { this, ); - this.fs.copyTpl( - this.templatePath("shipengine.config.js"), - this.destinationPath("shipengine.config.js"), - this, - ); + // this.fs.copyTpl( + // this.templatePath("shipengine.config.js"), + // this.destinationPath("shipengine.config.js"), + // this, + // ); if (this.fs.exists(this.destinationPath("./package.json"))) { fixpack( @@ -289,11 +289,11 @@ class AppsNew extends Generator { this, ); - this.fs.copyTpl( - this.templatePath("shipengine.config.js"), - this.destinationPath("shipengine.config.js"), - this, - ); + // this.fs.copyTpl( + // this.templatePath("shipengine.config.js"), + // this.destinationPath("shipengine.config.js"), + // this, + // ); this.fs.copyTpl( this.templatePath("README.md.ejs"), From 1f47e2e31f969bc3b4271806dd2162787a35e2e6 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 07:31:06 -0500 Subject: [PATCH 18/53] change shipengine.config.js to connect.config.js --- src/core/generators/apps-new.ts | 20 +++++++++---------- src/core/test-app/runner/index.ts | 2 +- .../runner/load-and-validate-config.ts | 8 ++++---- src/core/test-app/runner/suite.ts | 6 +++--- .../find-delivery-confirmation-by-name.ts | 2 +- .../utils/find-delivery-service-by-name.ts | 2 +- .../test-app/utils/find-packaging-by-name.ts | 2 +- templates/.npmignore-js | 2 +- templates/.npmignore-ts | 2 +- templates/connect.config.js | 20 +++++++++++++++++++ templates/vscode/launch.json | 4 ++-- ...find-delivery-confirmation-by-name.spec.js | 2 +- .../find-delivery-service-by-name.spec.js | 2 +- 13 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 templates/connect.config.js diff --git a/src/core/generators/apps-new.ts b/src/core/generators/apps-new.ts index 824f0d4..755d64e 100644 --- a/src/core/generators/apps-new.ts +++ b/src/core/generators/apps-new.ts @@ -265,11 +265,11 @@ class AppsNew extends Generator { this, ); - // this.fs.copyTpl( - // this.templatePath("shipengine.config.js"), - // this.destinationPath("shipengine.config.js"), - // this, - // ); + this.fs.copyTpl( + this.templatePath("connect.config.js"), + this.destinationPath("connect.config.js"), + this, + ); if (this.fs.exists(this.destinationPath("./package.json"))) { fixpack( @@ -289,11 +289,11 @@ class AppsNew extends Generator { this, ); - // this.fs.copyTpl( - // this.templatePath("shipengine.config.js"), - // this.destinationPath("shipengine.config.js"), - // this, - // ); + this.fs.copyTpl( + this.templatePath("connect.config.js"), + this.destinationPath("connect.config.js"), + this, + ); this.fs.copyTpl( this.templatePath("README.md.ejs"), diff --git a/src/core/test-app/runner/index.ts b/src/core/test-app/runner/index.ts index 3254ee6..e7db8b3 100644 --- a/src/core/test-app/runner/index.ts +++ b/src/core/test-app/runner/index.ts @@ -63,7 +63,7 @@ export default class Runner { if (this.failFast && this.testResults.hasFailed()) continue; if (this.grep) { - // TODO if we allow regexs to be set in the shipengine.config.js we need to check to see if this a string or not here + // TODO if we allow regexs to be set in the connect.config.js we need to check to see if this a string or not here const cleanGrep = escapeStringRegexp(this.grep); // extract args if it's regex-like, i.e: [string, pattern, flag] diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 2190ec7..2280432 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -7,7 +7,7 @@ export async function loadAndValidateConfig( let config: Config = {}; try { - config = await readFile(`${pathToApp}/shipengine.config.js`); + config = await readFile(`${pathToApp}/connect.config.js`); validate(config); @@ -24,7 +24,7 @@ export async function loadAndValidateConfig( /** * TODO - This is probably going to be complex enough that it deserves a real validation library - * Make sure that the shipengine.config.js file contains the expected methods + * Make sure that the connect.config.js file contains the expected methods */ function validate(config: Config): void { const rootLevelKey = [ @@ -55,7 +55,7 @@ function validate(config: Config): void { for (const key of Object.keys(config)) { if (!rootLevelKey.includes(key)) { throw new Error( - `Invalid shipengine.config.js file, unrecognized property: ${key}`, + `Invalid connect.config.js file, unrecognized property: ${key}`, ); } @@ -63,7 +63,7 @@ function validate(config: Config): void { for (const [key] of Object.entries(config.tests)) { if (!testKeys.includes(key)) { throw new Error( - `Invalid shipengine.config.js file, unrecognized property: ${key}`, + `Invalid connect.config.js file, unrecognized property: ${key}`, ); } } diff --git a/src/core/test-app/runner/suite.ts b/src/core/test-app/runner/suite.ts index d063183..f62a301 100644 --- a/src/core/test-app/runner/suite.ts +++ b/src/core/test-app/runner/suite.ts @@ -106,7 +106,7 @@ export default abstract class Suite { if (testConfig.debug) { log( chalk.yellow( - `${indent(2)}using the session provided in shipengine.config.js`, + `${indent(2)}using the session provided in connect.config.js`, ), ); logObject(transaction); @@ -121,7 +121,7 @@ export default abstract class Suite { chalk.yellow( `${indent( 2, - )}calling the connect method to set the session for the transaction with the connectArgs given in shipengine.config.js`, + )}calling the connect method to set the session for the transaction with the connectArgs given in connect.config.js`, ), ); logObject( @@ -164,7 +164,7 @@ export default abstract class Suite { chalk.yellow( `${indent( 2, - )}connectArgs are not defined in shipengine.config.js the session value will be an empty object `, + )}connectArgs are not defined in connect.config.js the session value will be an empty object `, ), ); logObject(transaction); diff --git a/src/core/test-app/utils/find-delivery-confirmation-by-name.ts b/src/core/test-app/utils/find-delivery-confirmation-by-name.ts index 98c3b28..7e21f9b 100644 --- a/src/core/test-app/utils/find-delivery-confirmation-by-name.ts +++ b/src/core/test-app/utils/find-delivery-confirmation-by-name.ts @@ -17,7 +17,7 @@ export default function findDeliveryConfirmationByName( ); if (!deliveryConfirmation) throw new Error( - `shipengine.config.js deliveryConfirmationName: '${name}' does not exist`, + `connect.config.js deliveryConfirmationName: '${name}' does not exist`, ); return deliveryConfirmation; diff --git a/src/core/test-app/utils/find-delivery-service-by-name.ts b/src/core/test-app/utils/find-delivery-service-by-name.ts index 0b27628..2956c7d 100644 --- a/src/core/test-app/utils/find-delivery-service-by-name.ts +++ b/src/core/test-app/utils/find-delivery-service-by-name.ts @@ -17,7 +17,7 @@ export default function findDeliveryServiceByName( ); if (!deliveryService) throw new Error( - `shipengine.config.js deliveryServiceName: '${name}' does not exist`, + `connect.config.js deliveryServiceName: '${name}' does not exist`, ); return deliveryService; diff --git a/src/core/test-app/utils/find-packaging-by-name.ts b/src/core/test-app/utils/find-packaging-by-name.ts index 71c7b29..3c5d3a3 100644 --- a/src/core/test-app/utils/find-packaging-by-name.ts +++ b/src/core/test-app/utils/find-packaging-by-name.ts @@ -18,7 +18,7 @@ export default function findPackagingByName( ); if (!packaging) throw new Error( - `shipengine.config.js packagingName: '${name}' does not exist`, + `connect.config.js packagingName: '${name}' does not exist`, ); return packaging; diff --git a/templates/.npmignore-js b/templates/.npmignore-js index 4061164..6c1ad77 100644 --- a/templates/.npmignore-js +++ b/templates/.npmignore-js @@ -24,4 +24,4 @@ nbproject /test/tmp # Connect app specific -shipengine.config.js \ No newline at end of file +connect.config.js \ No newline at end of file diff --git a/templates/.npmignore-ts b/templates/.npmignore-ts index c5c1d56..0ec9ca1 100644 --- a/templates/.npmignore-ts +++ b/templates/.npmignore-ts @@ -25,4 +25,4 @@ nbproject # Connect app specific src -shipengine.config.js \ No newline at end of file +connect.config.js \ No newline at end of file diff --git a/templates/connect.config.js b/templates/connect.config.js new file mode 100644 index 0000000..f2e7315 --- /dev/null +++ b/templates/connect.config.js @@ -0,0 +1,20 @@ +module.exports = { + connectArgs: { + email: "testEmail@abc.com", + password: "testEmailPassword", + }, + timeout: 30000, + retries: 2, + debug: false, + failFast: true, + tests: { + createShipment_domestic: [ + { + weight: { + value: 10, + unit: "lb", + }, + } + ] + } +}; \ No newline at end of file diff --git a/templates/vscode/launch.json b/templates/vscode/launch.json index 25c015a..0187f44 100644 --- a/templates/vscode/launch.json +++ b/templates/vscode/launch.json @@ -5,7 +5,7 @@ "type": "node", "request": "launch", "name": "Start App", - "runtimeExecutable": "shipengine", + "runtimeExecutable": "connect", "args": [ "start" ], @@ -20,7 +20,7 @@ "type": "node", "request": "launch", "name": "Run Tests", - "runtimeExecutable": "shipengine", + "runtimeExecutable": "connect", "args": [ "test" ], diff --git a/test/specs/core/test-app/utils/find-delivery-confirmation-by-name.spec.js b/test/specs/core/test-app/utils/find-delivery-confirmation-by-name.spec.js index ec474e9..656a392 100644 --- a/test/specs/core/test-app/utils/find-delivery-confirmation-by-name.spec.js +++ b/test/specs/core/test-app/utils/find-delivery-confirmation-by-name.spec.js @@ -18,7 +18,7 @@ describe("findDeliveryConfirmationByName", () => { it("throws an error when a delivery confirmation does not exist for the given name", () => { expect(() => findDeliveryConfirmationByName("invalid", app)).to.throw( Error, - /shipengine.config.js deliveryConfirmationName:/, + /connect.config.js deliveryConfirmationName:/, ); }); }); diff --git a/test/specs/core/test-app/utils/find-delivery-service-by-name.spec.js b/test/specs/core/test-app/utils/find-delivery-service-by-name.spec.js index ab68faf..5ff0b2a 100644 --- a/test/specs/core/test-app/utils/find-delivery-service-by-name.spec.js +++ b/test/specs/core/test-app/utils/find-delivery-service-by-name.spec.js @@ -17,7 +17,7 @@ describe("findDeliveryServiceByName", () => { it("throws an error when a delivery service does not exist for the given name", () => { expect(() => findDeliveryServiceByName("invalid", app)).to.throw( Error, - /shipengine.config.js deliveryServiceName:/, + /connect.config.js deliveryServiceName:/, ); }); }); From e2e10e5420a2d06062bf7c86390ccdef5655214f Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 07:33:00 -0500 Subject: [PATCH 19/53] release v1.0.5 --- README.md | 18 +++++++++--------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9b744fd..2ab7b4c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.4 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.5 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/info.ts)_ ## `connect init [PATH]` @@ -99,7 +99,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/init.ts)_ ## `connect login` @@ -116,7 +116,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/login.ts)_ ## `connect logout` @@ -133,7 +133,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/logout.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.4/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 4263735..045458d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.4", + "version": "1.0.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7d3ba01..e44eb99 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.4", + "version": "1.0.5", "author": { "name": "ShipEngine", "email": "support@shipengine.com", From 7e2d8fdfba8529ca958b31ad136935b5dae45bc8 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 10:35:48 -0500 Subject: [PATCH 20/53] update to latest sdk formats --- .../find-matching-delivery-services-by-countries.ts | 6 +++--- test/specs/core/test-app/tests/rate-shipment.spec.js | 5 +++-- ...ind-matching-delivery-services-by-countries.spec.js | 10 +++++++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts index 47ffaab..eec03a0 100644 --- a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts +++ b/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts @@ -1,4 +1,4 @@ -import { Country, DeliveryService } from "@shipengine/integration-platform-sdk"; +import { Country, DeliveryService } from "@shipengine/connect-sdk"; /** * Find the shared origin and destination countries from an array of delivery services @@ -14,7 +14,7 @@ export function findMatchingDeliveryServicesByCountries(deliveryServices: Delive const filteredArray = []; - for (let country of acc) { + for (const country of acc) { if (currentDS.originCountries.includes(country)) { filteredArray.push(country); } @@ -28,7 +28,7 @@ export function findMatchingDeliveryServicesByCountries(deliveryServices: Delive const filteredArray = []; - for (let country of acc) { + for (const country of acc) { if (currentDS.destinationCountries.includes(country)) { filteredArray.push(country); } diff --git a/test/specs/core/test-app/tests/rate-shipment.spec.js b/test/specs/core/test-app/tests/rate-shipment.spec.js index df36875..bfeb7cb 100644 --- a/test/specs/core/test-app/tests/rate-shipment.spec.js +++ b/test/specs/core/test-app/tests/rate-shipment.spec.js @@ -1,7 +1,7 @@ "use strict"; const { RateShipment } = require("../../../../../lib/core/test-app/tests/rate-shipment"); -const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const { CarrierApp } = require("@shipengine/connect-sdk/lib/internal/carriers/carrier-app"); const pojo = require("../../../utils/pojo"); const { expect } = require("chai"); const sinon = require("sinon"); @@ -145,13 +145,14 @@ describe("The rate shipment test suite", () => { originCountries: ["MX"], destinationCountries: ["MX"], labelFormats: ["pdf"], + manifestType: "physical", labelSizes: ["A4"], packaging: [pojo.packaging()] }); staticConfigTests.rateShipment = { deliveryServiceName: "Better Delivery Service" - } + }; const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; diff --git a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js index ee97ba2..66d73b7 100644 --- a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js +++ b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js @@ -3,7 +3,7 @@ const { expect } = require("chai"); const pojo = require("../../../utils/pojo"); const { findMatchingDeliveryServicesByCountries } = require("../../../../../lib/core/test-app/utils/find-matching-delivery-services-by-countries"); -const { CarrierApp } = require("@shipengine/integration-platform-sdk/lib/internal/carriers/carrier-app"); +const { CarrierApp } = require("@shipengine/connect-sdk/lib/internal/carriers/carrier-app"); describe("findMatchingDeliveryServicesByCountries", () => { it("returns a set of origin and destination countries that all given delivery services share", () => { @@ -11,7 +11,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { const appDefinition = pojo.carrierApp(); const deliveryService = pojo.deliveryService(); appDefinition.deliveryServices = [deliveryService]; - + appDefinition.deliveryServices[0].originCountries = ["US", "MX", "CA"]; appDefinition.deliveryServices[0].destinationCountries = ["US", "MX", "CA"]; @@ -20,6 +20,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Another Delivery Service", class: "ground", grade: "standard", + manifestType: "digital", originCountries: ["US", "MX", "CA"], destinationCountries: ["US", "MX", "CA"], labelFormats: ["pdf"], @@ -32,6 +33,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Better Delivery Service", class: "ground", grade: "standard", + manifestType: "digital", originCountries: ["US", "MX"], destinationCountries: ["US", "MX"], packaging: [pojo.packaging()] @@ -62,7 +64,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { const appDefinition = pojo.carrierApp(); const deliveryService = pojo.deliveryService(); appDefinition.deliveryServices = [deliveryService]; - + appDefinition.deliveryServices[0].originCountries = ["US", "MX", "CA"]; appDefinition.deliveryServices[0].destinationCountries = ["US", "MX", "CA"]; @@ -71,6 +73,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Another Delivery Service", class: "ground", grade: "standard", + manifestType: "digital", originCountries: ["CA"], destinationCountries: ["CA"], packaging: [pojo.packaging()] @@ -81,6 +84,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Better Delivery Service", class: "ground", grade: "standard", + manifestType: "digital", originCountries: ["US", "MX"], destinationCountries: ["US", "MX"], packaging: [pojo.packaging()] From 0a0f39f780f2b283aa52eb69b1556867d5fc0b85 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 11:37:21 -0500 Subject: [PATCH 21/53] add rateShipment --- src/core/test-app/runner/config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index ed487d8..aa77492 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -16,10 +16,10 @@ export interface TestsConfig { | [CreateShipmentInternationalConfigOptions]; createShipment_multi_package?: CreateShipmentMultiPackageConfigOptions | [CreateShipmentMultiPackageConfigOptions]; createShipment_with_insurance?: CreateShipmentWithInsuranceConfigOptions | [CreateShipmentWithInsuranceConfigOptions]; - // rateShipment?: RateShipmentOptions | [RateShipmentOptions]; + rateShipment?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; // createShipment_multi_package?: TestOptions | [TestOptions]; - rateShipmentWithOneService?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; + // rateShipmentWithOneService?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; // trackShipment?: TestOptions | [TestOptions]; } From 62628b732268a411873fde784bae88c3dc4858ed Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 12:50:31 -0500 Subject: [PATCH 22/53] check that valid addresses are found --- .../test-app/utils/use-shipment-addresses.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/core/test-app/utils/use-shipment-addresses.ts b/src/core/test-app/utils/use-shipment-addresses.ts index 8b73cea..e0d3d0b 100644 --- a/src/core/test-app/utils/use-shipment-addresses.ts +++ b/src/core/test-app/utils/use-shipment-addresses.ts @@ -9,8 +9,18 @@ import { buildAddressWithContactInfo } from '../factories/address'; */ export default function useShipmentAddresses(deliveryService: DeliveryService): [AddressWithContactInfoPOJO | undefined, AddressWithContactInfoPOJO | undefined] { - const shipFrom = buildAddressWithContactInfo(`${deliveryService.originCountries[0]}-from`); - const shipTo = buildAddressWithContactInfo(`${deliveryService.destinationCountries[0]}-to`) - return [shipFrom, shipTo]; + for(const oc of deliveryService.originCountries) { + const shipFrom = buildAddressWithContactInfo(`${oc}-from`); + + for(const dc of deliveryService.destinationCountries) { + const shipTo = buildAddressWithContactInfo(`${dc}-to`); + + if (shipFrom && shipTo) { + return [shipFrom, shipTo]; + } + } + } + + return [undefined, undefined]; } From 12e4ded3e61970a1b0102220c3e957307a6531d9 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 13:40:16 -0500 Subject: [PATCH 23/53] add "sec" alias --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e44eb99..61ba5ec 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "url": "https://www.shipengine.com" }, "bin": { - "connect": "./bin/run" + "connect": "./bin/run", + "sec": "./bin/run" }, "bugs": "https://github.com/ShipEngine/connect-cli/issues", "dependencies": { From 6e61bdad34235afd411f22f0f3c9f5772dbefb10 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 13:41:39 -0500 Subject: [PATCH 24/53] release v1.0.6 --- .vscode/launch.json | 6 ++++-- README.md | 18 +++++++++--------- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index ab638f8..78470d4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,6 +13,7 @@ "internalConsoleOptions": "openOnSessionStart", "skipFiles": [ "/**" + ] }, { @@ -22,14 +23,15 @@ "skipFiles": [ "/**" ], + "smartStep": true, "console": "integratedTerminal", "internalConsoleOptions": "openOnSessionStart", "program": "${workspaceFolder}/bin/run", "args": [ "test", - "-g multi" + "-g rate" ], - "cwd": "/home/rkrauskopf/repos/connect-sample-apps/parcel-post" + "cwd": "/home/rkrauskopf/repos/connect-samples/cargo-inc" } ] } \ No newline at end of file diff --git a/README.md b/README.md index 2ab7b4c..fbbfd53 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.5 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.6 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/info.ts)_ ## `connect init [PATH]` @@ -99,7 +99,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/init.ts)_ ## `connect login` @@ -116,7 +116,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/login.ts)_ ## `connect logout` @@ -133,7 +133,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/logout.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.5/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 045458d..466f853 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 61ba5ec..3a5f46c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.5", + "version": "1.0.6", "author": { "name": "ShipEngine", "email": "support@shipengine.com", From 6440dd3355c9bc30de6193fd764ab072f32e68fa Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 15:52:06 -0500 Subject: [PATCH 25/53] update to latest sdk changes --- package-lock.json | 58 ++++++++++++++----- package.json | 8 +-- .../apps/carrier/missing-name/carrier.js | 2 +- .../apps/carrier/missing-pjson/carrier.js | 1 + .../apps/carrier/missing-sdk/carrier.js | 1 + test/fixtures/apps/carrier/valid/carrier.js | 1 + .../delivery-services/delivery-services.json | 1 + .../delivery-services/delivery-services.yaml | 1 + .../delivery-services/priority-overnight.yaml | 1 + .../tests/create-shipment-domestic.spec.js | 2 + .../create-shipment-international.spec.js | 2 + .../create-shipment-multipackage.spec.js | 2 + .../create-shipment-with-insurance.spec.js | 3 + 13 files changed, 65 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 466f853..665e4eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.0.tgz", - "integrity": "sha512-He2HZ+9ZQt0Bq418ol9A33ntV3xgJOAKGkmvO1P/NptjAbq/LhXfyHbuvJQRkZMcFChKflWvDVqvkUHSqVT0jw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.2.tgz", + "integrity": "sha512-PzDea9QYsV4OvjeLIjQzvChwv9CM11y6V/4k0upTXc5a3DPr2fFQNLXl+8PMWTdkMdoTcKEFMyFIu+Ij8zL0Lw==", "requires": { - "@shipengine/connect-sdk": "1.0.0", + "@shipengine/connect-sdk": "^1.0.1", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,21 +1175,53 @@ } }, "@shipengine/connect-local-dev-api": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.0.tgz", - "integrity": "sha512-MsFLQKKX8M95fTbQzwWy4Kk2dluq86F49V8Egl13vAL71ZXThZu5/g7WOnm0WuGxTqAPHyJUXY8Fi9Dq893V3w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.4.tgz", + "integrity": "sha512-DJiLfXXymJ+8VNJR3HK6aWKW/F/g6Hz6Tgi8iiC/0yU2MLWp4siFpruAYu+2C6SbF7WQwzMlpdhmpZR+Zqm/wA==", "requires": { "@shipengine/connect-loader": "1.0.0", "chai": "^4.2.0", "chalk": "^4.1.0", "cors": "^2.8.5", "express": "^4.17.1" + }, + "dependencies": { + "@shipengine/connect-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.0.tgz", + "integrity": "sha512-He2HZ+9ZQt0Bq418ol9A33ntV3xgJOAKGkmvO1P/NptjAbq/LhXfyHbuvJQRkZMcFChKflWvDVqvkUHSqVT0jw==", + "requires": { + "@shipengine/connect-sdk": "1.0.0", + "js-yaml": "^3.14.0", + "json5": "^2.1.3", + "resolve-from": "^5.0.0", + "source-map-support": "^0.5.16" + } + }, + "@shipengine/connect-sdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.0.tgz", + "integrity": "sha512-SggUfmywiRGqqUAQ6jtG0jQ2xpff4le6OdIcgOtY+nsgTnzQc5TcaO3osTQN+Lyt2UQSNVu6oRsk2KtJqVvvGQ==", + "requires": { + "@hapi/joi": "^17.1.1", + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.5", + "@types/react-jsonschema-form": "^1.7.4", + "currency.js": "^2.0.2", + "moment-timezone": "^0.5.31" + } + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + } } }, "@shipengine/connect-sdk": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.0.tgz", - "integrity": "sha512-SggUfmywiRGqqUAQ6jtG0jQ2xpff4le6OdIcgOtY+nsgTnzQc5TcaO3osTQN+Lyt2UQSNVu6oRsk2KtJqVvvGQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.1.tgz", + "integrity": "sha512-fZnGPPa/RsfSDyEhQ7emrrNKCozjSyvAS3U5hYw2JT19gIRCVzupxQDDG3YdRdrO1lyYhSapl2PgNbptGly1ZQ==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", @@ -6285,9 +6317,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "lodash._reinterpolate": { "version": "3.0.0", diff --git a/package.json b/package.json index 3a5f46c..bc8e20e 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "1.0.0", - "@shipengine/connect-sdk": "1.0.0", - "@shipengine/connect-local-dev-api": "1.0.0", + "@shipengine/connect-loader": "^1.0.2", + "@shipengine/connect-local-dev-api": "^1.0.4", + "@shipengine/connect-sdk": "^1.0.1", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", @@ -34,7 +34,7 @@ "joi": "^17.2.0", "js-yaml": "^3.14.0", "json5": "^2.1.3", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "luxon": "^1.24.1", "mocha": "^8.1.1", "netrc": "^0.1.4", diff --git a/test/fixtures/apps/carrier/missing-name/carrier.js b/test/fixtures/apps/carrier/missing-name/carrier.js index 13f3e16..8e59aea 100644 --- a/test/fixtures/apps/carrier/missing-name/carrier.js +++ b/test/fixtures/apps/carrier/missing-name/carrier.js @@ -16,7 +16,7 @@ module.exports = { name: "Priority Overnight", class: "ground", grade: "overnight", - + code: "priority_overnight", originCountries: ["US"], destinationCountries: ["US", "CA", "MX"], packaging: [ diff --git a/test/fixtures/apps/carrier/missing-pjson/carrier.js b/test/fixtures/apps/carrier/missing-pjson/carrier.js index 13f3e16..93e58e2 100644 --- a/test/fixtures/apps/carrier/missing-pjson/carrier.js +++ b/test/fixtures/apps/carrier/missing-pjson/carrier.js @@ -16,6 +16,7 @@ module.exports = { name: "Priority Overnight", class: "ground", grade: "overnight", + code: "priority_overnight", originCountries: ["US"], destinationCountries: ["US", "CA", "MX"], diff --git a/test/fixtures/apps/carrier/missing-sdk/carrier.js b/test/fixtures/apps/carrier/missing-sdk/carrier.js index 13f3e16..93e58e2 100644 --- a/test/fixtures/apps/carrier/missing-sdk/carrier.js +++ b/test/fixtures/apps/carrier/missing-sdk/carrier.js @@ -16,6 +16,7 @@ module.exports = { name: "Priority Overnight", class: "ground", grade: "overnight", + code: "priority_overnight", originCountries: ["US"], destinationCountries: ["US", "CA", "MX"], diff --git a/test/fixtures/apps/carrier/valid/carrier.js b/test/fixtures/apps/carrier/valid/carrier.js index 254dff6..90b1ddd 100644 --- a/test/fixtures/apps/carrier/valid/carrier.js +++ b/test/fixtures/apps/carrier/valid/carrier.js @@ -15,6 +15,7 @@ module.exports = { { id: "2a20b066-71c3-11ea-bc55-0242ac130003", name: "Priority Overnight", + code: "priority_overnight", class: "ground", grade: "overnight", originCountries: ["US"], diff --git a/test/fixtures/configs/delivery-services/delivery-services.json b/test/fixtures/configs/delivery-services/delivery-services.json index 1e2186e..27994c5 100644 --- a/test/fixtures/configs/delivery-services/delivery-services.json +++ b/test/fixtures/configs/delivery-services/delivery-services.json @@ -3,6 +3,7 @@ "id": "2a20b066-71c3-11ea-bc55-0242ac130003", "name": "Priority Overnight", "class": "ground", + "code": "priority_overnight", "grade": "overnight", "manifestType": "digital", "originCountries": [ diff --git a/test/fixtures/configs/delivery-services/delivery-services.yaml b/test/fixtures/configs/delivery-services/delivery-services.yaml index 7b37e91..d45403d 100644 --- a/test/fixtures/configs/delivery-services/delivery-services.yaml +++ b/test/fixtures/configs/delivery-services/delivery-services.yaml @@ -2,6 +2,7 @@ name: Priority Overnight class: ground grade: overnight + code: priority_overnight originCountries: - US diff --git a/test/fixtures/configs/delivery-services/priority-overnight.yaml b/test/fixtures/configs/delivery-services/priority-overnight.yaml index 8360737..eec716a 100644 --- a/test/fixtures/configs/delivery-services/priority-overnight.yaml +++ b/test/fixtures/configs/delivery-services/priority-overnight.yaml @@ -3,6 +3,7 @@ name: Priority Overnight class: ground grade: overnight manifestType: digital +code: priority_overnight originCountries: - US destinationCountries: diff --git a/test/specs/core/test-app/tests/create-shipment-domestic.spec.js b/test/specs/core/test-app/tests/create-shipment-domestic.spec.js index 8d16d8f..b6c61b0 100644 --- a/test/specs/core/test-app/tests/create-shipment-domestic.spec.js +++ b/test/specs/core/test-app/tests/create-shipment-domestic.spec.js @@ -166,6 +166,7 @@ describe("The create shipment domestic test suite", () => { id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", name: "Better Delivery Service", class: "ground", + code: "better_ds", grade: "standard", manifestType: "physical", originCountries: ["MX"], @@ -327,6 +328,7 @@ function generateBasicAppAndConfigs() { const deliveryService = pojo.deliveryService(); deliveryService.manifestType = "digital"; deliveryService.labelFormats = ["pdf"]; + deliveryService.code = "priority_overnight"; deliveryService.labelSizes = ["A4"]; deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; deliveryService.packaging.push(pojo.packaging()); diff --git a/test/specs/core/test-app/tests/create-shipment-international.spec.js b/test/specs/core/test-app/tests/create-shipment-international.spec.js index 43d6b53..b75fa1d 100644 --- a/test/specs/core/test-app/tests/create-shipment-international.spec.js +++ b/test/specs/core/test-app/tests/create-shipment-international.spec.js @@ -196,6 +196,7 @@ describe("The create shipment international test suite", () => { id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", name: "Better Delivery Service", class: "ground", + code: "priority_overnight", grade: "standard", manifestType: "digital", originCountries: ["MX"], @@ -322,6 +323,7 @@ function generateBasicAppAndConfigs() { deliveryService.manifestType = "physical"; deliveryService.labelFormats = ["pdf"]; deliveryService.labelSizes = ["A4"]; + deliveryService.code = "priority_overnight"; deliveryService.destinationCountries = ["AQ","MX"]; deliveryService.originCountries = ["US", "MX"]; appDefinition.createShipment = () => { }; diff --git a/test/specs/core/test-app/tests/create-shipment-multipackage.spec.js b/test/specs/core/test-app/tests/create-shipment-multipackage.spec.js index 8a49c8c..1d21bff 100644 --- a/test/specs/core/test-app/tests/create-shipment-multipackage.spec.js +++ b/test/specs/core/test-app/tests/create-shipment-multipackage.spec.js @@ -245,6 +245,7 @@ describe("The create shipment multipackage test suite", () => { name: "Better Delivery Service", class: "ground", grade: "standard", + code: "better_ds", manifestType: "digital", allowsMultiplePackages: true, originCountries: ["MX"], @@ -371,6 +372,7 @@ function generateBasicAppAndConfigs() { const deliveryService = pojo.deliveryService(); deliveryService.labelFormats = ["pdf"]; deliveryService.labelSizes = ["A4"]; + deliveryService.code = "priority_overnight"; deliveryService.allowsMultiplePackages = true; deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; appDefinition.deliveryServices = [deliveryService]; diff --git a/test/specs/core/test-app/tests/create-shipment-with-insurance.spec.js b/test/specs/core/test-app/tests/create-shipment-with-insurance.spec.js index 7fda037..fd1ae62 100644 --- a/test/specs/core/test-app/tests/create-shipment-with-insurance.spec.js +++ b/test/specs/core/test-app/tests/create-shipment-with-insurance.spec.js @@ -172,6 +172,7 @@ describe("The create shipment insured test suite", () => { id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", isInsurable: false, name: "Uninsured Delivery Service", + code: "uninsured_ds", class: "ground", manifestType: "digital", grade: "standard", @@ -208,6 +209,7 @@ describe("The create shipment insured test suite", () => { name: "Better Delivery Service", manifestType: "digital", class: "ground", + code: "priority_overnight", grade: "standard", originCountries: ["MX"], destinationCountries: ["MX"], @@ -333,6 +335,7 @@ function generateBasicAppAndConfigs() { deliveryService.manifestType = "digital"; deliveryService.labelSizes = ["A4"]; deliveryService.isInsurable = true; + deliveryService.code = "priority_overnight"; deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; deliveryService.packaging.push(pojo.packaging()); appDefinition.deliveryServices = [deliveryService]; From 6d7b08a9c245d8600cae5f008231f1ccfb2ec0b5 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 15:53:45 -0500 Subject: [PATCH 26/53] release v1.0.7 --- README.md | 18 +++++++++--------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index fbbfd53..d95340e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.6 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.7 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/info.ts)_ ## `connect init [PATH]` @@ -99,7 +99,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/init.ts)_ ## `connect login` @@ -116,7 +116,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/login.ts)_ ## `connect logout` @@ -133,7 +133,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/logout.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.6/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 665e4eb..f082820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index bc8e20e..1f74fa5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "ShipEngine", "email": "support@shipengine.com", From f58d112ec38b4a7c3137780eaaef70014601ccde Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 18:21:14 -0500 Subject: [PATCH 27/53] update unit tests to match new sdk --- test/specs/core/test-app/tests/rate-shipment.spec.js | 1 + .../find-matching-delivery-services-by-countries.spec.js | 4 ++++ test/specs/utils/pojo.js | 1 + 3 files changed, 6 insertions(+) diff --git a/test/specs/core/test-app/tests/rate-shipment.spec.js b/test/specs/core/test-app/tests/rate-shipment.spec.js index bfeb7cb..a393a1c 100644 --- a/test/specs/core/test-app/tests/rate-shipment.spec.js +++ b/test/specs/core/test-app/tests/rate-shipment.spec.js @@ -142,6 +142,7 @@ describe("The rate shipment test suite", () => { name: "Better Delivery Service", class: "ground", grade: "standard", + code: "better_ds", originCountries: ["MX"], destinationCountries: ["MX"], labelFormats: ["pdf"], diff --git a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js index 66d73b7..f7269cb 100644 --- a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js +++ b/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js @@ -20,6 +20,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Another Delivery Service", class: "ground", grade: "standard", + code: "ad", manifestType: "digital", originCountries: ["US", "MX", "CA"], destinationCountries: ["US", "MX", "CA"], @@ -31,6 +32,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { appDefinition.deliveryServices.push({ id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", name: "Better Delivery Service", + code: "bd", class: "ground", grade: "standard", manifestType: "digital", @@ -73,6 +75,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { name: "Another Delivery Service", class: "ground", grade: "standard", + code: "ad", manifestType: "digital", originCountries: ["CA"], destinationCountries: ["CA"], @@ -83,6 +86,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", name: "Better Delivery Service", class: "ground", + code: "bd", grade: "standard", manifestType: "digital", originCountries: ["US", "MX"], diff --git a/test/specs/utils/pojo.js b/test/specs/utils/pojo.js index 7b8a751..eebdfaa 100644 --- a/test/specs/utils/pojo.js +++ b/test/specs/utils/pojo.js @@ -55,6 +55,7 @@ const pojo = module.exports = { name: "Dummy Delivery Service", class: "ground", grade: "standard", + code: "dummy_code", originCountries: ["US"], destinationCountries: ["US"], manifestType: "physical", From 86adb445f7ab5eaeb4f809f3034a3636c1edbc23 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 22:12:36 -0500 Subject: [PATCH 28/53] small update --- src/core/test-app/runner/config/rate-shipment.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/core/test-app/runner/config/rate-shipment.ts b/src/core/test-app/runner/config/rate-shipment.ts index 7725c98..f080837 100644 --- a/src/core/test-app/runner/config/rate-shipment.ts +++ b/src/core/test-app/runner/config/rate-shipment.ts @@ -1,7 +1,7 @@ import { DateTimeZonePOJO, AddressWithContactInfoPOJO, - WeightUnit, + WeightPOJO, } from "@shipengine/connect-sdk"; import { BaseTestConfigOptions } from "./base-test-config-options"; @@ -9,10 +9,7 @@ export interface RateShipmentTestParams { deliveryServiceName: string; shipFrom: AddressWithContactInfoPOJO; shipTo: AddressWithContactInfoPOJO; - weight: { - value: number; - unit: WeightUnit; - }; + weight: WeightPOJO; shipDateTime: DateTimeZonePOJO | Date | string; packagingName: string; } From 0846b65809bbdf1e0b0353bf65f5eb2d6a140c39 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 13 Aug 2020 22:17:04 -0500 Subject: [PATCH 29/53] rename to be more semantic --- ... find-matching-origin-and-destination-countries.ts} | 2 +- ...-matching-origin-and-destination-countries.spec.js} | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/core/test-app/utils/{find-matching-delivery-services-by-countries.ts => find-matching-origin-and-destination-countries.ts} (93%) rename test/specs/core/test-app/utils/{find-matching-delivery-services-by-countries.spec.js => find-matching-origin-and-destination-countries.spec.js} (86%) diff --git a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts b/src/core/test-app/utils/find-matching-origin-and-destination-countries.ts similarity index 93% rename from src/core/test-app/utils/find-matching-delivery-services-by-countries.ts rename to src/core/test-app/utils/find-matching-origin-and-destination-countries.ts index eec03a0..cd5a339 100644 --- a/src/core/test-app/utils/find-matching-delivery-services-by-countries.ts +++ b/src/core/test-app/utils/find-matching-origin-and-destination-countries.ts @@ -3,7 +3,7 @@ import { Country, DeliveryService } from "@shipengine/connect-sdk"; /** * Find the shared origin and destination countries from an array of delivery services */ -export function findMatchingDeliveryServicesByCountries(deliveryServices: DeliveryService[]) +export function findMatchingOriginAndDestinationCountries(deliveryServices: DeliveryService[]) : { originCountries: Country[]; destinationCountries: Country[] } { if(deliveryServices.length < 2) { diff --git a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js b/test/specs/core/test-app/utils/find-matching-origin-and-destination-countries.spec.js similarity index 86% rename from test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js rename to test/specs/core/test-app/utils/find-matching-origin-and-destination-countries.spec.js index f7269cb..4787a38 100644 --- a/test/specs/core/test-app/utils/find-matching-delivery-services-by-countries.spec.js +++ b/test/specs/core/test-app/utils/find-matching-origin-and-destination-countries.spec.js @@ -2,10 +2,10 @@ const { expect } = require("chai"); const pojo = require("../../../utils/pojo"); -const { findMatchingDeliveryServicesByCountries } = require("../../../../../lib/core/test-app/utils/find-matching-delivery-services-by-countries"); +const { findMatchingOriginAndDestinationCountries } = require("../../../../../lib/core/test-app/utils/find-matching-origin-and-destination-countries"); const { CarrierApp } = require("@shipengine/connect-sdk/lib/internal/carriers/carrier-app"); -describe("findMatchingDeliveryServicesByCountries", () => { +describe("findMatchingOriginAndDestinationCountries", () => { it("returns a set of origin and destination countries that all given delivery services share", () => { const appDefinition = pojo.carrierApp(); @@ -43,7 +43,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { const app = new CarrierApp(appDefinition); - const results = findMatchingDeliveryServicesByCountries(app.deliveryServices); + const results = findMatchingOriginAndDestinationCountries(app.deliveryServices); expect(results.originCountries).to.be.eql(["US", "MX"]); expect(results.destinationCountries).to.be.eql(["US", "MX"]); }); @@ -55,7 +55,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { const app = new CarrierApp(appDefinition); - expect(() => findMatchingDeliveryServicesByCountries(app.deliveryServices)).to.throw( + expect(() => findMatchingOriginAndDestinationCountries(app.deliveryServices)).to.throw( Error, /Multiple Delivery Services must be specified/, ); @@ -96,7 +96,7 @@ describe("findMatchingDeliveryServicesByCountries", () => { const app = new CarrierApp(appDefinition); - expect(() => findMatchingDeliveryServicesByCountries(app.deliveryServices)).to.throw( + expect(() => findMatchingOriginAndDestinationCountries(app.deliveryServices)).to.throw( Error, /Specified delivery services do not share origin and destination countries/, ); From 3f84c09a8d89cc9c30f5aceb348e9d823a7b8c93 Mon Sep 17 00:00:00 2001 From: Mandy Hubbard Date: Fri, 14 Aug 2020 07:43:08 -0500 Subject: [PATCH 30/53] Remove references to .env and dependenceies --- src/core/generators/apps-new.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/core/generators/apps-new.ts b/src/core/generators/apps-new.ts index faae74c..19e3771 100644 --- a/src/core/generators/apps-new.ts +++ b/src/core/generators/apps-new.ts @@ -259,11 +259,6 @@ class AppsNew extends Generator { ); } - this.fs.copyTpl( - this.templatePath(".env.test"), - this.destinationPath(".env.test"), - this, - ); this.fs.copyTpl( this.templatePath("shipengine.config.js"), @@ -555,8 +550,6 @@ class AppsNew extends Generator { const devDependencies: string[] = []; devDependencies.push("@shipengine/connect-sdk"); - devDependencies.push("dotenv-flow@3.1.0"); - devDependencies.push("cross-env"); if (this.ts) { devDependencies.push("@types/node@^13.13.5"); From 4d395a838c247380df3eae69b06a966379fe9836 Mon Sep 17 00:00:00 2001 From: James Messinger Date: Fri, 14 Aug 2020 10:21:42 -0500 Subject: [PATCH 31/53] re-enabled coveralls --- .github/workflows/CI-CD.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/CI-CD.yaml b/.github/workflows/CI-CD.yaml index f1f9294..d67d81a 100644 --- a/.github/workflows/CI-CD.yaml +++ b/.github/workflows/CI-CD.yaml @@ -52,23 +52,23 @@ jobs: - name: Run tests run: npm run coverage - # - name: Send code coverage results to Coveralls - # uses: coverallsapp/github-action@v1.1.0 - # with: - # github-token: ${{ secrets.GITHUB_TOKEN }} - # parallel: true - - # coverage: - # name: Code Coverage - # runs-on: ubuntu-latest - # timeout-minutes: 10 - # needs: test - # steps: - # - name: Let Coveralls know that all tests have finished - # uses: coverallsapp/github-action@v1.1.0 - # with: - # github-token: ${{ secrets.GITHUB_TOKEN }} - # parallel-finished: true + - name: Send code coverage results to Coveralls + uses: coverallsapp/github-action@v1.1.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel: true + + coverage: + name: Code Coverage + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: test + steps: + - name: Let Coveralls know that all tests have finished + uses: coverallsapp/github-action@v1.1.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true deploy: name: Publish to NPM From f96780f82f05e9e353d58de17c9b9b45804e73e6 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Mon, 17 Aug 2020 12:23:39 -0500 Subject: [PATCH 32/53] release v1.0.8 --- README.md | 18 +++++++------- package-lock.json | 61 +++++++++++++++++++++++------------------------ package.json | 16 ++++++------- 3 files changed, 47 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index d95340e..1c7f50d 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.7 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.8 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -74,7 +74,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/info.ts)_ ## `connect init [PATH]` @@ -99,7 +99,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/init.ts)_ ## `connect login` @@ -116,7 +116,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/login.ts)_ ## `connect logout` @@ -133,7 +133,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/logout.ts)_ ## `connect publish` @@ -152,7 +152,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +167,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/start.ts)_ ## `connect test` @@ -190,7 +190,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +207,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.7/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index f082820..69b4911 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.7", + "version": "1.0.8", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.2.tgz", - "integrity": "sha512-PzDea9QYsV4OvjeLIjQzvChwv9CM11y6V/4k0upTXc5a3DPr2fFQNLXl+8PMWTdkMdoTcKEFMyFIu+Ij8zL0Lw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.4.tgz", + "integrity": "sha512-xLk8UTAvDgGMxau3WR+FW8WX2IfEs3AP3+pSYOUqjS8n0joTaNl0+HkZfG/vg5N0bs4o8UYEMD6cA1VGnYrYFg==", "requires": { - "@shipengine/connect-sdk": "^1.0.1", + "@shipengine/connect-sdk": "^1.0.2", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1219,9 +1219,9 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.1.tgz", - "integrity": "sha512-fZnGPPa/RsfSDyEhQ7emrrNKCozjSyvAS3U5hYw2JT19gIRCVzupxQDDG3YdRdrO1lyYhSapl2PgNbptGly1ZQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.2.tgz", + "integrity": "sha512-cdcJIAUuy96EDak1itH9DSr8aF+Uzrl+DjrHQcqlDUtJg3B3vSDYSE49DxnzcAIbT7UFNriNOkQJmVjoHiDYLQ==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", @@ -1457,9 +1457,9 @@ "dev": true }, "@types/node": { - "version": "14.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", - "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==" + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", + "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==" }, "@types/nodemon": { "version": "1.19.0", @@ -1569,9 +1569,9 @@ } }, "@types/yeoman-environment": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yeoman-environment/-/yeoman-environment-2.10.0.tgz", - "integrity": "sha512-G/3JOuUhcZRFg/l1cHyn+Vht63cHLG0mQ3VYhbBlbkpf8kIxQs4nLFIYaCCiTE3YzedKvYPBPeUWf34rg6sQmQ==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@types/yeoman-environment/-/yeoman-environment-2.10.1.tgz", + "integrity": "sha512-kQsGzveMwoP/MnipjggDT77ozoq592bDLastlGX8FT/8mwpJ1I6C9y4duk8KxxaO0JNTOGy9rC/ghd7BWG6YmQ==", "dev": true, "requires": { "@types/diff": "*", @@ -1584,9 +1584,9 @@ } }, "@types/yeoman-generator": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@types/yeoman-generator/-/yeoman-generator-4.11.1.tgz", - "integrity": "sha512-LDRtLu/AsBIr5hWvuDrjv73gBacOhmbgy/qlqNu++b3bZ23BHMkYGc+fTVIi3DK6exxu+BZYhWtBmQpI0mKVbg==", + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@types/yeoman-generator/-/yeoman-generator-4.11.2.tgz", + "integrity": "sha512-9QYsdVTLlUHg+aiDT1uqWf63oQXedCT4ty5L4KC4nd8gsp1Ef9UdXxpcc4yBU9ciRf4DqE1pViqxc6LTSosdsg==", "dev": true, "requires": { "@types/debug": "*", @@ -3647,9 +3647,9 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", - "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", + "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -3986,9 +3986,9 @@ }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } @@ -6198,9 +6198,9 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", "requires": { "rc": "^1.2.8" } @@ -7458,8 +7458,7 @@ }, "dot-prop": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "resolved": "", "dev": true, "requires": { "is-obj": "^1.0.0" @@ -10720,9 +10719,9 @@ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "update-notifier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", - "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz", + "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==", "requires": { "boxen": "^4.2.0", "chalk": "^3.0.0", diff --git a/package.json b/package.json index 1f74fa5..dad73e0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.7", + "version": "1.0.8", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.2", + "@shipengine/connect-loader": "^1.0.4", "@shipengine/connect-local-dev-api": "^1.0.4", - "@shipengine/connect-sdk": "^1.0.1", + "@shipengine/connect-sdk": "^1.0.2", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", @@ -46,7 +46,7 @@ "recursive-readdir": "^2.2.2", "sort-pjson": "^1.0.3", "tslib": "^2.0.1", - "update-notifier": "^4.1.0", + "update-notifier": "^4.1.1", "uuid": "^8.3.0", "yeoman-environment": "^2.10.3", "yeoman-generator": "^4.11.0" @@ -66,18 +66,18 @@ "@types/json5": "0.0.30", "@types/luxon": "^1.24.1", "@types/mocha": "^8.0.2", - "@types/node": "^14.0.27", + "@types/node": "^14.6.0", "@types/nodemon": "^1.19.0", "@types/recursive-readdir": "^2.2.0", "@types/update-notifier": "^4.1.1", "@types/uuid": "^8.3.0", - "@types/yeoman-environment": "^2.10.0", - "@types/yeoman-generator": "^4.11.1", + "@types/yeoman-environment": "^2.10.1", + "@types/yeoman-generator": "^4.11.2", "@types/yeoman-test": "^2.0.4", "body-parser": "^1.19.0", "chai-as-promised": "^7.1.1", "chai-fs": "^2.0.0", - "eslint": "^7.6.0", + "eslint": "^7.7.0", "eslint-config-oclif": "^3.1.0", "eslint-config-oclif-typescript": "^0.2.0", "eslint-config-prettier": "^6.11.0", From c3518c86c5708baa0514f08b7ca132ad4f3bff67 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Mon, 17 Aug 2020 12:55:43 -0500 Subject: [PATCH 33/53] add package command --- package-lock.json | 78 +++++++++++++++++++++ package.json | 1 + src/commands/pack.ts | 50 +++++++++++++ src/core/package-app.ts | 73 +++++++++++++++++++ src/core/publish-app.ts | 25 +------ src/core/publish-app/package-app.ts | 37 ---------- test/specs/core/package-app.spec.js | 54 ++++++++++++++ test/specs/core/publish/package-app.spec.js | 43 ------------ 8 files changed, 258 insertions(+), 103 deletions(-) create mode 100644 src/commands/pack.ts create mode 100644 src/core/package-app.ts delete mode 100644 src/core/publish-app/package-app.ts create mode 100644 test/specs/core/package-app.spec.js delete mode 100644 test/specs/core/publish/package-app.spec.js diff --git a/package-lock.json b/package-lock.json index f082820..f565bb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4796,6 +4796,15 @@ } } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6823,6 +6832,41 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -10340,6 +10384,40 @@ } } }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "tar-fs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", diff --git a/package.json b/package.json index 1f74fa5..b42cf15 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "shx": "^0.3.2", "sinon": "^9.0.3", "source-map-support": "^0.5.17", + "tar": "^6.0.5", "ts-node": "^8.10.2", "typescript": "^3.9.7", "yeoman-assert": "^3.1.1", diff --git a/src/commands/pack.ts b/src/commands/pack.ts new file mode 100644 index 0000000..b29393d --- /dev/null +++ b/src/commands/pack.ts @@ -0,0 +1,50 @@ +import BaseCommand from "../base-command"; +import Test from "./test"; +import { flags } from "@oclif/command"; +import { checkAppLoginStatus } from "../core/utils/users"; +import { packageApp } from '../core/package-app'; + +export default class Publish extends BaseCommand { + static description = "package your app"; + + static examples = ["$ connect pack"]; + + // TODO: come up with a convention for turning off spinners if the user desires + // TODO: implement a quiet command? + static flags = { + help: flags.help({ + char: "h", + description: "show help for the pack command", + }), + "skip-tests": flags.boolean({ + char: "s", + description: "skip running the test before publishing", + default: false, + }) + }; + + async run() { + // When the -h flag is present the following line haults execution + const { flags } = this.parse(Publish); + + await checkAppLoginStatus(this); + + if (!flags["skip-tests"]) await Test.run(["-f"]); + + try { + const pathToApp = process.cwd(); + + await packageApp(pathToApp); + + } catch (error) { + switch (error.code) { + case "APP_FAILED_TO_PACKAGE": + return this.error(error.message, { + exit: 1, + }); + default: + throw error; + } + } + } +} diff --git a/src/core/package-app.ts b/src/core/package-app.ts new file mode 100644 index 0000000..3ccf279 --- /dev/null +++ b/src/core/package-app.ts @@ -0,0 +1,73 @@ +import * as fs from "fs"; +import * as path from "path"; +import util from "util"; +import { exec } from "child_process"; +import cli from "cli-ux"; +import logSymbols from "log-symbols"; + + +const asyncExec = util.promisify(exec); + +/** + * This function is used for add all dependencies in the package.json app to the bundled dependencies property + * and then running npm pack to create a tarball for deploying to the connect platform. + */ +export async function packageApp(cwd?: string): Promise { + const currentDir = cwd ? cwd : process.cwd(); + + const packagePath = path.join(currentDir, "package.json"); + + // Make a backup copy of the package.json file since we are going to add the bundledDependencies attribute + const pJsonBackup = await fs.promises.readFile(packagePath); + + cli.action.start("packaging app"); + + const results = await fs.promises.readFile(packagePath, "utf-8"); + const pjson = JSON.parse(results); + + // take dependencies and move them to bundledDependencies + pjson.bundledDependencies = []; + + if (pjson.dependencies) { + for (const dependency of Object.keys(pjson.dependencies)) { + pjson.bundledDependencies.push(dependency); + } + + await fs.promises.writeFile( + packagePath, + JSON.stringify(pjson, undefined, 2), + ); + } + + let stdout; + + try { + const results = await asyncExec("npm pack", { cwd: currentDir }); + stdout = results.stdout; + + } catch (error) { + const errorMessage = `unable to bundle dependencies and package app: ${error.message}`; + throw new AppFailedToPackageError(errorMessage); + } finally { + // Restore the package.json backup + await fs.promises.writeFile(packagePath, + pJsonBackup, + ); + } + + cli.action.stop(`${logSymbols.success}`); + + return stdout.trim(); +} + + +export class AppFailedToPackageError extends Error { + code: string; + + constructor(message: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = AppFailedToPackageError.name; // stack traces display correctly now + this.code = "APP_FAILED_TO_PACKAGE"; + } +} \ No newline at end of file diff --git a/src/core/publish-app.ts b/src/core/publish-app.ts index 7263a44..f7f733c 100644 --- a/src/core/publish-app.ts +++ b/src/core/publish-app.ts @@ -5,7 +5,7 @@ import logSymbols from "log-symbols"; import path from "path"; import { Deployment, DeploymentStatus } from "./types"; import { loadApp } from "@shipengine/connect-loader"; -import { packageApp } from "./publish-app/package-app"; +import { packageApp } from "./package-app"; import { watchDeployment } from "./publish-app/watch-deployment"; import { green, red } from "chalk"; @@ -41,29 +41,8 @@ export default async function publishApp( { watch = false }: PublishAppOptions, ): Promise { - // Make a backup copy of the package.json file since we are going to add the bundledDependencies attribute - const pJsonBackup = await fs.promises.readFile( - path.join(pathToApp, "package.json"), - ); + const tarballName = await packageApp(); - cli.action.start("packaging app"); - - let tarballName: string; - - try { - tarballName = await packageApp(); - } catch (error) { - const errorMessage = `unable to bundle dependencies and package app: ${error.message}`; - throw new AppFailedToPackageError(errorMessage); - } finally { - // Restore the package.json backup - await fs.promises.writeFile( - path.join(pathToApp, "package.json"), - pJsonBackup, - ); - } - - cli.action.stop(`${logSymbols.success}`); cli.action.start("publishing app"); let newDeployment; diff --git a/src/core/publish-app/package-app.ts b/src/core/publish-app/package-app.ts deleted file mode 100644 index bef2f8a..0000000 --- a/src/core/publish-app/package-app.ts +++ /dev/null @@ -1,37 +0,0 @@ -import * as fs from "fs"; -import * as path from "path"; -import util from "util"; -import { exec } from "child_process"; - -const asyncExec = util.promisify(exec); - -/** - * This function is used for add all dependencies in the package.json app to the bundled dependencies property - * and then running npm pack to create a tarball for deploying to the connect platform. - */ -export async function packageApp(cwd?: string): Promise { - const currentDir = cwd ? cwd : process.cwd(); - - const packagePath = path.join(currentDir, "package.json"); - - const results = await fs.promises.readFile(packagePath, "utf-8"); - const pjson = JSON.parse(results); - - // take dependencies and move them to bundledDependencies - pjson.bundledDependencies = []; - - if (pjson.dependencies) { - for (const dependency of Object.keys(pjson.dependencies)) { - pjson.bundledDependencies.push(dependency); - } - - await fs.promises.writeFile( - packagePath, - JSON.stringify(pjson, undefined, 2), - ); - } - - const { stdout } = await asyncExec("npm pack", { cwd: currentDir }); - - return stdout.trim(); -} diff --git a/test/specs/core/package-app.spec.js b/test/specs/core/package-app.spec.js new file mode 100644 index 0000000..21a8dfa --- /dev/null +++ b/test/specs/core/package-app.spec.js @@ -0,0 +1,54 @@ +"use strict"; + +const { expect } = require("chai"); +const path = require("path"); +const fs = require("fs"); +const fsExtra = require("fs-extra"); +const { packageApp } = require("../../../lib/core/package-app"); +const tar = require("tar"); + +let projectPath; +let tmpPath; +let tarballName; +let unarchivePath; + +describe("The package app function", () => { + + before(async () => { + tmpPath = path.join(process.cwd(), "test", "tmp"); + projectPath = path.join(process.cwd(), "test", "fixtures", "apps", "carrier", "valid"); + + // copy fixture to tmp directory + await fsExtra.remove(tmpPath); + await fsExtra.copy(projectPath, tmpPath); + + tarballName = await packageApp(tmpPath); + unarchivePath = path.join(tmpPath, "unarchive"); + await fs.promises.mkdir(unarchivePath); + await tar.x({ cwd: unarchivePath, file: path.join(tmpPath, tarballName) }); + }); + + it("should create a tarball", () => { + expect(tarballName).to.include("carrier-inline-app-0.0.1.tgz"); + expect(tmpPath).to.be.and.directory().and.include.files(["carrier-inline-app-0.0.1.tgz"]); + }); + + it("should copy all dependencies to the bundledDependencies array", async () => { + const pJsonString = await fs.promises.readFile(path.join(unarchivePath, "package", "package.json"), "utf-8"); + const pjson = JSON.parse(pJsonString); + expect(pjson.bundledDependencies).to.have.members(["axios"]); + }); + + it("should restore the normal package.json without the bundled dependencies", async () => { + const restoredPJSONString = await fs.promises.readFile(path.join(tmpPath, "package.json")); + const restoredPJSON = JSON.parse(restoredPJSONString); + expect(restoredPJSON.bundledDependencies).to.not.exist; + }); + + after(async () => { + // delete the tmp directory + tmpPath = path.join(process.cwd(), "test", "tmp"); + + await fsExtra.remove(tmpPath); + }); +}); diff --git a/test/specs/core/publish/package-app.spec.js b/test/specs/core/publish/package-app.spec.js deleted file mode 100644 index 3328fdc..0000000 --- a/test/specs/core/publish/package-app.spec.js +++ /dev/null @@ -1,43 +0,0 @@ -// "use strict"; - -// const { expect } = require("chai"); -// const path = require("path"); -// const fs = require("fs"); -// const fsExtra = require("fs-extra"); -// const { packageApp } = require("../../../../lib/core/publish/package-app"); - -// let projectPath; -// let tmpPath; -// describe("The package app function", () => { - -// before(async () => { -// tmpPath = path.join(process.cwd(), "test", "tmp"); -// projectPath = path.join(process.cwd(), "test", "fixtures", "apps", "carrier", "valid"); - -// // copy fixture to tmp directory -// await fsExtra.remove(tmpPath); -// await fsExtra.copy(projectPath, tmpPath); - -// await packageApp(tmpPath); -// }); - - -// it("should copy all dependencies to the bundledDepencies array", async () => { - -// const pJsonString = await fs.promises.readFile(path.join(tmpPath, "package.json"), "utf-8"); -// const pjson = JSON.parse(pJsonString); -// expect(pjson.bundledDependencies).to.have.members(["axios"]); -// }); - -// it("should create a tarball", () => { -// expect(tmpPath).to.be.and.directory().and.include.files(["carrier-inline-app-0.0.1.tgz"]); -// }); - -// after(async () => { -// // delete the tmp directory -// tmpPath = path.join(process.cwd(), "test", "tmp"); - -// await fsExtra.remove(tmpPath); -// }); - -// }); From 8f7ea30eb4569f554746bd220037364f531b6ca2 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Mon, 17 Aug 2020 13:17:46 -0500 Subject: [PATCH 34/53] refactor publish command --- src/commands/pack.ts | 4 +++- src/commands/publish.ts | 13 ++++++++----- src/core/publish-app.ts | 10 ++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/commands/pack.ts b/src/commands/pack.ts index b29393d..608e8af 100644 --- a/src/commands/pack.ts +++ b/src/commands/pack.ts @@ -18,7 +18,7 @@ export default class Publish extends BaseCommand { }), "skip-tests": flags.boolean({ char: "s", - description: "skip running the test before publishing", + description: "skip running the test before packing", default: false, }) }; @@ -32,6 +32,8 @@ export default class Publish extends BaseCommand { if (!flags["skip-tests"]) await Test.run(["-f"]); try { + + // TODO: remove path to app? const pathToApp = process.cwd(); await packageApp(pathToApp); diff --git a/src/commands/publish.ts b/src/commands/publish.ts index 8774535..21de2e8 100644 --- a/src/commands/publish.ts +++ b/src/commands/publish.ts @@ -3,6 +3,7 @@ import Test from "./test"; import publishApp from "../core/publish-app"; import { flags } from "@oclif/command"; import { checkAppLoginStatus } from "../core/utils/users"; +import { packageApp } from '../core/package-app'; export default class Publish extends BaseCommand { static description = "publish your app"; @@ -16,9 +17,9 @@ export default class Publish extends BaseCommand { char: "h", description: "show help for the publish command", }), - watch: flags.boolean({ - char: "w", - description: "check the status of the deployment until complete", + "no-watch": flags.boolean({ + char: "n", + description: "does not track the status of the deployment", }), "skip-tests": flags.boolean({ char: "s", @@ -37,8 +38,10 @@ export default class Publish extends BaseCommand { try { const pathToApp = process.cwd(); - await publishApp(pathToApp, this.appsClient!, { - watch: flags.watch, + + const tarballName = await packageApp(pathToApp); + await publishApp(tarballName, this.appsClient!, { + noWatch: flags["no-watch"], }); } catch (error) { switch (error.code) { diff --git a/src/core/publish-app.ts b/src/core/publish-app.ts index f7f733c..a373e07 100644 --- a/src/core/publish-app.ts +++ b/src/core/publish-app.ts @@ -32,17 +32,15 @@ class AppFailedToDeployError extends Error { } interface PublishAppOptions { - watch?: boolean; + noWatch?: boolean; } export default async function publishApp( - pathToApp: string, + tarballName: string, client: APIClient, - { watch = false }: PublishAppOptions, + { noWatch = false }: PublishAppOptions, ): Promise { - const tarballName = await packageApp(); - cli.action.start("publishing app"); let newDeployment; @@ -72,7 +70,7 @@ export default async function publishApp( cli.action.stop(`${logSymbols.success}`); - if (watch) { + if (!noWatch) { const status = await watchDeployment(newDeployment, platformApp, client); if (status === DeploymentStatus.Error) { From d5535e603f8882b6bdecd1bd52954bc1667acef4 Mon Sep 17 00:00:00 2001 From: Pierce Harmon Date: Mon, 17 Aug 2020 14:04:18 -0500 Subject: [PATCH 35/53] add better support for vscode ts debugging (#70) --- templates/tsconfig.json | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/templates/tsconfig.json b/templates/tsconfig.json index a0d69be..168c8cb 100644 --- a/templates/tsconfig.json +++ b/templates/tsconfig.json @@ -5,12 +5,9 @@ "moduleResolution": "node", "rootDir": "src", "outDir": "lib", - "sourceMap": true + "sourceMap": true, + "outFiles": ["${workspaceFolder}/lib/**/*.js"] }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} \ No newline at end of file + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From 9aab2b213ceccafcc54c5875587e071178e709ae Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Mon, 17 Aug 2020 14:49:42 -0500 Subject: [PATCH 36/53] use current LTS --- src/core/generators/apps-new.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/generators/apps-new.ts b/src/core/generators/apps-new.ts index 07f4084..ee5da82 100644 --- a/src/core/generators/apps-new.ts +++ b/src/core/generators/apps-new.ts @@ -86,7 +86,7 @@ class AppsNew extends Generator { dependencies: {}, ...this.pjson, engines: { - node: ">=8.0.0", + node: ">=12.8.0", ...this.pjson.engines, }, typescript: false, From 71c2d08778c02bc561c39bd4fb0cf85173dc9772 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Mon, 17 Aug 2020 15:11:02 -0500 Subject: [PATCH 37/53] small refactor, fix linting --- src/commands/pack.ts | 2 +- src/commands/publish.ts | 4 +--- src/core/publish-app.ts | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/commands/pack.ts b/src/commands/pack.ts index 608e8af..05e0b5d 100644 --- a/src/commands/pack.ts +++ b/src/commands/pack.ts @@ -49,4 +49,4 @@ export default class Publish extends BaseCommand { } } } -} +} diff --git a/src/commands/publish.ts b/src/commands/publish.ts index 21de2e8..0ef5f93 100644 --- a/src/commands/publish.ts +++ b/src/commands/publish.ts @@ -37,9 +37,7 @@ export default class Publish extends BaseCommand { if (!flags["skip-tests"]) await Test.run(["-f"]); try { - const pathToApp = process.cwd(); - - const tarballName = await packageApp(pathToApp); + const tarballName = await packageApp(); await publishApp(tarballName, this.appsClient!, { noWatch: flags["no-watch"], }); diff --git a/src/core/publish-app.ts b/src/core/publish-app.ts index a373e07..a3ec5aa 100644 --- a/src/core/publish-app.ts +++ b/src/core/publish-app.ts @@ -5,7 +5,6 @@ import logSymbols from "log-symbols"; import path from "path"; import { Deployment, DeploymentStatus } from "./types"; import { loadApp } from "@shipengine/connect-loader"; -import { packageApp } from "./package-app"; import { watchDeployment } from "./publish-app/watch-deployment"; import { green, red } from "chalk"; From 1ce443d3b09362fc3bd95ba30ae1bdfc94d3d59a Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Tue, 18 Aug 2020 11:17:26 -0500 Subject: [PATCH 38/53] initial cancel shipment --- .../test-app/runner/config/cancel-shipment.ts | 22 ++ src/core/test-app/tests/cancel-shipment.ts | 171 ++++++++++ .../test-app/tests/cancel-shipment.spec.js | 311 ++++++++++++++++++ 3 files changed, 504 insertions(+) create mode 100644 src/core/test-app/runner/config/cancel-shipment.ts create mode 100644 src/core/test-app/tests/cancel-shipment.ts create mode 100644 test/specs/core/test-app/tests/cancel-shipment.spec.js diff --git a/src/core/test-app/runner/config/cancel-shipment.ts b/src/core/test-app/runner/config/cancel-shipment.ts new file mode 100644 index 0000000..7f3e340 --- /dev/null +++ b/src/core/test-app/runner/config/cancel-shipment.ts @@ -0,0 +1,22 @@ +import { + WeightUnit, + DateTimeZonePOJO, + AddressWithContactInfoPOJO +} from "@shipengine/connect-sdk"; + +import { BaseTestConfigOptions } from "./base-test-config-options"; + +export interface CancelShipmentTestParams { + deliveryServiceName: string; + shipFrom?: AddressWithContactInfoPOJO; + shipTo?: AddressWithContactInfoPOJO; + weight: { + value: number; + unit: WeightUnit; + }; + shipDateTime: DateTimeZonePOJO | Date | string; +} + +export interface CancelShipmentConfigOptions + extends CancelShipmentTestParams, + BaseTestConfigOptions { } diff --git a/src/core/test-app/tests/cancel-shipment.ts b/src/core/test-app/tests/cancel-shipment.ts new file mode 100644 index 0000000..ee8df3d --- /dev/null +++ b/src/core/test-app/tests/cancel-shipment.ts @@ -0,0 +1,171 @@ +import { DeliveryService, WeightUnit } from "@shipengine/connect-sdk"; +import { CarrierApp, NewShipmentPOJO, NewPackagePOJO, ShipmentCancellation, ShipmentCancellationPOJO } from "@shipengine/connect-sdk/lib/internal"; +import Suite from "../runner/suite"; +import { initializeTimeStamps } from "../../utils/time-stamps"; +import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; +import objectToTestTitle from '../utils/object-to-test-title'; +import useDomesticShippingAddress from '../utils/use-domestic-shipment-addresses'; + +import { findDomesticDeliveryService } from '../utils/find-domestic-delivery-service'; +import { expect } from "chai"; +import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; +import { CancelShipmentConfigOptions, CancelShipmentTestParams } from '../runner/config/cancel-shipment'; +import { v4 } from "uuid"; + + +interface TestArgs { + title: string; + methodArgs: NewShipmentPOJO; + config: any; +} + +export class CancelShipment extends Suite { + title = "cancelShipment"; + + private deliveryService?: DeliveryService; + + private setDeliveryService( + config: CancelShipmentConfigOptions, + ): void { + const carrierApp = this.app as CarrierApp; + + if (config.deliveryServiceName) { + this.deliveryService = findDeliveryServiceByName( + config.deliveryServiceName, + carrierApp, + ); + } else { + try { + this.deliveryService = findDomesticDeliveryService(carrierApp); + } catch { + this.deliveryService = undefined; + } + } + } + + buildTestArg( + config: CancelShipmentConfigOptions, + ): TestArgs | undefined { + this.setDeliveryService(config); + + if (!this.deliveryService) return undefined; + + let shipFrom; + let shipTo; + try { + [shipFrom, shipTo] = useDomesticShippingAddress(this.deliveryService); + } catch { } + + const { tomorrow } = initializeTimeStamps(); + + // Make a best guess at the defaults, need to resolve the default vs config based delivery service early + // on since that determines what address and associated timezones get generated. + const defaults: CancelShipmentTestParams = { + deliveryServiceName: this.deliveryService.name, + shipDateTime: tomorrow, + shipFrom: shipFrom, + shipTo: shipTo, + weight: { + unit: WeightUnit.Pounds, + value: 50.0, + } + }; + + const testParams = reduceDefaultsWithConfig< + CancelShipmentTestParams + >(defaults, config); + + if (!testParams.shipFrom || !testParams.shipTo) return undefined; + + const packagePOJO: NewPackagePOJO = { + packaging: { + id: this.deliveryService.packaging[0].id + }, + label: { + size: this.deliveryService.labelSizes[0], + format: this.deliveryService.labelFormats[0], + }, + weight: { + value: testParams.weight.value, + unit: testParams.weight.unit, + }, + }; + + const newShipmentPOJO: NewShipmentPOJO = { + deliveryService: { + id: this.deliveryService.id, + }, + shipFrom: testParams.shipFrom!, + shipTo: testParams.shipTo!, + shipDateTime: testParams.shipDateTime, + packages: [packagePOJO], + }; + + const title = config.expectedErrorMessage + ? `it raises an error when cancelling a shipment with ${objectToTestTitle( + testParams, + )}` + : `it cancels a shipment with ${objectToTestTitle( + testParams, + )}`; + + return { + title, + methodArgs: newShipmentPOJO, + config, + }; + } + + buildTestArgs(): Array { + if (Array.isArray(this.config)) { + return this.config.map((config: CancelShipmentConfigOptions) => { + return this.buildTestArg(config); + }); + } + const config = this.config as CancelShipmentConfigOptions; + return [this.buildTestArg(config)]; + } + + tests() { + const testArgs = this.buildTestArgs().filter((args) => args !== undefined); + + if (testArgs.length === 0) { + return []; + } + return testArgs.map((testArg) => { + return this.test( + testArg!.title, + testArg!.methodArgs, + testArg!.config, + async () => { + const carrierApp = this.app as CarrierApp; + + const transaction = await this.transaction(testArg!.config); + + if (!carrierApp.createShipment) { + throw new Error("createShipment is not implemented"); + } + + if (!carrierApp.cancelShipments) { + throw new Error("cancelShipment is not implemented"); + } + + const shipmentConfirmation = await carrierApp.createShipment(transaction, testArg!.methodArgs); + + const cancellationID = v4(); + const shipmentCancellations: ShipmentCancellationPOJO[] = [{ + cancellationID, + trackingNumber: shipmentConfirmation.trackingNumber + }]; + + const shipmentCancellationConfirmation = await carrierApp.cancelShipments(transaction, shipmentCancellations); + + + const customMsg = `The shipmentCancellationConfirmation cancellationID does not match the one that was included in the shipmentCancellation: ${cancellationID}`; + expect(shipmentCancellationConfirmation[0].cancellationID).to.equal(cancellationID, customMsg); + + } + ); + }); + } +} diff --git a/test/specs/core/test-app/tests/cancel-shipment.spec.js b/test/specs/core/test-app/tests/cancel-shipment.spec.js new file mode 100644 index 0000000..7308c95 --- /dev/null +++ b/test/specs/core/test-app/tests/cancel-shipment.spec.js @@ -0,0 +1,311 @@ +"use strict"; + +const { CancelShipment } = require("../../../../../lib/core/test-app/tests/cancel-shipment"); +const { CarrierApp } = require("@shipengine/connect-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../utils/pojo"); +const { expect } = require("chai"); +const sinon = require("sinon"); +const { v4 } = require("uuid"); + +describe.only("The cancel shipment test suite", () => { + + describe("when there is not address available for the delivery services", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["AQ"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + describe("when there is a delivery service with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new CancelShipment(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 50lb"); + }); + }); + + describe("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const newPackaging = pojo.packaging(); + newPackaging.name = "New Package"; + appDefinition.deliveryServices[0].packaging.push(newPackaging); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.cancelShipment = { + weight: { + value: 200, + unit: "lb" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("weight: 200lb"); + }); + }); + + describe("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.cancelShipment = + [ + { + weight: { + value: 200, + unit: "lb" + } + }, + { + weight: { + value: 22, + unit: "lb" + } + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + expect(tests[0].title).to.include("weight: 200lb"); + + expect(tests[1].title).to.include("weight: 22lb"); + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.cancelShipment = { + deliveryServiceName: "asdf" + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + code: "better_ds", + grade: "standard", + manifestType: "physical", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.cancelShipment = { + deliveryServiceName: "Better Delivery Service" + }; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); + }); + }); + + describe("When a delivery service has addresses that we don't have samples but user uses valid configs", () => { + it("should generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + appDefinition.deliveryServices[0].originCountries = ["AQ", "US"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ", "US"]; + + + const app = new CarrierApp(appDefinition); + + staticConfigTests.cancelShipment = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.cancelShipment = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422" + }, + shipTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.cancelShipment.shipTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("shipTo: US"); + + }); + }); + + describe("When a valid shipment is created and the cancellation ids do not match", () => { + + it("should throw an error", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const confirmationMock = pojo.shipmentConfirmation(); + confirmationMock.packages.push(pojo.packageConfirmation()); + + sinon.stub(CarrierApp.prototype, "createShipment").resolves(confirmationMock); + + + const shipCancelOutcomeMock = [{ + cancellationId: v4() + }]; + + sinon.stub(CarrierApp.prototype, "cancelShipments"); + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CancelShipment(args); + const tests = testSuite.tests(); + + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("The shipment confirmation packages array should have the same number of packages that were on the request"); + } + }); + }); + +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.manifestType = "digital"; + deliveryService.labelFormats = ["pdf"]; + deliveryService.code = "priority_overnight"; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + deliveryService.packaging.push(pojo.packaging()); + appDefinition.deliveryServices = [deliveryService]; + appDefinition.createShipment = () => { }; + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + cancelShipment: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} From d35b91759a515add7830dd0be633716162457a3a Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Tue, 18 Aug 2020 12:33:50 -0500 Subject: [PATCH 39/53] additional changes --- src/commands/pack.ts | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/commands/pack.ts b/src/commands/pack.ts index 05e0b5d..091b4aa 100644 --- a/src/commands/pack.ts +++ b/src/commands/pack.ts @@ -1,7 +1,5 @@ import BaseCommand from "../base-command"; -import Test from "./test"; import { flags } from "@oclif/command"; -import { checkAppLoginStatus } from "../core/utils/users"; import { packageApp } from '../core/package-app'; export default class Publish extends BaseCommand { @@ -15,28 +13,16 @@ export default class Publish extends BaseCommand { help: flags.help({ char: "h", description: "show help for the pack command", - }), - "skip-tests": flags.boolean({ - char: "s", - description: "skip running the test before packing", - default: false, }) }; async run() { // When the -h flag is present the following line haults execution - const { flags } = this.parse(Publish); - - await checkAppLoginStatus(this); - - if (!flags["skip-tests"]) await Test.run(["-f"]); + this.parse(Publish); try { - - // TODO: remove path to app? - const pathToApp = process.cwd(); - await packageApp(pathToApp); + await packageApp(); } catch (error) { switch (error.code) { From 6597c881f6b8baa126fffbdd613eb735132c592c Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Tue, 18 Aug 2020 12:45:58 -0500 Subject: [PATCH 40/53] release v1.0.9 --- .vscode/launch.json | 3 +-- README.md | 38 ++++++++++++++++++++++++++++---------- package-lock.json | 22 +++++++++++----------- package.json | 8 ++++---- 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 78470d4..8b56849 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -28,8 +28,7 @@ "internalConsoleOptions": "openOnSessionStart", "program": "${workspaceFolder}/bin/run", "args": [ - "test", - "-g rate" + "publish" ], "cwd": "/home/rkrauskopf/repos/connect-samples/cargo-inc" } diff --git a/README.md b/README.md index 1c7f50d..183be9e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.8 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.9 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -40,6 +40,7 @@ USAGE * [`connect init [PATH]`](#connect-init-path) * [`connect login`](#connect-login) * [`connect logout`](#connect-logout) +* [`connect pack`](#connect-pack) * [`connect publish`](#connect-publish) * [`connect start`](#connect-start) * [`connect test`](#connect-test) @@ -74,7 +75,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/info.ts)_ ## `connect init [PATH]` @@ -99,7 +100,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/init.ts)_ ## `connect login` @@ -116,7 +117,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/login.ts)_ ## `connect logout` @@ -133,7 +134,24 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/logout.ts)_ + +## `connect pack` + +package your app + +``` +USAGE + $ connect pack + +OPTIONS + -h, --help show help for the pack command + +EXAMPLE + $ connect pack +``` + +_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/pack.ts)_ ## `connect publish` @@ -145,14 +163,14 @@ USAGE OPTIONS -h, --help show help for the publish command + -n, --no-watch does not track the status of the deployment -s, --skip-tests skip running the test before publishing - -w, --watch check the status of the deployment until complete EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/publish.ts)_ ## `connect start` @@ -167,7 +185,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/start.ts)_ ## `connect test` @@ -190,7 +208,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/test.ts)_ ## `connect whoami` @@ -207,5 +225,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.8/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index d8877ad..8277147 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.8", + "version": "1.0.9", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.4.tgz", - "integrity": "sha512-xLk8UTAvDgGMxau3WR+FW8WX2IfEs3AP3+pSYOUqjS8n0joTaNl0+HkZfG/vg5N0bs4o8UYEMD6cA1VGnYrYFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.6.tgz", + "integrity": "sha512-fYrnNJyn1y/qfu715GNam/jR9pgeTb60+G3/6kA/txVDa8EoVvsYDNuDBu/0HzQ/CH9OgTWje++/j2ga5qBViQ==", "requires": { - "@shipengine/connect-sdk": "^1.0.2", + "@shipengine/connect-sdk": "^1.0.4", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1219,9 +1219,9 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.2.tgz", - "integrity": "sha512-cdcJIAUuy96EDak1itH9DSr8aF+Uzrl+DjrHQcqlDUtJg3B3vSDYSE49DxnzcAIbT7UFNriNOkQJmVjoHiDYLQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.4.tgz", + "integrity": "sha512-ylSYyQBjufmn6mt2y2pKUirHWZJU5rFbXVpRWtI9HpqaGInZJSiX0yxb15ZrxFze182JjE2qgxHdzN1TGVCHqw==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", @@ -1451,9 +1451,9 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/mocha": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.2.tgz", - "integrity": "sha512-5cv8rmqT3KX9XtWDvSgGYfS4OwrKM2eei90GWLnTYz+AXRiBv5uYcKBjnkQ4katNvfYk3+o2bHGZUsDhdcoUyg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.3.tgz", + "integrity": "sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg==", "dev": true }, "@types/node": { diff --git a/package.json b/package.json index 9ad7298..f299ac4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.8", + "version": "1.0.9", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.4", + "@shipengine/connect-loader": "^1.0.6", "@shipengine/connect-local-dev-api": "^1.0.4", - "@shipengine/connect-sdk": "^1.0.2", + "@shipengine/connect-sdk": "^1.0.4", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", @@ -65,7 +65,7 @@ "@types/js-yaml": "^3.12.5", "@types/json5": "0.0.30", "@types/luxon": "^1.24.1", - "@types/mocha": "^8.0.2", + "@types/mocha": "^8.0.3", "@types/node": "^14.6.0", "@types/nodemon": "^1.19.0", "@types/recursive-readdir": "^2.2.0", From dbd7a33333d4730d34c9d63ee62c044cf438492b Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Tue, 18 Aug 2020 15:55:10 -0500 Subject: [PATCH 41/53] release v1.0.10 --- README.md | 20 ++++++++--------- package-lock.json | 56 ++++++++++------------------------------------- package.json | 8 +++---- 3 files changed, 26 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 183be9e..164dd0b 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.9 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.10 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -75,7 +75,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/info.ts)_ ## `connect init [PATH]` @@ -100,7 +100,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/init.ts)_ ## `connect login` @@ -117,7 +117,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/login.ts)_ ## `connect logout` @@ -134,7 +134,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/logout.ts)_ ## `connect pack` @@ -151,7 +151,7 @@ EXAMPLE $ connect pack ``` -_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/pack.ts)_ +_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/pack.ts)_ ## `connect publish` @@ -170,7 +170,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/publish.ts)_ ## `connect start` @@ -185,7 +185,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/start.ts)_ ## `connect test` @@ -208,7 +208,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/test.ts)_ ## `connect whoami` @@ -225,5 +225,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.9/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 8277147..a846a5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.9", + "version": "1.0.10", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.6.tgz", - "integrity": "sha512-fYrnNJyn1y/qfu715GNam/jR9pgeTb60+G3/6kA/txVDa8EoVvsYDNuDBu/0HzQ/CH9OgTWje++/j2ga5qBViQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.7.tgz", + "integrity": "sha512-Q51lP91SZPspBeNv2FrKwt4FdIkL6dFVCwoCY15wCSTg/0GBBcl2UvA9naFfvH+0whQSz0dluOZK42R+rONiSw==", "requires": { - "@shipengine/connect-sdk": "^1.0.4", + "@shipengine/connect-sdk": "^1.0.5", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,53 +1175,21 @@ } }, "@shipengine/connect-local-dev-api": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.4.tgz", - "integrity": "sha512-DJiLfXXymJ+8VNJR3HK6aWKW/F/g6Hz6Tgi8iiC/0yU2MLWp4siFpruAYu+2C6SbF7WQwzMlpdhmpZR+Zqm/wA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.6.tgz", + "integrity": "sha512-YaH8xicwOvIFq9dzjlsA23wi6jLP5psAMtBhKHK2riaykqqCjOTQIJTF7+WaYIbNsyUxlA/+0cXhul9bAQomSg==", "requires": { - "@shipengine/connect-loader": "1.0.0", + "@shipengine/connect-loader": "^1.0.7", "chai": "^4.2.0", "chalk": "^4.1.0", "cors": "^2.8.5", "express": "^4.17.1" - }, - "dependencies": { - "@shipengine/connect-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.0.tgz", - "integrity": "sha512-He2HZ+9ZQt0Bq418ol9A33ntV3xgJOAKGkmvO1P/NptjAbq/LhXfyHbuvJQRkZMcFChKflWvDVqvkUHSqVT0jw==", - "requires": { - "@shipengine/connect-sdk": "1.0.0", - "js-yaml": "^3.14.0", - "json5": "^2.1.3", - "resolve-from": "^5.0.0", - "source-map-support": "^0.5.16" - } - }, - "@shipengine/connect-sdk": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.0.tgz", - "integrity": "sha512-SggUfmywiRGqqUAQ6jtG0jQ2xpff4le6OdIcgOtY+nsgTnzQc5TcaO3osTQN+Lyt2UQSNVu6oRsk2KtJqVvvGQ==", - "requires": { - "@hapi/joi": "^17.1.1", - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.5", - "@types/react-jsonschema-form": "^1.7.4", - "currency.js": "^2.0.2", - "moment-timezone": "^0.5.31" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" - } } }, "@shipengine/connect-sdk": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.4.tgz", - "integrity": "sha512-ylSYyQBjufmn6mt2y2pKUirHWZJU5rFbXVpRWtI9HpqaGInZJSiX0yxb15ZrxFze182JjE2qgxHdzN1TGVCHqw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.5.tgz", + "integrity": "sha512-xsr08+2cf0ODFvVyDlCyuomal6AB0i/78Ey6pFdKMtxv97NKjjNdVFVw4XQwgC2679ycJ30c5ia9i9OIHjjUtg==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", diff --git a/package.json b/package.json index f299ac4..687f507 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.9", + "version": "1.0.10", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.6", - "@shipengine/connect-local-dev-api": "^1.0.4", - "@shipengine/connect-sdk": "^1.0.4", + "@shipengine/connect-loader": "^1.0.7", + "@shipengine/connect-local-dev-api": "^1.0.6", + "@shipengine/connect-sdk": "^1.0.5", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", From 1bbc9ba94290bc458e378771032b83af15b97729 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 19 Aug 2020 08:17:13 -0500 Subject: [PATCH 42/53] release v1.0.11 --- README.md | 20 ++++++++++---------- package-lock.json | 24 ++++++++++++------------ package.json | 8 ++++---- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 164dd0b..fa9bb97 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.10 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.11 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -75,7 +75,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/info.ts)_ ## `connect init [PATH]` @@ -100,7 +100,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/init.ts)_ ## `connect login` @@ -117,7 +117,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/login.ts)_ ## `connect logout` @@ -134,7 +134,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/logout.ts)_ ## `connect pack` @@ -151,7 +151,7 @@ EXAMPLE $ connect pack ``` -_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/pack.ts)_ +_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/pack.ts)_ ## `connect publish` @@ -170,7 +170,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/publish.ts)_ ## `connect start` @@ -185,7 +185,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/start.ts)_ ## `connect test` @@ -208,7 +208,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/test.ts)_ ## `connect whoami` @@ -225,5 +225,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.10/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index a846a5f..2b7cb59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.10", + "version": "1.0.11", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.7.tgz", - "integrity": "sha512-Q51lP91SZPspBeNv2FrKwt4FdIkL6dFVCwoCY15wCSTg/0GBBcl2UvA9naFfvH+0whQSz0dluOZK42R+rONiSw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.8.tgz", + "integrity": "sha512-0bDGICvh+HrR9WXshikL+90eRsoNRVJlLNz9+erGR3vZ5l+tczuTuSd3bRAVHXafYenJE4DPksujMnJQqO/4hA==", "requires": { - "@shipengine/connect-sdk": "^1.0.5", + "@shipengine/connect-sdk": "^1.0.6", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,11 +1175,11 @@ } }, "@shipengine/connect-local-dev-api": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.6.tgz", - "integrity": "sha512-YaH8xicwOvIFq9dzjlsA23wi6jLP5psAMtBhKHK2riaykqqCjOTQIJTF7+WaYIbNsyUxlA/+0cXhul9bAQomSg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.7.tgz", + "integrity": "sha512-npB+Dvr+IoyNmdB7S99CiZ4I27YsuSYSAqKjCs16jLssEYaYGnlmd/7dM0rZ2bJkUlgINGtCUGPzUnvOeLIGUA==", "requires": { - "@shipengine/connect-loader": "^1.0.7", + "@shipengine/connect-loader": "^1.0.8", "chai": "^4.2.0", "chalk": "^4.1.0", "cors": "^2.8.5", @@ -1187,9 +1187,9 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.5.tgz", - "integrity": "sha512-xsr08+2cf0ODFvVyDlCyuomal6AB0i/78Ey6pFdKMtxv97NKjjNdVFVw4XQwgC2679ycJ30c5ia9i9OIHjjUtg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.6.tgz", + "integrity": "sha512-FdWaQLAA7LNM74+aKfD8IyTIORI37UaepLA4z+ogX7yXtciE9kKtDYZRkxgLf7rZ23X+UCCIJHhFOng7fUZk2A==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", diff --git a/package.json b/package.json index 687f507..aed0146 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.10", + "version": "1.0.11", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.7", - "@shipengine/connect-local-dev-api": "^1.0.6", - "@shipengine/connect-sdk": "^1.0.5", + "@shipengine/connect-loader": "^1.0.8", + "@shipengine/connect-local-dev-api": "^1.0.7", + "@shipengine/connect-sdk": "^1.0.6", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", From a5bef21d246cbbacc85183a5aef5186284e26785 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 19 Aug 2020 11:42:48 -0500 Subject: [PATCH 43/53] release v1.0.12 --- README.md | 20 ++++++++++---------- package-lock.json | 24 ++++++++++++------------ package.json | 8 ++++---- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index fa9bb97..6e384b1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.11 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.12 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -75,7 +75,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/info.ts)_ ## `connect init [PATH]` @@ -100,7 +100,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/init.ts)_ ## `connect login` @@ -117,7 +117,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/login.ts)_ ## `connect logout` @@ -134,7 +134,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/logout.ts)_ ## `connect pack` @@ -151,7 +151,7 @@ EXAMPLE $ connect pack ``` -_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/pack.ts)_ +_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/pack.ts)_ ## `connect publish` @@ -170,7 +170,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/publish.ts)_ ## `connect start` @@ -185,7 +185,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/start.ts)_ ## `connect test` @@ -208,7 +208,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/test.ts)_ ## `connect whoami` @@ -225,5 +225,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.11/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index 2b7cb59..c91bef2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.11", + "version": "1.0.12", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1163,11 +1163,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.8.tgz", - "integrity": "sha512-0bDGICvh+HrR9WXshikL+90eRsoNRVJlLNz9+erGR3vZ5l+tczuTuSd3bRAVHXafYenJE4DPksujMnJQqO/4hA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.9.tgz", + "integrity": "sha512-pmQ2WJl6qFUBfMxiZx7J+YTITc9JtpZeugRFLirqOwY3fMgQNGTGALTsCFyCCHttmYvC9de1/1UT96FFcv8Iyg==", "requires": { - "@shipengine/connect-sdk": "^1.0.6", + "@shipengine/connect-sdk": "^1.0.7", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,11 +1175,11 @@ } }, "@shipengine/connect-local-dev-api": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.7.tgz", - "integrity": "sha512-npB+Dvr+IoyNmdB7S99CiZ4I27YsuSYSAqKjCs16jLssEYaYGnlmd/7dM0rZ2bJkUlgINGtCUGPzUnvOeLIGUA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.8.tgz", + "integrity": "sha512-rtdBukPkBoxU9cMm94iRdlo1DsL4C4Q7FC2VBRsrJzmpac8XEogp33Q3GBOFseTlYQdU+b9lQbAyL8Lf2qVATw==", "requires": { - "@shipengine/connect-loader": "^1.0.8", + "@shipengine/connect-loader": "^1.0.9", "chai": "^4.2.0", "chalk": "^4.1.0", "cors": "^2.8.5", @@ -1187,9 +1187,9 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.6.tgz", - "integrity": "sha512-FdWaQLAA7LNM74+aKfD8IyTIORI37UaepLA4z+ogX7yXtciE9kKtDYZRkxgLf7rZ23X+UCCIJHhFOng7fUZk2A==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.7.tgz", + "integrity": "sha512-v+GE6JeQfugDOJkmNdJew34ZKO9A91dsQDE2EhMuH1TErYu0HNKX01MgUwxN/g5Ok7xSke55sNmarMUB/KM1Nw==", "requires": { "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", diff --git a/package.json b/package.json index aed0146..59534e2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.11", + "version": "1.0.12", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,9 +20,9 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.8", - "@shipengine/connect-local-dev-api": "^1.0.7", - "@shipengine/connect-sdk": "^1.0.6", + "@shipengine/connect-loader": "^1.0.9", + "@shipengine/connect-local-dev-api": "^1.0.8", + "@shipengine/connect-sdk": "^1.0.7", "axios": "^0.19.2", "chai": "^4.2.0", "chalk": "^4.1.0", From a2d0a74741f5339661cc1db415f2e6a31d3cd9be Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Wed, 19 Aug 2020 14:49:38 -0500 Subject: [PATCH 44/53] additional updates --- src/core/test-app.ts | 3 ++- src/core/test-app/runner/config.ts | 3 ++- .../test-app/runner/load-and-validate-config.ts | 1 + src/core/test-app/tests/cancel-shipment.ts | 6 ++++-- .../core/test-app/tests/cancel-shipment.spec.js | 15 ++++++++++----- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/core/test-app.ts b/src/core/test-app.ts index e6d6977..acb1733 100644 --- a/src/core/test-app.ts +++ b/src/core/test-app.ts @@ -13,6 +13,7 @@ import { TestResults, useTestResults } from "./test-app/runner/test-results"; import { loadAndValidateConfig } from "./test-app/runner/load-and-validate-config"; import { logFail, logPass, logStep } from "./utils/log-helpers"; import { logResults } from "./utils/log-helpers"; +import { CancelShipment } from './test-app/tests/cancel-shipment'; interface TesOptions { debug?: boolean; @@ -137,7 +138,7 @@ type RegisteredTestSuiteModules = object[]; function registerTestSuiteModules(app: SdkApp): RegisteredTestSuiteModules { const carrierAppMethods = { // cancelPickups: [CancelPickupsTestSuite], - // cancelShipments: [CancelShipmentsTestSuite], + cancelShipments: [CancelShipment], // createManifest: [CreateManifestTestSuite], createShipment: [ CreateShipmentInternational, diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index aa77492..2263331 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -3,10 +3,11 @@ import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-do import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; import { RateShipmentConfigOptions } from './config/rate-shipment'; +import { CancelShipmentConfigOptions } from './config/cancel-shipment'; export interface TestsConfig { // cancelPickups?: (TestOptions & TestOptions) | [TestOptions]; - // cancelShipments?: TestOptions | [TestOptions]; + cancelShipment?: CancelShipmentConfigOptions | [CancelShipmentConfigOptions]; // createManifest?: TestOptions | [TestOptions]; createShipment_domestic?: | CreateShipmentDomesticConfigOptions diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 2280432..83dcc07 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -48,6 +48,7 @@ function validate(config: Config): void { "createShipment_regional", "createShipment_with_insurance", "rateShipment", + "cancelShipment", "schedulePickup", "trackShipment", ]; diff --git a/src/core/test-app/tests/cancel-shipment.ts b/src/core/test-app/tests/cancel-shipment.ts index ee8df3d..4548eb7 100644 --- a/src/core/test-app/tests/cancel-shipment.ts +++ b/src/core/test-app/tests/cancel-shipment.ts @@ -1,5 +1,5 @@ import { DeliveryService, WeightUnit } from "@shipengine/connect-sdk"; -import { CarrierApp, NewShipmentPOJO, NewPackagePOJO, ShipmentCancellation, ShipmentCancellationPOJO } from "@shipengine/connect-sdk/lib/internal"; +import { CarrierApp, NewShipmentPOJO, NewPackagePOJO, ShipmentCancellationPOJO } from "@shipengine/connect-sdk/lib/internal"; import Suite from "../runner/suite"; import { initializeTimeStamps } from "../../utils/time-stamps"; import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; @@ -19,6 +19,9 @@ interface TestArgs { config: any; } +/** + * Test an individual cancellation of one shipment. + */ export class CancelShipment extends Suite { title = "cancelShipment"; @@ -160,7 +163,6 @@ export class CancelShipment extends Suite { const shipmentCancellationConfirmation = await carrierApp.cancelShipments(transaction, shipmentCancellations); - const customMsg = `The shipmentCancellationConfirmation cancellationID does not match the one that was included in the shipmentCancellation: ${cancellationID}`; expect(shipmentCancellationConfirmation[0].cancellationID).to.equal(cancellationID, customMsg); diff --git a/test/specs/core/test-app/tests/cancel-shipment.spec.js b/test/specs/core/test-app/tests/cancel-shipment.spec.js index 7308c95..d14f0d2 100644 --- a/test/specs/core/test-app/tests/cancel-shipment.spec.js +++ b/test/specs/core/test-app/tests/cancel-shipment.spec.js @@ -7,7 +7,7 @@ const { expect } = require("chai"); const sinon = require("sinon"); const { v4 } = require("uuid"); -describe.only("The cancel shipment test suite", () => { +describe("The cancel shipment test suite", () => { describe("when there is not address available for the delivery services", () => { it("should not generate tests", () => { @@ -250,12 +250,11 @@ describe.only("The cancel shipment test suite", () => { sinon.stub(CarrierApp.prototype, "createShipment").resolves(confirmationMock); - - const shipCancelOutcomeMock = [{ + const shipmentCancelledOutcomeMock = [{ cancellationId: v4() }]; - sinon.stub(CarrierApp.prototype, "cancelShipments"); + sinon.stub(CarrierApp.prototype, "cancelShipments").resolves(shipmentCancelledOutcomeMock); const app = new CarrierApp(appDefinition); const args = { app, connectArgs, staticConfigTests, options }; @@ -267,9 +266,14 @@ describe.only("The cancel shipment test suite", () => { expect(true).to.equal(false); } catch (error) { - expect(error.message).includes("The shipment confirmation packages array should have the same number of packages that were on the request"); + expect(error.message).includes("The shipmentCancellationConfirmation cancellationID does not match the one that was included in the shipmentCancellation"); } }); + + afterEach(() => { + CarrierApp.prototype.createShipment.restore(); + CarrierApp.prototype.cancelShipments.restore(); + }); }); }); @@ -285,6 +289,7 @@ function generateBasicAppAndConfigs() { deliveryService.packaging.push(pojo.packaging()); appDefinition.deliveryServices = [deliveryService]; appDefinition.createShipment = () => { }; + appDefinition.cancelShipments = () => { }; const options = { cli: { From 06e9d692ef6dc96cd9fc4372b8a915837dfe6fad Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 20 Aug 2020 05:09:32 -0500 Subject: [PATCH 45/53] initial return commit --- src/core/test-app.ts | 6 +- src/core/test-app/runner/config.ts | 3 + .../runner/config/create-shipment-return.ts | 26 ++ .../runner/load-and-validate-config.ts | 1 + .../test-app/tests/create-shipment-return.ts | 215 +++++++++++ src/core/test-app/tests/index.ts | 1 + .../test-app/utils/object-to-test-title.ts | 5 +- .../tests/create-shipment-return.spec.js | 360 ++++++++++++++++++ 8 files changed, 614 insertions(+), 3 deletions(-) create mode 100644 src/core/test-app/runner/config/create-shipment-return.ts create mode 100644 src/core/test-app/tests/create-shipment-return.ts create mode 100644 test/specs/core/test-app/tests/create-shipment-return.spec.js diff --git a/src/core/test-app.ts b/src/core/test-app.ts index e6d6977..2cde292 100644 --- a/src/core/test-app.ts +++ b/src/core/test-app.ts @@ -6,7 +6,8 @@ import { CreateShipmentDomestic, CreateShipmentWithInsurance, CreateShipmentMultiPackage, - RateShipment + RateShipment, + CreateShipmentReturn } from "./test-app/tests"; import { SdkApp } from "./types"; import { TestResults, useTestResults } from "./test-app/runner/test-results"; @@ -143,7 +144,8 @@ function registerTestSuiteModules(app: SdkApp): RegisteredTestSuiteModules { CreateShipmentInternational, CreateShipmentDomestic, CreateShipmentMultiPackage, - CreateShipmentWithInsurance + CreateShipmentWithInsurance, + CreateShipmentReturn ], rateShipment: [ RateShipment diff --git a/src/core/test-app/runner/config.ts b/src/core/test-app/runner/config.ts index aa77492..cc58d08 100644 --- a/src/core/test-app/runner/config.ts +++ b/src/core/test-app/runner/config.ts @@ -3,6 +3,7 @@ import { CreateShipmentDomesticConfigOptions } from "./config/create-shipment-do import { CreateShipmentMultiPackageConfigOptions } from './config/create-shipment-multipackage'; import { CreateShipmentWithInsuranceConfigOptions } from './config/create-shipment-insurance'; import { RateShipmentConfigOptions } from './config/rate-shipment'; +import { CreateShipmentReturnConfigOptions } from './config/create-shipment-return'; export interface TestsConfig { // cancelPickups?: (TestOptions & TestOptions) | [TestOptions]; @@ -16,8 +17,10 @@ export interface TestsConfig { | [CreateShipmentInternationalConfigOptions]; createShipment_multi_package?: CreateShipmentMultiPackageConfigOptions | [CreateShipmentMultiPackageConfigOptions]; createShipment_with_insurance?: CreateShipmentWithInsuranceConfigOptions | [CreateShipmentWithInsuranceConfigOptions]; + createShipment_return?: CreateShipmentReturnConfigOptions | [CreateShipmentReturnConfigOptions]; rateShipment?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; + // createShipment_multi_package?: TestOptions | [TestOptions]; // rateShipmentWithOneService?: RateShipmentConfigOptions | [RateShipmentConfigOptions]; // schedulePickup?: SchedulePickupOptions | [SchedulePickupOptions]; diff --git a/src/core/test-app/runner/config/create-shipment-return.ts b/src/core/test-app/runner/config/create-shipment-return.ts new file mode 100644 index 0000000..accfba2 --- /dev/null +++ b/src/core/test-app/runner/config/create-shipment-return.ts @@ -0,0 +1,26 @@ +import { + WeightUnit, + DateTimeZonePOJO, + AddressWithContactInfoPOJO +} from "@shipengine/connect-sdk"; +import { NewLabelPOJO } from "@shipengine/connect-sdk/lib/internal"; + +import { BaseTestConfigOptions } from "./base-test-config-options"; + +export interface CreateShipmentReturnTestParams { + deliveryServiceName: string; + label: NewLabelPOJO; + shipFrom?: AddressWithContactInfoPOJO; + returnTo?: AddressWithContactInfoPOJO; + weight: { + value: number; + unit: WeightUnit; + }; + shipDateTime: DateTimeZonePOJO | Date | string; + deliveryConfirmationName?: string; + rmaNumber?: string; +} + +export interface CreateShipmentReturnConfigOptions + extends CreateShipmentReturnTestParams, + BaseTestConfigOptions {} diff --git a/src/core/test-app/runner/load-and-validate-config.ts b/src/core/test-app/runner/load-and-validate-config.ts index 2280432..3f8fcb8 100644 --- a/src/core/test-app/runner/load-and-validate-config.ts +++ b/src/core/test-app/runner/load-and-validate-config.ts @@ -47,6 +47,7 @@ function validate(config: Config): void { "createShipment_multi_package", "createShipment_regional", "createShipment_with_insurance", + "createShipment_return", "rateShipment", "schedulePickup", "trackShipment", diff --git a/src/core/test-app/tests/create-shipment-return.ts b/src/core/test-app/tests/create-shipment-return.ts new file mode 100644 index 0000000..3cb8132 --- /dev/null +++ b/src/core/test-app/tests/create-shipment-return.ts @@ -0,0 +1,215 @@ +import { DeliveryService, WeightUnit, DeliveryConfirmation } from "@shipengine/connect-sdk"; +import { CarrierApp, NewShipmentPOJO, NewPackagePOJO } from "@shipengine/connect-sdk/lib/internal"; +import Suite from "../runner/suite"; +import { + CreateShipmentReturnConfigOptions, + CreateShipmentReturnTestParams, +} from "../runner/config/create-shipment-return"; +import { initializeTimeStamps } from "../../utils/time-stamps"; +import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; +import objectToTestTitle from '../utils/object-to-test-title'; +import useDomesticShippingAddress from '../utils/use-domestic-shipment-addresses'; + +import { findDomesticDeliveryService } from '../utils/find-domestic-delivery-service'; +import { expect } from "chai"; +import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; +import findDeliveryConfirmationByName from '../utils/find-delivery-confirmation-by-name'; + +interface TestArgs { + title: string; + methodArgs: NewShipmentPOJO; + config: any; +} + +export class CreateShipmentReturn extends Suite { + title = "createShipment_return"; + + private deliveryService?: DeliveryService; + + private deliveryConfirmation?: DeliveryConfirmation; + + private setDeliveryService( + config: CreateShipmentReturnConfigOptions, + ): void { + const carrierApp = this.app as CarrierApp; + + if (config.deliveryServiceName) { + this.deliveryService = findDeliveryServiceByName( + config.deliveryServiceName, + carrierApp, + ); + } else { + try { + this.deliveryService = findDomesticDeliveryService(carrierApp); + } catch { + this.deliveryService = undefined; + } + } + } + + private setDeliveryConfirmation( + config: CreateShipmentReturnConfigOptions, + ): void { + if (config.deliveryConfirmationName) { + // We do not want to handle the exception here if this raises. It indicates issues w/ the config provided. + this.deliveryConfirmation = findDeliveryConfirmationByName( + config.deliveryConfirmationName, + this.app as CarrierApp, + ); + } else if ( + this.deliveryService && + this.deliveryService.deliveryConfirmations.length !== 0 && + this.deliveryService.deliveryConfirmations[0] + ) { + this.deliveryConfirmation = this.deliveryService.deliveryConfirmations[0]; + } else { + this.deliveryConfirmation = undefined; + } + } + + buildTestArg( + config: CreateShipmentReturnConfigOptions, + ): TestArgs | undefined { + this.setDeliveryService(config); + this.setDeliveryConfirmation(config); + + if (!this.deliveryService) return undefined; + + let shipFrom; + let returnTo; + try { + [shipFrom, returnTo] = useDomesticShippingAddress(this.deliveryService); + } catch { } + + const { tomorrow } = initializeTimeStamps(); + + // Make a best guess at the defaults, need to resolve the default vs config based delivery service early + // on since that determines what address and associated timezones get generated. + const defaults: CreateShipmentReturnTestParams = { + deliveryServiceName: this.deliveryService.name, + label: { + size: this.deliveryService.labelSizes[0], + format: this.deliveryService.labelFormats[0] + }, + shipDateTime: tomorrow, + shipFrom: shipFrom, + returnTo: returnTo, + weight: { + unit: WeightUnit.Pounds, + value: 50.0, + }, + rmaNumber: `RMA-${Buffer.from(new Date().toISOString()).toString("base64").toUpperCase()}` + }; + + if (this.deliveryService.deliveryConfirmations.length > 0) { + defaults.deliveryConfirmationName = this.deliveryService.deliveryConfirmations[0].name; + } + + const testParams = reduceDefaultsWithConfig< + CreateShipmentReturnTestParams + >(defaults, config); + + if (!testParams.shipFrom || !testParams.returnTo) return undefined; + + const packagePOJO: NewPackagePOJO = { + packaging: { + id: this.deliveryService.packaging[0].id + }, + label: { + size: testParams.label.size, + format: testParams.label.format, + }, + weight: { + value: testParams.weight.value, + unit: testParams.weight.unit, + }, + }; + + const newShipmentPOJO: NewShipmentPOJO = { + deliveryService: { + id: this.deliveryService.id, + }, + shipFrom: testParams.shipFrom!, + shipTo: testParams.returnTo!, + shipDateTime: testParams.shipDateTime, + packages: [packagePOJO], + returns: { + isReturn: true, + rmaNumber: testParams.rmaNumber + } + }; + + const title = config.expectedErrorMessage + ? `it raises an error when creating a new return shipment with ${objectToTestTitle( + testParams, + )}` + : `it creates a new return shipment with ${objectToTestTitle( + testParams, + )}`; + + if (this.deliveryConfirmation) { + newShipmentPOJO.deliveryConfirmation = { + id: this.deliveryConfirmation.id, + }; + } + + if (testParams.deliveryConfirmationName) { + newShipmentPOJO.deliveryConfirmation = { + id: this.deliveryService.deliveryConfirmations.find( + (dc) => dc.name === testParams.deliveryConfirmationName, + )!.id, + }; + } + + return { + title, + methodArgs: newShipmentPOJO, + config, + }; + } + + buildTestArgs(): Array { + if (Array.isArray(this.config)) { + return this.config.map((config: CreateShipmentReturnConfigOptions) => { + return this.buildTestArg(config); + }); + } + const config = this.config as CreateShipmentReturnConfigOptions; + return [this.buildTestArg(config)]; + } + + tests() { + const testArgs = this.buildTestArgs().filter((args) => args !== undefined); + + if (testArgs.length === 0) { + return []; + } + return testArgs.map((testArg) => { + return this.test( + testArg!.title, + testArg!.methodArgs, + testArg!.config, + async () => { + const carrierApp = this.app as CarrierApp; + + const transaction = await this.transaction(testArg!.config); + + if (!carrierApp.createShipment) { + throw new Error("createShipment is not implemented"); + } + + const shipmentConfirmation = await carrierApp.createShipment(transaction, testArg!.methodArgs); + + // If DeliveryServiceDefinition.isTrackable is true, then the shipment must have a trackingNumber set + if (this.deliveryService?.isTrackable) { + const customMsg = "The shipmentConfirmation.isTrackable returned from createShipment must be present when the given deliveryService.isTrackable is set to 'true'"; + expect(shipmentConfirmation.trackingNumber, customMsg).to.be.ok; + } + + const customMsg = "The shipment confirmation packages array should have the same number of packages that were on the request"; + expect(shipmentConfirmation.packages.length).to.equal(testArg!.methodArgs.packages.length, customMsg); + } + ); + }); + } +} diff --git a/src/core/test-app/tests/index.ts b/src/core/test-app/tests/index.ts index 140a74d..c18b5d9 100644 --- a/src/core/test-app/tests/index.ts +++ b/src/core/test-app/tests/index.ts @@ -5,6 +5,7 @@ export * from "./create-shipment-domestic"; export * from "./create-shipment-multipackage"; export * from "./create-shipment-with-insurance"; export * from "./create-shipment-international"; +export * from "./create-shipment-return"; // export * from "./get-sales-order-test-suite"; // export * from "./get-sales-orders-by-date-test-suite"; // export * from "./get-seller-test-suite"; diff --git a/src/core/test-app/utils/object-to-test-title.ts b/src/core/test-app/utils/object-to-test-title.ts index 89e8d8e..459d195 100644 --- a/src/core/test-app/utils/object-to-test-title.ts +++ b/src/core/test-app/utils/object-to-test-title.ts @@ -8,6 +8,8 @@ function formatTitleParameter(key: string, value: any) { return value.country; case "shipFrom": return value.country; + case "returnTo": + return value.country; case "packages": return `${value.length}`; @@ -15,11 +17,12 @@ function formatTitleParameter(key: string, value: any) { if (Array.isArray(value)) { return `${value.join(", ")}`; } - + return `${value}`; case "packageInsuredValue": return `${value.value} ${value.currency}`; + default: return value; } diff --git a/test/specs/core/test-app/tests/create-shipment-return.spec.js b/test/specs/core/test-app/tests/create-shipment-return.spec.js new file mode 100644 index 0000000..2e9c8f1 --- /dev/null +++ b/test/specs/core/test-app/tests/create-shipment-return.spec.js @@ -0,0 +1,360 @@ +"use strict"; + +const { CreateShipmentReturn } = require("../../../../../lib/core/test-app/tests/create-shipment-return"); +const { CarrierApp } = require("@shipengine/connect-sdk/lib/internal/carriers/carrier-app"); +const pojo = require("../../../utils/pojo"); +const { expect } = require("chai"); +const sinon = require("sinon"); + +describe("The create shipment return test suite", () => { + + describe("when there is no delivery service", () => { + + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["MX"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + + describe("when there is not address available for a delivery service", () => { + it("should not generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices[0].originCountries = ["AQ"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ"]; + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + + const tests = testSuite.tests(); + expect(tests.length).to.equal(0); + }); + }); + + describe("when there is a delivery service with an available address", () => { + + let testSuite; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + + testSuite = new CreateShipmentReturn(args); + }); + + it("should generate a test", () => { + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + + it("the test params should be reflected in the title", () => { + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("label: A4 pdf"); + expect(tests[0].title).to.include("weight: 50lb"); + }); + }); + + describe("when there is a config override object of test suite parameters", () => { + + it("should update the test title", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const newPackaging = pojo.packaging(); + newPackaging.name = "New Package"; + appDefinition.deliveryServices[0].packaging.push(newPackaging); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.createShipment_return = { + weight: { + value: 200, + unit: "lb" + }, + + label: { + size: "A6", + format: "png" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("label: A6 png"); + expect(tests[0].title).to.include("weight: 200lb"); + }); + }); + + describe("when there is a config override array of test suite parameters", () => { + + let tests; + beforeEach(() => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.createShipment_return = + [ + { + weight: { + value: 200, + unit: "lb" + }, + label: { + size: "A6", + format: "png" + } + }, + { + weight: { + value: 22, + unit: "lb" + } + } + ]; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + tests = testSuite.tests(); + }); + + + it("should generate additional tests", () => { + expect(tests.length).to.equal(2); + }); + + it("should update the test titles", () => { + expect(tests[0].title).to.include("weight: 200lb"); + expect(tests[0].title).to.include("label: A6 png"); + + expect(tests[1].title).to.include("weight: 22lb"); + }); + }); + + describe("When a user configs a delivery service that does not exist", () => { + it("should throw an error", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + const app = new CarrierApp(appDefinition); + staticConfigTests.createShipment_return = { + deliveryServiceName: "asdf" + } + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + + try { + testSuite.tests(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).to.include("deliveryServiceName: 'asdf' does not exist"); + } + }); + }); + + describe("When a user configs a new delivery service", () => { + it("should update the title params to reflect the new properties", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + appDefinition.deliveryServices.push({ + id: "9cf1bfda-7ee4-4f03-96f6-6eab52243eee", + name: "Better Delivery Service", + class: "ground", + code: "better_ds", + grade: "standard", + manifestType: "physical", + originCountries: ["MX"], + destinationCountries: ["MX"], + labelFormats: ["pdf"], + labelSizes: ["A4"], + packaging: [pojo.packaging()] + }); + + staticConfigTests.createShipment_return = { + deliveryServiceName: "Better Delivery Service" + } + + const app = new CarrierApp(appDefinition); + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + + expect(tests[0].title).to.include("deliveryServiceName: Better Delivery Service"); + expect(tests[0].title).to.include("label: A4 pdf"); + }); + }); + + describe("When a delivery service has addresses that we don't have samples but user uses valid configs", () => { + it("should generate tests", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + appDefinition.deliveryServices[0].originCountries = ["AQ", "US"]; + appDefinition.deliveryServices[0].destinationCountries = ["AQ", "US"]; + + + const app = new CarrierApp(appDefinition); + + staticConfigTests.createShipment_return = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + }, + returnTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422", + timeZone: "America/Chicago" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + expect(tests.length).to.equal(1); + }); + }); + + describe("When a user configures a Ship To and Ship From address", () => { + it("should update the test arguments and titles", () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const app = new CarrierApp(appDefinition); + + staticConfigTests.createShipment_return = { + shipFrom: { + company: "Domestic Route #1", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422" + }, + returnTo: { + company: "Domestic Route #2", + addressLines: ["123 New Street"], + cityLocality: "Houston", + stateProvince: "TX", + country: "US", + postalCode: "77422" + } + }; + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + + expect(tests[0].methodArgs.shipFrom.company).to.equal("Domestic Route #1"); + expect(tests[0].methodArgs.shipTo.company).to.equal("Domestic Route #2"); + + expect(tests[0].methodArgs.shipTo).to.eql(staticConfigTests.createShipment_return.returnTo); + + expect(tests[0].title).to.include("shipFrom: US"); + expect(tests[0].title).to.include("returnTo: US"); + + }); + }); + + describe("When a delivery service 'isTrackable' property is set", () => { + it("should throw an error if no tracking number is returned", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + appDefinition.deliveryServices[0].isTrackable = true; + const confirmationMock = pojo.shipmentConfirmation(); + sinon.stub(CarrierApp.prototype, "createShipment").resolves(confirmationMock); + const app = new CarrierApp(appDefinition); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("The shipmentConfirmation.isTrackable returned from createShipment must be present when the given deliveryService.isTrackable is set to 'true'"); + } + }); + + afterEach(() => { + CarrierApp.prototype.createShipment.restore(); + }); + }); + + describe("When the input parameters do not match the return shipment", () => { + + it("should throw an error for a packaging length mismatch", async () => { + const { appDefinition, connectArgs, staticConfigTests, options } = generateBasicAppAndConfigs(); + + const confirmationMock = pojo.shipmentConfirmation(); + confirmationMock.packages.push(pojo.packageConfirmation()); + sinon.stub(CarrierApp.prototype, "createShipment").resolves(confirmationMock); + const app = new CarrierApp(appDefinition); + + const args = { app, connectArgs, staticConfigTests, options }; + const testSuite = new CreateShipmentReturn(args); + const tests = testSuite.tests(); + try { + await tests[0].fn(); + expect(true).to.equal(false); + } + catch (error) { + expect(error.message).includes("The shipment confirmation packages array should have the same number of packages that were on the request"); + } + }); + + afterEach(() => { + CarrierApp.prototype.createShipment.restore(); + }); + + }); +}); + +function generateBasicAppAndConfigs() { + const appDefinition = pojo.carrierApp(); + const deliveryService = pojo.deliveryService(); + deliveryService.manifestType = "digital"; + deliveryService.labelFormats = ["pdf"]; + deliveryService.code = "priority_overnight"; + deliveryService.labelSizes = ["A4"]; + deliveryService.deliveryConfirmations = [pojo.deliveryConfirmation()]; + deliveryService.packaging.push(pojo.packaging()); + appDefinition.deliveryServices = [deliveryService]; + appDefinition.createShipment = () => { }; + + const options = { + cli: { + debug: false, + }, + staticRootConfig: { + debug: false + }, + defaults: { + debug: false + }, + failFast: false, + retries: undefined, + timeout: undefined + }; + + const staticConfigTests = { + createShipment_return: {} + }; + + const connectArgs = {}; + + return { appDefinition, connectArgs, staticConfigTests, options }; +} From 866a4931a298dbce31e4dced37bb38ecb2c0d9bd Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 20 Aug 2020 06:11:52 -0500 Subject: [PATCH 46/53] change default delivery service selection --- src/core/test-app/tests/create-shipment-return.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/test-app/tests/create-shipment-return.ts b/src/core/test-app/tests/create-shipment-return.ts index 3cb8132..f462411 100644 --- a/src/core/test-app/tests/create-shipment-return.ts +++ b/src/core/test-app/tests/create-shipment-return.ts @@ -40,7 +40,7 @@ export class CreateShipmentReturn extends Suite { ); } else { try { - this.deliveryService = findDomesticDeliveryService(carrierApp); + this.deliveryService = carrierApp.deliveryServices[0]; } catch { this.deliveryService = undefined; } From 710925777d3b3095ffe9aeb95066155e040243b2 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 20 Aug 2020 06:13:19 -0500 Subject: [PATCH 47/53] remove unused import --- src/core/test-app/tests/create-shipment-return.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/test-app/tests/create-shipment-return.ts b/src/core/test-app/tests/create-shipment-return.ts index f462411..3e0e07e 100644 --- a/src/core/test-app/tests/create-shipment-return.ts +++ b/src/core/test-app/tests/create-shipment-return.ts @@ -10,7 +10,6 @@ import reduceDefaultsWithConfig from '../utils/reduce-defaults-with-config'; import objectToTestTitle from '../utils/object-to-test-title'; import useDomesticShippingAddress from '../utils/use-domestic-shipment-addresses'; -import { findDomesticDeliveryService } from '../utils/find-domestic-delivery-service'; import { expect } from "chai"; import findDeliveryServiceByName from '../utils/find-delivery-service-by-name'; import findDeliveryConfirmationByName from '../utils/find-delivery-confirmation-by-name'; From 2f18f361037ccc6c13c68d0289e79e6ee5ff83e7 Mon Sep 17 00:00:00 2001 From: rkrauskopf Date: Thu, 20 Aug 2020 21:03:02 -0500 Subject: [PATCH 48/53] release v1.0.13 --- README.md | 20 +++++++-------- package-lock.json | 65 ++++++++++++++++++++++++++--------------------- package.json | 10 ++++---- 3 files changed, 51 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 6e384b1..3202e4f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.12 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.13 linux-x64 node-v12.18.1 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -75,7 +75,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/info.ts)_ +_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/info.ts)_ ## `connect init [PATH]` @@ -100,7 +100,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/init.ts)_ ## `connect login` @@ -117,7 +117,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/login.ts)_ ## `connect logout` @@ -134,7 +134,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/logout.ts)_ +_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/logout.ts)_ ## `connect pack` @@ -151,7 +151,7 @@ EXAMPLE $ connect pack ``` -_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/pack.ts)_ +_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/pack.ts)_ ## `connect publish` @@ -170,7 +170,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/publish.ts)_ +_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/publish.ts)_ ## `connect start` @@ -185,7 +185,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/start.ts)_ +_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/start.ts)_ ## `connect test` @@ -208,7 +208,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/test.ts)_ +_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/test.ts)_ ## `connect whoami` @@ -225,5 +225,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.12/src/commands/whoami.ts)_ +_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index c91bef2..528c861 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.12", + "version": "1.0.13", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -265,18 +265,6 @@ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz", "integrity": "sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw==" }, - "@hapi/joi": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", - "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", - "requires": { - "@hapi/address": "^4.0.1", - "@hapi/formula": "^2.0.0", - "@hapi/hoek": "^9.0.0", - "@hapi/pinpoint": "^2.0.0", - "@hapi/topo": "^5.0.0" - } - }, "@hapi/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", @@ -1163,11 +1151,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.9.tgz", - "integrity": "sha512-pmQ2WJl6qFUBfMxiZx7J+YTITc9JtpZeugRFLirqOwY3fMgQNGTGALTsCFyCCHttmYvC9de1/1UT96FFcv8Iyg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.11.tgz", + "integrity": "sha512-/fo1KIhZlmwa6+8DBVckTVoiWLCU0gyLDBXXtUoInbqRPXaGSB7mg3USGSrN8Fw5Z8syiiS2sKEIMzHuQaQlGA==", "requires": { - "@shipengine/connect-sdk": "^1.0.7", + "@shipengine/connect-sdk": "^1.0.8", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,11 +1163,11 @@ } }, "@shipengine/connect-local-dev-api": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.8.tgz", - "integrity": "sha512-rtdBukPkBoxU9cMm94iRdlo1DsL4C4Q7FC2VBRsrJzmpac8XEogp33Q3GBOFseTlYQdU+b9lQbAyL8Lf2qVATw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@shipengine/connect-local-dev-api/-/connect-local-dev-api-1.0.10.tgz", + "integrity": "sha512-M5DUqR0sGw69bwDxIH/kKfzunmDU+WakmqyHKtfCkFH/AOcP/EJQrsR168DNeIzt2JYR5cjaHWZu8l4ZHon2qQ==", "requires": { - "@shipengine/connect-loader": "^1.0.9", + "@shipengine/connect-loader": "^1.0.11", "chai": "^4.2.0", "chalk": "^4.1.0", "cors": "^2.8.5", @@ -1187,15 +1175,15 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.7.tgz", - "integrity": "sha512-v+GE6JeQfugDOJkmNdJew34ZKO9A91dsQDE2EhMuH1TErYu0HNKX01MgUwxN/g5Ok7xSke55sNmarMUB/KM1Nw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.9.tgz", + "integrity": "sha512-sKV9OXuTU1Yx9I7kFavKTesKZYcuqo5Nm40nrvqfDa+lRY6Dmu4h3PZpRxCRNXtE5jf7LYzz7eQsBX9xSoJTuw==", "requires": { - "@hapi/joi": "^17.1.1", "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.5", "@types/react-jsonschema-form": "^1.7.4", "currency.js": "^2.0.2", + "joi": "^17.2.1", "moment-timezone": "^0.5.31" }, "dependencies": { @@ -1203,6 +1191,18 @@ "version": "7.0.5", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + }, + "joi": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz", + "integrity": "sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA==", + "requires": { + "@hapi/address": "^4.1.0", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" + } } } }, @@ -1998,11 +1998,18 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", + "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", "requires": { - "follow-redirects": "1.5.10" + "follow-redirects": "^1.10.0" + }, + "dependencies": { + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + } } }, "babel-runtime": { diff --git a/package.json b/package.json index 59534e2..2698e09 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.12", + "version": "1.0.13", "author": { "name": "ShipEngine", "email": "support@shipengine.com", @@ -20,10 +20,10 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.9", - "@shipengine/connect-local-dev-api": "^1.0.8", - "@shipengine/connect-sdk": "^1.0.7", - "axios": "^0.19.2", + "@shipengine/connect-loader": "^1.0.11", + "@shipengine/connect-local-dev-api": "^1.0.10", + "@shipengine/connect-sdk": "^1.0.9", + "axios": "^0.20.0", "chai": "^4.2.0", "chalk": "^4.1.0", "escape-string-regexp": "^4.0.0", From 1ac96595c5c673d6cf24454361630646495ad59f Mon Sep 17 00:00:00 2001 From: James Messinger Date: Sun, 23 Aug 2020 13:22:33 -0500 Subject: [PATCH 49/53] Updated website links --- README.md | 4 +++- package.json | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3202e4f..ee89bac 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ +![ShipEngine Connect](https://connect.shipengine.com/img/logos/shipengine-connect-logo.png) + # ShipEngine Connect CLI -### Command-line tool for building [ShipEngine Connect](https://connect.shipengine.com/docs/) apps +### Command-line tool for building [ShipEngine Connect](https://connect.shipengine.com/) apps [![Cross-Platform Compatibility](https://shipengine.github.io/img/badges/os-badges.svg)](https://github.com/ShipEngine/connect-cli/actions) [![Build Status](https://github.com/ShipEngine/connect-cli/workflows/CI-CD/badge.svg)](https://github.com/ShipEngine/connect-cli/actions) diff --git a/package.json b/package.json index 2698e09..ddb5597 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": { "name": "ShipEngine", "email": "support@shipengine.com", - "url": "https://www.shipengine.com" + "url": "https://connect.shipengine.com" }, "bin": { "connect": "./bin/run", @@ -105,7 +105,7 @@ "/oclif.manifest.json", "/templates" ], - "homepage": "https://www.shipengine.com/docs/", + "homepage": "https://connect.shipengine.com", "keywords": [ "api", "cli", From d77610317ce95973c7444190e8d4a51f16a8f06b Mon Sep 17 00:00:00 2001 From: James Messinger Date: Sun, 23 Aug 2020 13:56:12 -0500 Subject: [PATCH 50/53] Updated dependencies --- package-lock.json | 4898 ++++++++++++++++++++++++--------------------- package.json | 10 +- 2 files changed, 2583 insertions(+), 2325 deletions(-) diff --git a/package-lock.json b/package-lock.json index 528c861..d49e637 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,37 +5,43 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.10.1" + "@babel/highlight": "^7.10.4" } }, "@babel/core": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", - "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.2", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helpers": "^7.10.1", - "@babel/parser": "^7.10.2", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.2", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", + "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.4", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -45,14 +51,13 @@ } }, "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", "dev": true, "requires": { - "@babel/types": "^7.10.2", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { @@ -65,124 +70,132 @@ } }, "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, "@babel/helpers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", - "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { - "@babel/helper-validator-identifier": "^7.10.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -191,59 +204,78 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", "dev": true }, "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -289,42 +321,6 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } } }, "@istanbuljs/schema": { @@ -333,12 +329,6 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, - "@jsdevtools/eslint-config-modular": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@jsdevtools/eslint-config-modular/-/eslint-config-modular-8.0.4.tgz", - "integrity": "sha512-Nds9SGIJz/hU6rOOAzTvUbQ6X4zGQtSwVSEpGhEnSTriUg0hX1bDDpGdrket6QrdI6ozBvRvuHv4VGkC1bmIGQ==", - "dev": true - }, "@jsdevtools/ez-spawn": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz", @@ -423,12 +413,6 @@ "requires": { "chalk": "^4.0.0" } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true } } }, @@ -448,19 +432,12 @@ "requires": { "@nodelib/fs.stat": "2.0.3", "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" - } } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" }, "@nodelib/fs.walk": { "version": "1.2.4", @@ -483,6 +460,19 @@ "tslib": "^1" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -501,6 +491,19 @@ "color-convert": "^2.0.1" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -512,23 +515,31 @@ } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -547,103 +558,6 @@ "@oclif/plugin-help": "^3", "debug": "^4.1.1", "semver": "^7.3.2" - }, - "dependencies": { - "@oclif/errors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", - "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", - "requires": { - "clean-stack": "^3.0.0", - "fs-extra": "^9.0.1", - "indent-string": "^4.0.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "clean-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", - "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", - "requires": { - "escape-string-regexp": "4.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } } }, "@oclif/config": { @@ -657,106 +571,6 @@ "globby": "^11.0.1", "is-wsl": "^2.1.1", "tslib": "^2.0.0" - }, - "dependencies": { - "@oclif/errors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", - "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", - "requires": { - "clean-stack": "^3.0.0", - "fs-extra": "^9.0.1", - "indent-string": "^4.0.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "clean-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", - "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", - "requires": { - "escape-string-regexp": "4.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } } }, "@oclif/dev-cli": { @@ -795,6 +609,21 @@ "wrap-ansi": "^4.0.0" } }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -804,16 +633,35 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -825,12 +673,21 @@ "universalify": "^0.1.0" } }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -842,38 +699,115 @@ "strip-ansi": "^5.1.0" } }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true - } - } - }, - "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", - "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } } } }, + "@oclif/errors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", + "integrity": "sha512-EJR6AIOEkt/NnARNIVAskPDVtdhtO5TTNXmhDrGqMoWVsr0R6DkkLrMyq95BmHvlVWM1nduoq4fQPuCyuF2jaA==", + "requires": { + "clean-stack": "^3.0.0", + "fs-extra": "^9.0.1", + "indent-string": "^4.0.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "@oclif/fixpack": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@oclif/fixpack/-/fixpack-2.3.0.tgz", @@ -901,6 +835,14 @@ "tslib": "^1.9.3" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -911,6 +853,19 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -937,6 +892,14 @@ "moment": "^2.22.1" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -945,15 +908,26 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -963,6 +937,19 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" } } }, @@ -983,9 +970,17 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.4.2", @@ -997,50 +992,56 @@ "supports-color": "^5.3.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", "requires": { - "string-width": "^4.0.0" + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } } } @@ -1062,6 +1063,19 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1070,13 +1084,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } }, "clean-stack": { @@ -1110,15 +1117,31 @@ "supports-hyperlinks": "^1.0.1", "treeify": "^1.1.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "extract-stack": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-1.0.0.tgz", + "integrity": "sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo=" + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -1128,6 +1151,61 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-hyperlinks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", + "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "requires": { + "has-flag": "^2.0.0", + "supports-color": "^5.0.0" + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" } } }, @@ -1151,11 +1229,11 @@ "integrity": "sha512-enWZWkF8pRkdXXl72gG5aNTI5rTIx69e9p/ci/KXSx96859hvoCtXNtpA8HlzReA66NSIH7BCFe2vHkUxCOiQw==" }, "@shipengine/connect-loader": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.11.tgz", - "integrity": "sha512-/fo1KIhZlmwa6+8DBVckTVoiWLCU0gyLDBXXtUoInbqRPXaGSB7mg3USGSrN8Fw5Z8syiiS2sKEIMzHuQaQlGA==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@shipengine/connect-loader/-/connect-loader-1.0.12.tgz", + "integrity": "sha512-c7SwEr4DXKfEksix3V9QMsgQupeQtKY79L4fNh4ADMXD5eenkJQBeKbf2ihjptfUdM+F0CJqRHiFdDgQf2n2WA==", "requires": { - "@shipengine/connect-sdk": "^1.0.8", + "@shipengine/connect-sdk": "^1.0.10", "js-yaml": "^3.14.0", "json5": "^2.1.3", "resolve-from": "^5.0.0", @@ -1175,9 +1253,9 @@ } }, "@shipengine/connect-sdk": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.9.tgz", - "integrity": "sha512-sKV9OXuTU1Yx9I7kFavKTesKZYcuqo5Nm40nrvqfDa+lRY6Dmu4h3PZpRxCRNXtE5jf7LYzz7eQsBX9xSoJTuw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@shipengine/connect-sdk/-/connect-sdk-1.0.10.tgz", + "integrity": "sha512-E0DEk+gZwrPtH4RH/7hw+tfK3aWkAWyo+BmnynOxb2EtqRrJhsXzMIoRCFj2Oa8s+Z+7aL/sk2uPZnmplP/1WQ==", "requires": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.5", @@ -1185,25 +1263,6 @@ "currency.js": "^2.0.2", "joi": "^17.2.1", "moment-timezone": "^0.5.31" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" - }, - "joi": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz", - "integrity": "sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA==", - "requires": { - "@hapi/address": "^4.1.0", - "@hapi/formula": "^2.0.0", - "@hapi/hoek": "^9.0.0", - "@hapi/pinpoint": "^2.0.0", - "@hapi/topo": "^5.0.0" - } - } } }, "@sindresorhus/is": { @@ -1302,8 +1361,7 @@ "@types/eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" }, "@types/expect": { "version": "1.20.4", @@ -1330,9 +1388,9 @@ } }, "@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "requires": { "@types/minimatch": "*", "@types/node": "*" @@ -1345,9 +1403,9 @@ "dev": true }, "@types/inquirer": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.0.tgz", - "integrity": "sha512-wcPs5jTrZYQBzzPlvUEzBcptzO4We2sijSvkBq8oAKRMJoH8PvrmP6QQnxLB5RScNUmRfujxA+ngxD4gk4xe7Q==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.1.tgz", + "integrity": "sha512-osD38QVIfcdgsPCT0V3lD7eH0OFurX71Jft18bZrsVQWVRt6TuxRzlr0GJLrxoHZR2V5ph7/qP8se/dcnI7o0g==", "dev": true, "requires": { "@types/through": "*", @@ -1367,9 +1425,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" }, "@types/json5": { "version": "0.0.30", @@ -1378,15 +1436,15 @@ "dev": true }, "@types/lodash": { - "version": "4.14.155", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.155.tgz", - "integrity": "sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==", + "version": "4.14.159", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.159.tgz", + "integrity": "sha512-gF7A72f7WQN33DpqOWw9geApQPh4M3PxluMtaHxWHXEGSN12/WbcEk/eNSqWNQcQhF66VSZ06vCF94CrHwXJDg==", "dev": true }, "@types/luxon": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.24.1.tgz", - "integrity": "sha512-t93qL4l3PRxy4qQkXwiPS6qjIt7S6o90XMuCfvYDgIAQJvgSBni5qVPxkhGYPnZZPS9ASHOTeCZXRNmdiHHHcg==", + "version": "1.24.3", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.24.3.tgz", + "integrity": "sha512-8lkeHb0Hkpyqmj0lYrZItakKM73jaKTUe4/PMl2e8o96oxTUzagbbz2DUOMn0NpjSovmZQTJvoCheFeI2bwS4g==", "dev": true }, "@types/mem-fs": { @@ -1481,9 +1539,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/sinon": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.4.tgz", - "integrity": "sha512-sJmb32asJZY6Z2u09bl0G2wglSxDlROlAejCjsnor+LzBMz17gu8IU7vKC/vWDnv9zEq2wqADHVXFjf4eE8Gdw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.5.tgz", + "integrity": "sha512-4CnkGdM/5/FXDGqL32JQ1ttVrGvhOoesLLF7VnTh4KdjK5N5VQOtxaylFqqTjnHx55MnD9O02Nbk5c1ELC8wlQ==", "dev": true, "requires": { "@types/sinonjs__fake-timers": "*" @@ -1575,111 +1633,68 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.1.tgz", + "integrity": "sha512-XIr+Mfv7i4paEdBf0JFdIl9/tVxyj+rlilWIfZ97Be0lZ7hPvUbS5iHt9Glc8kRI53dsr0PcAEudbf8rO2wGgg==", "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/experimental-utils": "3.9.1", + "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", + "semver": "^7.3.2", "tsutils": "^3.17.1" - }, - "dependencies": { - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - } } }, "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.1.tgz", + "integrity": "sha512-lkiZ8iBBaYoyEKhCkkw4SAeatXyBq9Ece5bZXdLe1LWBUwTszGbmbiqmQbwWA8cSYDnjWXp9eDbXpf9Sn0hLAg==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", + "@typescript-eslint/types": "3.9.1", + "@typescript-eslint/typescript-estree": "3.9.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } } }, "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.9.1.tgz", + "integrity": "sha512-y5QvPFUn4Vl4qM40lI+pNWhTcOWtpZAJ8pOEQ21fTTW4xTJkRplMjMRje7LYTXqVKKX9GJhcyweMz2+W1J5bMg==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", + "@typescript-eslint/experimental-utils": "3.9.1", + "@typescript-eslint/types": "3.9.1", + "@typescript-eslint/typescript-estree": "3.9.1", "eslint-visitor-keys": "^1.1.0" } }, + "@typescript-eslint/types": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.9.1.tgz", + "integrity": "sha512-15JcTlNQE1BsYy5NBhctnEhEoctjXOjOK+Q+rk8ugC+WXU9rAcS2BYhoh6X4rOaXJEpIYDl+p7ix+A5U0BqPTw==" + }, "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.1.tgz", + "integrity": "sha512-IqM0gfGxOmIKPhiHW/iyAEXwSVqMmR2wJ9uXHNdFpqVvPaQ3dWg302vW127sBpAiqM9SfHhyS40NKLsoMpN2KA==", "requires": { + "@typescript-eslint/types": "3.9.1", + "@typescript-eslint/visitor-keys": "3.9.1", "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", "glob": "^7.1.6", "is-glob": "^4.0.1", "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.1.tgz", + "integrity": "sha512-zxdtUjeoSh+prCpogswMwVUJfEFmCOjdzK9rpNjNBfm6EyPt99x3RrJoBOGZO23FCt0WPKUCOL5mb/9D5LjdwQ==", + "requires": { + "eslint-visitor-keys": "^1.1.0" } }, "JSONStream": { @@ -1718,9 +1733,9 @@ "dev": true }, "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -1732,19 +1747,13 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true } } }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1769,6 +1778,21 @@ "string-width": "^3.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1778,6 +1802,14 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -1795,16 +1827,17 @@ } }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "requires": { - "color-convert": "^1.9.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, "ansicolors": { @@ -1892,13 +1925,15 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array-uniq": { "version": "1.0.3", @@ -1993,9 +2028,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" }, "axios": { "version": "0.20.0", @@ -2003,13 +2038,6 @@ "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", "requires": { "follow-redirects": "^1.10.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" - } } }, "babel-runtime": { @@ -2119,6 +2147,14 @@ "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } } }, "body-parser": { @@ -2138,11 +2174,6 @@ "type-is": "~1.6.17" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2155,11 +2186,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -2178,20 +2204,6 @@ "widest-line": "^3.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -2201,52 +2213,11 @@ "supports-color": "^7.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -2259,14 +2230,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } } } }, @@ -2313,6 +2276,11 @@ "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", "dev": true }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -2343,6 +2311,14 @@ "responselike": "^1.0.2" }, "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -2360,20 +2336,6 @@ "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } } }, "call-me-maybe": { @@ -2424,16 +2386,14 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2540,28 +2500,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2609,10 +2547,9 @@ "dev": true }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "class-utils": { "version": "0.3.6", @@ -2653,9 +2590,12 @@ } }, "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", + "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", + "requires": { + "escape-string-regexp": "4.0.0" + } }, "cli-boxes": { "version": "2.2.0", @@ -2677,41 +2617,6 @@ "requires": { "colors": "^1.1.2", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "cli-spinners": { @@ -2736,9 +2641,9 @@ } }, "cli-ux": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.4.6.tgz", - "integrity": "sha512-EeiS2TzEndRVknCqE+8Ri8g0bsP617a1nq6n+3Trwft1JCDzyUNlX2J1fl7fwTgRPWtmBmiF6xIyueL5YGs65g==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.4.10.tgz", + "integrity": "sha512-s48Efw04VtGyQEwXDrERobMc2DF2DyYQ+2nmNsM7clxOVDtbRI9OjbXRwPeS6G2aFuHy0bB8GUq5MzkmkYt7yw==", "requires": { "@oclif/command": "^1.6.0", "@oclif/errors": "^1.2.1", @@ -2747,106 +2652,92 @@ "ansi-escapes": "^4.3.0", "ansi-styles": "^4.2.0", "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "clean-stack": "^2.0.0", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", "cli-progress": "^3.4.0", - "extract-stack": "^1.0.0", - "fs-extra": "^7.0.1", + "extract-stack": "^2.0.0", + "fs-extra": "^9.0.1", "hyperlinker": "^1.0.0", "indent-string": "^4.0.0", - "is-wsl": "^1.1.0", + "is-wsl": "^2.2.0", "js-yaml": "^3.13.1", "lodash": "^4.17.11", "natural-orderby": "^2.0.1", "object-treeify": "^1.1.4", "password-prompt": "^1.1.2", - "semver": "^5.6.0", - "string-width": "^3.1.0", - "strip-ansi": "^5.1.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^1.0.1", - "tslib": "^1.9.3" + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^7.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } + "color-convert": "^1.9.0" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "3.1.0", @@ -2858,37 +2749,12 @@ "strip-ansi": "^5.1.0" } }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-regex": "^4.1.0" } }, "wrap-ansi": { @@ -2946,6 +2812,11 @@ "readable-stream": "^2.3.5" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2960,11 +2831,6 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2997,17 +2863,17 @@ } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.4.0", @@ -3073,13 +2939,6 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "content-type": { @@ -3094,14 +2953,6 @@ "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "cookie": { @@ -3157,6 +3008,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "cross-spawn-async": { @@ -3397,12 +3255,11 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "path-type": "^4.0.0" } }, "doctrine": { @@ -3433,9 +3290,9 @@ } }, "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexer3": { "version": "0.1.4", @@ -3478,9 +3335,9 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -3569,13 +3426,6 @@ "is-set": "^2.0.1", "is-string": "^1.0.5", "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } } }, "es-to-primitive": { @@ -3665,12 +3515,6 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3682,30 +3526,6 @@ "which": "^2.0.1" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -3718,18 +3538,6 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3745,27 +3553,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3811,6 +3604,59 @@ "eslint-plugin-mocha": "^5.2.0", "eslint-plugin-node": "^7.0.1", "eslint-plugin-unicorn": "^6.0.1" + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + } } }, "eslint-config-prettier": { @@ -3845,6 +3691,23 @@ "requires": { "eslint-utils": "^1.4.2", "regexpp": "^2.0.1" + }, + "dependencies": { + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + } } }, "eslint-plugin-mocha": { @@ -3870,11 +3733,26 @@ "semver": "^5.5.0" }, "dependencies": { + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -3898,7 +3776,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -3907,43 +3784,32 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" } } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "requires": { "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz", - "integrity": "sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", - "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "dev": true, "requires": { - "acorn": "^7.3.1", + "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } } }, "esprima": { @@ -3972,7 +3838,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, "requires": { "estraverse": "^4.1.0" }, @@ -3980,8 +3845,7 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" } } }, @@ -4016,9 +3880,9 @@ } }, "execa": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz", - "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", + "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -4041,6 +3905,14 @@ "which": "^2.0.1" } }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4166,11 +4038,6 @@ "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4183,21 +4050,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -4231,9 +4083,9 @@ } }, "extended-emitter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/extended-emitter/-/extended-emitter-1.0.3.tgz", - "integrity": "sha512-gdaWWszJmr2oq6rKSxPmuclQtEwfzt4JwmGrEqTnE89GQHqZyvPZ/NWj6fBgK3IKufvRyJDnLZviUFPrrJf36Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/extended-emitter/-/extended-emitter-1.0.4.tgz", + "integrity": "sha512-QBGuIo+pCXnYNeLUObaH/IKrCrzWzm4KhQNvA/mwNTs7/wzFylmA765zxh0WwWqpX1skQGXvzcRMHScc87Om/g==", "dev": true, "requires": { "sift": "*", @@ -4310,9 +4162,9 @@ } }, "extract-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-1.0.0.tgz", - "integrity": "sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", + "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==" }, "extsprintf": { "version": "1.3.0", @@ -4320,18 +4172,17 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fancy-test": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/fancy-test/-/fancy-test-1.4.8.tgz", - "integrity": "sha512-/uCv78YSAz4UOQ3ZptnxOq6qYhJDMtwFHQnsghzGl2g6uO2VNfJDKlyczqFpG+KueXe7phoeIS6hMU1x/qhizQ==", + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/fancy-test/-/fancy-test-1.4.9.tgz", + "integrity": "sha512-Tro3lkXPX438G3t2N9BDgD3ac5iUhNnxIE8tg/KL6z7eZ5GOCexs7fDEMacduqvJWPvsRlmyQ69V1jiTVcqkXQ==", "dev": true, "requires": { "@types/chai": "*", "@types/lodash": "*", - "@types/mocha": "*", "@types/node": "*", "@types/sinon": "*", "lodash": "^4.17.13", - "mock-stdin": "^0.3.1", + "mock-stdin": "^1.0.0", "stdout-stderr": "^0.1.9" } }, @@ -4341,37 +4192,16 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, "fast-json-stable-stringify": { @@ -4470,51 +4300,6 @@ "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } } }, "find-parent-dir": { @@ -4533,11 +4318,12 @@ } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "first-chunk-stream": { @@ -4548,6 +4334,11 @@ "readable-stream": "^2.0.2" }, "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -4562,11 +4353,6 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -4614,38 +4400,20 @@ "dev": true }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -4733,9 +4501,9 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, "fromentries": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", - "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", + "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", "dev": true }, "fs-constants": { @@ -4753,22 +4521,6 @@ "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^1.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - } } }, "fs-minipass": { @@ -4799,8 +4551,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gensync": { "version": "1.0.0-beta.1", @@ -4831,9 +4582,9 @@ "dev": true }, "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" } @@ -4858,6 +4609,49 @@ "requires": { "got": "^6.2.0", "is-plain-obj": "^1.1.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + } } }, "github-slugger": { @@ -4892,9 +4686,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4950,10 +4744,21 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } }, "globby": { "version": "11.0.1", @@ -4966,93 +4771,24 @@ "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } } }, "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - } + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" } }, "graceful-fs": { @@ -5079,11 +4815,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -5213,6 +4949,15 @@ "js-tokens": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5222,16 +4967,29 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -5301,13 +5059,6 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } } }, "http-signature": { @@ -5345,9 +5096,9 @@ "dev": true }, "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "ignore-by-default": { "version": "1.0.1", @@ -5389,9 +5140,9 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "inflight": { "version": "1.0.6", @@ -5403,9 +5154,9 @@ } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", @@ -5430,59 +5181,6 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } } }, "interpret": { @@ -5547,12 +5245,11 @@ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" }, "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-data-descriptor": { @@ -5601,9 +5298,9 @@ } }, "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" }, "is-es2016-keyword": { "version": "1.0.0", @@ -5628,9 +5325,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.1", @@ -5698,9 +5395,9 @@ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" }, "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "requires": { "has-symbols": "^1.0.1" } @@ -5757,9 +5454,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } }, "is-yarn-global": { "version": "0.3.0", @@ -5767,9 +5467,9 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "isbinaryfile": { "version": "4.0.6", @@ -5983,6 +5683,14 @@ "minimatch": "^3.0.4" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "async": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", @@ -5998,6 +5706,19 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -6006,9 +5727,9 @@ } }, "joi": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.0.tgz", - "integrity": "sha512-9ZC8pMSitNlenuwKARENBGVvvGYHNlwWe5rexo2WxyogaxCB5dNHAgFA1BJQ6nsJrt/jz1p5vSqDT6W6kciDDw==", + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz", + "integrity": "sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA==", "requires": { "@hapi/address": "^4.1.0", "@hapi/formula": "^2.0.0", @@ -6057,7 +5778,13 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz", + "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==" }, "json-schema": { "version": "0.2.3", @@ -6089,11 +5816,12 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" } }, "jsonparse": { @@ -6137,79 +5865,6 @@ "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "requires": { "package-json": "^6.3.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - } } }, "lazy-cache": { @@ -6236,31 +5891,27 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } @@ -6292,12 +5943,11 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -6389,6 +6039,14 @@ "chalk": "^2.4.2" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6399,6 +6057,19 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -6432,9 +6103,9 @@ } }, "luxon": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.24.1.tgz", - "integrity": "sha512-CgnIMKAWT0ghcuWFfCWBnWGOddM0zu6c4wZAWmD0NN7MZTnro0+833DF6tJep+xlxRPg4KtsYEHYLfTMBQKwYg==" + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.25.0.tgz", + "integrity": "sha512-hEgLurSH8kQRjY6i4YLey+mcKVAWXbDNlZRmM6AgWDJ1cY3atl8Ztf5wEY7VBReFbmGnwQPz7KYJblL8B2k0jQ==" }, "make-dir": { "version": "3.1.0", @@ -6519,6 +6190,46 @@ "vinyl": "^2.2.0" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", @@ -6527,17 +6238,57 @@ "path-type": "^3.0.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "globby": { @@ -6560,6 +6311,64 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -6569,6 +6378,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -6600,6 +6418,28 @@ "pinkie-promise": "^2.0.0" } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -6670,150 +6510,62 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" }, "dependencies": { "yallist": { @@ -6925,28 +6677,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6961,27 +6691,6 @@ "esprima": "^4.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, "strip-json-comments": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", @@ -7006,15 +6715,15 @@ } }, "mock-stdin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-0.3.1.tgz", - "integrity": "sha1-xlfZZC2QeGQ1xkyl6Zu9TQm9fdM=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-1.0.0.tgz", + "integrity": "sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==", "dev": true }, "moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "moment-timezone": { "version": "0.5.31", @@ -7041,11 +6750,6 @@ "minimatch": "^3.0.4" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -7113,6 +6817,23 @@ "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } } }, "nock": { @@ -7178,6 +6899,11 @@ "requires": { "ms": "^2.1.1" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -7198,6 +6924,13 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "normalize-path": { @@ -7317,6 +7050,15 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -7356,14 +7098,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "is-fullwidth-code-point": { @@ -7419,16 +7153,14 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", @@ -7444,13 +7176,34 @@ "restore-cursor": "^1.0.1" } }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dev": true, "requires": { - "dot-prop": "^4.1.0", + "dot-prop": "^4.2.1", "graceful-fs": "^4.1.2", "make-dir": "^1.0.0", "unique-string": "^1.0.0", @@ -7476,13 +7229,20 @@ "dev": true }, "dot-prop": { - "version": "4.2.0", - "resolved": "", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "requires": { "is-obj": "^1.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "execa": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", @@ -7504,14 +7264,16 @@ "requires": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "get-stream": { @@ -7556,6 +7318,25 @@ "pinkie-promise": "^2.0.0" } }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, "inquirer": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", @@ -7577,6 +7358,15 @@ "through": "^2.3.6" } }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -7664,6 +7454,18 @@ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -7685,6 +7487,40 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "restore-cursor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", @@ -7704,10 +7540,25 @@ "once": "^1.3.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -7816,14 +7667,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "supports-color": { @@ -7837,6 +7680,57 @@ } } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", @@ -7890,6 +7784,19 @@ "yargs": "14.2.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7900,6 +7807,24 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -7913,6 +7838,11 @@ "locate-path": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -7943,6 +7873,11 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -7953,6 +7888,14 @@ "strip-ansi": "^5.1.0" } }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, "yargs": { "version": "14.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.0.tgz", @@ -8063,22 +8006,6 @@ "yargs": "^15.0.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -8090,81 +8017,6 @@ "wrap-ansi": "^6.2.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -8174,26 +8026,6 @@ "glob": "^7.1.3" } }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -8206,9 +8038,9 @@ } }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -8221,7 +8053,7 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" + "yargs-parser": "^18.1.2" } }, "yargs-parser": { @@ -8295,9 +8127,9 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-treeify": { - "version": "1.1.25", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.25.tgz", - "integrity": "sha512-6Abx0xlXDnYd50JkQefvoIly3jWOu8/PqH4lh8p2/aMFEx5TjsUGHt0H9NHfzt+pCwOhpPgNYofD8e2YywIXig==" + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.26.tgz", + "integrity": "sha512-0WTfU7SGM8umY4YPpOg+oHXL66E6dPVCr+sMR6KitPmvg8CkVrHUUZYEFtx0+5Wb0HjFEsBwBYXyGRNeX7c/oQ==" }, "object-visit": { "version": "1.0.1", @@ -8343,9 +8175,9 @@ } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" } @@ -8399,14 +8231,6 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "cli-cursor": { @@ -8418,6 +8242,12 @@ "restore-cursor": "^1.0.1" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "onetime": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", @@ -8475,11 +8305,11 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { @@ -8526,15 +8356,21 @@ } }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "paged-request": { @@ -8553,6 +8389,27 @@ "follow-redirects": "1.5.10", "is-buffer": "^2.0.2" } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -8566,13 +8423,13 @@ } }, "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", + "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, @@ -8614,9 +8471,9 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -8640,29 +8497,14 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pathval": { "version": "1.1.0", @@ -8708,33 +8550,12 @@ } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "find-up": "^4.0.0" } }, "please-upgrade-node": { @@ -8759,6 +8580,14 @@ "requires": { "path-exists": "^3.0.0", "which-pm": "^1.0.1" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "prefix-matches": { @@ -8777,9 +8606,9 @@ "dev": true }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "pretty-bytes": { "version": "5.3.0", @@ -8900,17 +8729,14 @@ "write-json-file": "^4.1.1" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "chalk": { "version": "2.4.2", @@ -8921,25 +8747,29 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "path-type": "^4.0.0" + "color-name": "1.1.3" } }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "execa": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", @@ -8963,30 +8793,6 @@ } } }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "fs-extra": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", @@ -8998,6 +8804,15 @@ "universalify": "^0.1.0" } }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -9014,47 +8829,19 @@ "slash": "^3.0.0" } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "graceful-fs": "^4.1.6" } }, "npm-run-path": { @@ -9066,48 +8853,6 @@ "path-key": "^2.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, "tmp": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", @@ -9117,18 +8862,18 @@ "rimraf": "^2.6.3" } }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "ramda": { "version": "0.26.1", @@ -9158,13 +8903,6 @@ "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } } }, "rc": { @@ -9219,6 +8957,38 @@ "requires": { "find-up": "^3.0.0", "read-pkg": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } } }, "readable-stream": { @@ -9351,28 +9121,24 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" }, "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "^1.2.8" } }, "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "requires": { - "rc": "^1.0.1" + "rc": "^1.2.8" } }, "release-zalgo": { @@ -9450,6 +9216,11 @@ "mime-types": "^2.1.12" } }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -9561,7 +9332,6 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, "requires": { "tslib": "^1.9.0" }, @@ -9569,15 +9339,14 @@ "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" } } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -9598,9 +9367,9 @@ "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "semver-compare": { "version": "1.0.0", @@ -9609,12 +9378,18 @@ "dev": true }, "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { - "semver": "^5.0.3" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "send": { @@ -9652,11 +9427,6 @@ } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -9765,9 +9535,9 @@ } }, "sift": { - "version": "13.1.10", - "resolved": "https://registry.npmjs.org/sift/-/sift-13.1.10.tgz", - "integrity": "sha512-Z+7ZMTbnmbuVCwER+8jNerXpuJNYsxFSZf1er8VUqF/qYdgTrG5o5TQ7C6nWDycQY/TA1pczVCj58y5RvrUtrA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.3.0.tgz", + "integrity": "sha512-7QU0yomqQhu9O4dGfHpURRZBnIGfz6sio1V6jlb1N4Z7hTqSJxTI5kPWycH1fUgDcJLOg8dfdkrHDDCM3m+hKw==", "dev": true }, "signal-exit": { @@ -9808,9 +9578,9 @@ } }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "2.1.0", @@ -9821,6 +9591,38 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, "snapdragon": { @@ -10155,23 +9957,6 @@ "requires": { "debug": "^4.1.1", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "stream-combiner": { @@ -10194,27 +9979,13 @@ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "string.prototype.trimend": { @@ -10241,14 +10012,21 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -10318,18 +10096,26 @@ } }, "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "dependencies": { "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -10345,6 +10131,24 @@ "string-width": "^3.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -10355,6 +10159,15 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -10405,9 +10218,9 @@ } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", "dev": true, "requires": { "bl": "^4.0.1", @@ -10431,22 +10244,6 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "text-table": { @@ -10471,11 +10268,19 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "requires": { + "inherits": "^2.0.4", "readable-stream": "2 || 3" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } } }, "timed-out": { @@ -10578,9 +10383,9 @@ "dev": true }, "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", + "integrity": "sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg==", "dev": true, "requires": { "arg": "^4.1.0", @@ -10599,7 +10404,6 @@ "version": "3.17.1", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, "requires": { "tslib": "^1.8.1" }, @@ -10607,8 +10411,7 @@ "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" } } }, @@ -10662,9 +10465,9 @@ } }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", "dev": true }, "typical": { @@ -10716,9 +10519,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" }, "unpipe": { "version": "1.0.0", @@ -10758,6 +10561,11 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, @@ -10791,15 +10599,6 @@ "xdg-basedir": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -10809,50 +10608,11 @@ "supports-color": "^7.1.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - } - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -10877,11 +10637,11 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "^2.0.0" } }, "use": { @@ -10967,9 +10727,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -11003,6 +10763,14 @@ "requires": { "load-yaml-file": "^0.1.0", "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "wide-align": { @@ -11011,15 +10779,43 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { - "string-width": "^2.1.1" + "string-width": "^4.0.0" } }, "with-open-file": { @@ -11057,28 +10853,13 @@ "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==" }, "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -11125,18 +10906,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } } } }, @@ -11179,6 +10948,51 @@ "yargs-parser": "^13.1.2" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -11188,6 +11002,14 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -11212,6 +11034,51 @@ "yargs": "^14.2.3" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -11222,6 +11089,14 @@ "strip-ansi": "^5.1.0" } }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, "yargs": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", @@ -11283,11 +11158,59 @@ "yeoman-generator": "^4.8.2" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -11298,6 +11221,19 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -11311,11 +11247,73 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "globby": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", @@ -11330,6 +11328,34 @@ "slash": "^1.0.0" } }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -11338,10 +11364,38 @@ "chalk": "^2.0.1" } }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "strip-ansi": { "version": "4.0.0", @@ -11350,6 +11404,15 @@ "requires": { "ansi-regex": "^3.0.0" } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -11387,6 +11450,54 @@ "yeoman-environment": "^2.9.5" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -11397,6 +11508,19 @@ "supports-color": "^5.3.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", @@ -11406,9 +11530,9 @@ } }, "ejs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz", - "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", "requires": { "jake": "^10.6.1" } @@ -11418,17 +11542,65 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "globby": { @@ -11451,6 +11623,38 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "mem-fs-editor": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-7.0.1.tgz", @@ -11479,25 +11683,77 @@ } } }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, diff --git a/package.json b/package.json index ddb5597..ed336ce 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,11 @@ "@oclif/plugin-help": "^3.2.0", "@oclif/plugin-not-found": "^1.2.4", "@shipengine/capitalization": "^1.2.0", - "@shipengine/connect-loader": "^1.0.11", + "@shipengine/connect-loader": "^1.0.12", "@shipengine/connect-local-dev-api": "^1.0.10", - "@shipengine/connect-sdk": "^1.0.9", + "@shipengine/connect-sdk": "^1.0.10", + "@typescript-eslint/eslint-plugin": "^3.9.1", + "@typescript-eslint/parser": "^3.9.1", "axios": "^0.20.0", "chai": "^4.2.0", "chalk": "^4.1.0", @@ -89,8 +91,8 @@ "sinon": "^9.0.3", "source-map-support": "^0.5.17", "tar": "^6.0.5", - "ts-node": "^8.10.2", - "typescript": "^3.9.7", + "ts-node": "^9.0.0", + "typescript": "^4.0.2", "yeoman-assert": "^3.1.1", "yeoman-test": "^3.0.0" }, From e2f98abb0986bfea4920d8cd9f89ddf235e86235 Mon Sep 17 00:00:00 2001 From: James Messinger Date: Sun, 23 Aug 2020 13:56:05 -0500 Subject: [PATCH 51/53] Added @TypeScript-ESLint/Recommened --- .eslintignore | 2 -- .eslintrc.js | 27 ---------------- .eslintrc.yml | 79 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 ++- test/.eslintrc.yml | 11 ++----- 5 files changed, 83 insertions(+), 41 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 .eslintrc.yml diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 22ed1cb..0000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -/lib -/templates diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 3172904..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - env: { - es6: true, - node: true, - }, - extends: [ - "oclif", - "oclif-typescript", - "eslint:recommended", - "prettier", - "prettier/@typescript-eslint", - ], - rules: { - "no-console": 0, - "@typescript-eslint/no-use-before-define": 0, - "valid-jsdoc": 0, - "no-warning-comments": 0, - "prefer-promise-reject-errors": 0, - "no-await-in-loop": 0, - "no-negated-condition": 0, - "no-implicit-coercion": 0, - "new-cap": 0, - "no-dupe-else-if": 0, - "no-import-assign": 0, - "no-setter-return": 0 - } -}; \ No newline at end of file diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..e80a613 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,79 @@ +# ESLint config +# http://eslint.org/docs/user-guide/configuring +# https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/README.md +# https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/TYPED_LINTING.md + +root: true + +env: + es6: true + node: true + +overrides: + # Linter settings for JavaScript + - files: ["**/*.js"] + parserOptions: + ecmaVersion: 2020 + extends: + - oclif + - eslint:recommended + - prettier + rules: + one-var: warn + camelcase: warn + no-else-return: warn + node/no-missing-require: warn + no-unused-expressions: warn + no-unused-vars: warn + no-multi-assign: warn + node/no-extraneous-require: warn + + + # Linter settings for TypeScript + - files: ["**/*.ts"] + parser: "@typescript-eslint/parser" + parserOptions: + ecmaVersion: 2020 + sourceType: module + project: tsconfig.json + plugins: + - "@typescript-eslint" + extends: + - oclif + - oclif-typescript + - eslint:recommended + - prettier + - prettier/@typescript-eslint + - plugin:@typescript-eslint/recommended + - plugin:@typescript-eslint/recommended-requiring-type-checking + rules: + no-console: off + valid-jsdoc: off + no-warning-comments: off + no-use-before-define: off + prefer-promise-reject-errors: off + no-await-in-loop: off + no-negated-condition: off + no-implicit-coercion: off + new-cap: off + no-dupe-else-if: off + no-import-assign: off + no-setter-return: off + camelcase: warn + no-case-declarations: warn + "@typescript-eslint/ban-types": off + "@typescript-eslint/no-use-before-define": off + "@typescript-eslint/unbound-method": warn + "@typescript-eslint/ban-ts-comment": warn + "@typescript-eslint/prefer-regexp-exec": warn + "@typescript-eslint/no-non-null-assertion": warn + "@typescript-eslint/no-unsafe-call": warn + "@typescript-eslint/no-unsafe-return": warn + "@typescript-eslint/no-unsafe-member-access": warn + "@typescript-eslint/no-unsafe-assignment": warn + "@typescript-eslint/restrict-plus-operands": warn + "@typescript-eslint/restrict-template-expressions": warn + "@typescript-eslint/no-unnecessary-type-assertion": warn + "@typescript-eslint/await-thenable": warn + "@typescript-eslint/require-await": warn + "@typescript-eslint/no-var-requires": warn diff --git a/package.json b/package.json index ed336ce..3734f44 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ "yeoman-generator": "^4.11.0" }, "devDependencies": { - "@jsdevtools/eslint-config-modular": "^8.0.4", "@jsdevtools/version-bump-prompt": "^6.0.6", "@oclif/dev-cli": "^1.22.2", "@oclif/test": "^1.2.6", @@ -137,10 +136,10 @@ "bump": "bump --tag --push --all", "clean": "shx rm -rf .nyc_output coverage lib", "coverage": "nyc npm run test", - "lint": "eslint . --ext .ts --config .eslintrc.js", + "lint": "eslint src test/specs", "mocha": "mocha", "postpack": "shx rm -rf oclif.manifest.json", - "posttest": "eslint . --ext .ts --config .eslintrc.js", + "posttest": "eslint src test/specs", "prepack": "shx rm -rf lib && tsc -b && oclif-dev manifest && oclif-dev readme", "release": "npm run upgrade && npm run clean && npm test && npm run bump", "test": "shx rm -rf lib && npm run build && nyc --extension .ts mocha --forbid-only && npm run lint", diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml index 1b8e60f..2a7ae23 100644 --- a/test/.eslintrc.yml +++ b/test/.eslintrc.yml @@ -1,12 +1,5 @@ # ESLint config # http://eslint.org/docs/user-guide/configuring -# https://jstools.dev/eslint-config-modular/ -root: true - -extends: - - "@jsdevtools/modular/best-practices" - - "@jsdevtools/modular/style" - - "@jsdevtools/modular/es6" - - "@jsdevtools/modular/node" - - "@jsdevtools/modular/test" \ No newline at end of file +env: + mocha: true From 6fd6de593460012f16fc2c37e8460561f7156c01 Mon Sep 17 00:00:00 2001 From: James Messinger Date: Sun, 23 Aug 2020 14:01:00 -0500 Subject: [PATCH 52/53] Added non-null assertions to fix TSC errors --- src/core/utils/time-stamps.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/core/utils/time-stamps.ts b/src/core/utils/time-stamps.ts index 4fce8ae..2a976c7 100644 --- a/src/core/utils/time-stamps.ts +++ b/src/core/utils/time-stamps.ts @@ -7,14 +7,14 @@ export function initializeTimeStamps(): TimeStamps { const date = new Date(); // TODO: Get more business logic and see if these time stamps are accurate - const yesterday = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ hours: 12 }).minus({ days: 1 }).toISO(); - const today = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ hours: 12 }).toISO(); - const tomorrowEarly = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 9 }).toISO(); - const tomorrowEarlyAM = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 6 }).toISO(); - const tomorrow = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 12 }).toISO(); - const twoDays = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 2, hours: 12 }).toISO(); - const twoDaysEarly = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 2, hours: 9 }).toISO(); - const threeDays = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 3 }).toISO(); + const yesterday = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ hours: 12 }).minus({ days: 1 }).toISO()!; + const today = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ hours: 12 }).toISO()!; + const tomorrowEarly = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 9 }).toISO()!; + const tomorrowEarlyAM = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 6 }).toISO()!; + const tomorrow = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 1, hours: 12 }).toISO()!; + const twoDays = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 2, hours: 12 }).toISO()!; + const twoDaysEarly = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 2, hours: 9 }).toISO()!; + const threeDays = DateTime.local(date.getFullYear(), date.getMonth() + 1, date.getDate()).plus({ days: 3 }).toISO()!; const timeStamps: TimeStamps = { yesterday, From 6fc8b83b4dcfb86d6a3ae780dfc27ff7ec7c3791 Mon Sep 17 00:00:00 2001 From: James Messinger Date: Sun, 23 Aug 2020 14:13:00 -0500 Subject: [PATCH 53/53] release v1.0.14 --- README.md | 22 +++++++++++----------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ee89bac..54eb5b8 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ $ npm install -g @shipengine/connect-cli $ connect COMMAND running command... $ connect (-v|--version|version) -@shipengine/connect-cli/1.0.13 linux-x64 node-v12.18.1 +@shipengine/connect-cli/1.0.14 win32-x64 node-v14.7.0 $ connect --help [COMMAND] USAGE $ connect COMMAND @@ -63,7 +63,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.0/src/commands/help.ts)_ +_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.0/src\commands\help.ts)_ ## `connect info` @@ -77,7 +77,7 @@ OPTIONS -h, --help show help for the info command ``` -_See code: [src/commands/info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/info.ts)_ +_See code: [src\commands\info.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\info.ts)_ ## `connect init [PATH]` @@ -102,7 +102,7 @@ EXAMPLE $ connect init ``` -_See code: [src/commands/init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/init.ts)_ +_See code: [src\commands\init.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\init.ts)_ ## `connect login` @@ -119,7 +119,7 @@ ALIASES $ connect login ``` -_See code: [src/commands/login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/login.ts)_ +_See code: [src\commands\login.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\login.ts)_ ## `connect logout` @@ -136,7 +136,7 @@ ALIASES $ connect logout ``` -_See code: [src/commands/logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/logout.ts)_ +_See code: [src\commands\logout.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\logout.ts)_ ## `connect pack` @@ -153,7 +153,7 @@ EXAMPLE $ connect pack ``` -_See code: [src/commands/pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/pack.ts)_ +_See code: [src\commands\pack.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\pack.ts)_ ## `connect publish` @@ -172,7 +172,7 @@ EXAMPLE $ connect publish ``` -_See code: [src/commands/publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/publish.ts)_ +_See code: [src\commands\publish.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\publish.ts)_ ## `connect start` @@ -187,7 +187,7 @@ OPTIONS -p, --port=port [default: 3000] the port that the app will run on ``` -_See code: [src/commands/start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/start.ts)_ +_See code: [src\commands\start.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\start.ts)_ ## `connect test` @@ -210,7 +210,7 @@ EXAMPLES $ connect test --grep rateShipment ``` -_See code: [src/commands/test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/test.ts)_ +_See code: [src\commands\test.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\test.ts)_ ## `connect whoami` @@ -227,5 +227,5 @@ ALIASES $ connect whoami ``` -_See code: [src/commands/whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.13/src/commands/whoami.ts)_ +_See code: [src\commands\whoami.ts](https://github.com/ShipEngine/connect-cli/blob/v1.0.14/src\commands\whoami.ts)_ diff --git a/package-lock.json b/package-lock.json index d49e637..8868591 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@shipengine/connect-cli", - "version": "1.0.13", + "version": "1.0.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3734f44..d5bca9e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@shipengine/connect-cli", "description": "A CLI tool for working with your ShipEngine Connect account.", - "version": "1.0.13", + "version": "1.0.14", "author": { "name": "ShipEngine", "email": "support@shipengine.com",